## 编译环境 操作系统 * [x ] Windows 7/8/10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [x ] TexLive `年份` * [ ] MikTeX `版本号` * [ ] CTeX `若需勾选,请把[ ]改成[x]` ## 我的问题 a1,b1,c1,d1表示1-4列对应方框内的文本。 将下面的代码修正,或是指出达到效果的代码都可以。多谢了。 `````markdown \documentclass[UTF8]{ctexart} \usepackage{tikz} \usetikzlibrary{shapes,arrows} \begin{document} \begin{tikzpicture}[node distance=10pt] \node[draw, rounded corners] (a1) {有理数}; \node[draw, below=of a1] (a2) {数轴}; \node[draw, below=of a2] (a3) {比较大小}; \node[draw, diamond, aspect=2, rihgt=of a1] (b1) {有理数的运算}; \node[draw, right= of b1] (c1) {加法}; \node[draw, right= of b1] (c3) {乘法}; \node[draw, below=of c1] (c3) {交换律结合律}; \node[draw, below=of c3] (c4) {乘方}; \node[draw, right= of c1] (d1) {减法}; \node[draw, right= of c3] (d2) {分配律}; \node[draw, right= of c3] (d3) {除法}; \draw[->] (a1) -- node[rihgt] {点与数的对应} (a2); \draw[->] (a2) -- (a3); \draw[->] (a1) -- (b1); \draw[->] (b1) -- (b1-|-c1) (c1); \draw[->] (b1) -- (b1-|-c3) (c3); \draw[->] (c1) -- (d1); \draw[-] (c1) -- (c2); \draw[->] (c2) -- (c3); \draw[->] (c3) -- (c4); \draw[->] (c1) -- (d1); \draw[-] (c4) -- (d2); \draw[->] (c4) -- (d3); \end{tikzpicture} \end{document} ``` [![](https://wenda.latexstudio.net/data/attach/200604/l1ysEGRp.PNG)](https://wenda.latexstudio.net/data/attach/200604/l1ysEGRp.PNG)

3 回答3

0
只是得到具体的某个图怎么画的解答,不能解决画第二张图时怎么办的问题。还是要回归文档吧。 一个简化输入的尝试 ```tex \documentclass{ctexart} \usepackage{tikz} \usetikzlibrary{positioning, calc, arrows.meta} \makeatletter \tikzset{ x name/.code={% \pgfkeysalso{draw, name={#1}}% \setbox\@tempboxa=\hbox{#1}% \ifdim\wd\@tempboxa<3\ccwd \pgfkeysalso{node contents={\makebox[3\ccwd][s]{#1}}}% \else \pgfkeysalso{node contents={#1}}% \fi }, x name*/.style={ draw, name={#1} } } \makeatother \begin{document} % 限于实现,在 tikzpicture 之前必须有其他中文, % 见 https://github.com/CTeX-org/ctex-kit/issues/517 中文 \begin{tikzpicture}[>={Latex[]}, draw=cyan, minimum width=4\ccwd, node distance=.6cm] \node[x name=有理数]; \node[below=1cm of 有理数, x name=数轴]; \node[below=of 数轴, x name=比较大小]; \node[right=of 有理数, x name=有理数的运算]; \node[dashed, right=1.5cm of 有理数的运算, align=center, x name*=交换律结合律] {交换律\\结合律}; \node[above=of 交换律结合律, x name=加法]; \node[below=of 交换律结合律, x name=乘法]; \node[below=of 乘法, x name=乘方]; \node[right=of 加法, x name=减法]; \node[right=of 交换律结合律, x name=分配律]; \node[right=of 乘法, x name=除法]; \coordinate (x) at ($(有理数的运算.east)!0.5!(交换律结合律.west)$); \path[->, line width=.8pt] (有理数) edge node[right] {点与数的对应} (数轴) edge (有理数的运算) (数轴) edge (比较大小) (x |- 加法) edge (加法) (x |- 乘法) edge (乘法) (加法) edge (减法) (乘法) edge (除法) edge (乘方); \draw[line width=.8pt] (有理数的运算) -- (x) -- (x |- 加法) (x) -- (x |- 乘法) (加法) -- (交换律结合律) -- (乘法) (乘法.north east) -- (分配律); \end{tikzpicture} \end{document} ``` ![](https://wenda.latexstudio.net/data/attach/200604/ycalIAbb.png) 和问题里提供的图片相比较 ![](https://wenda.latexstudio.net/data/attach/200604/l1ysEGRp.PNG)
  • 非常感谢! – 海波 2020-12-13 20:37 回复
  • @海波 强烈建议使用所见即所得的绘图软件 – Carcino 2020-06-05 16:48 回复
  • 非常好,基本还原。学习中。多谢了。 – 海波 2020-06-05 11:33 回复
0
从你的描述并不能知道你想达到的效果,只能猜是想画树状图,那就去看手册的tree包文档,最好还是给个效果图。 然后提供完整可直接编译复现错误的MWE,从`\documentclass{...}`开始,到`\end{document}`结束 你这代码报错就能看出很多问题了,你都不看报错的吗? 1. right写成rihgt 2. c2未定义 3. 没有`-|-`这种用法
  • 不知道为什么。图不能显示。在问题的最下面有的本网站的链接。麻烦了。下面有人解答,我再参考一下。 – 海波 2020-06-05 11:32 回复
0
这个只要认真一点就不会有问题。 ``` \documentclass[UTF8]{ctexart} \usepackage{tikz} \usetikzlibrary{shapes,arrows} \usetikzlibrary{positioning} \begin{document} \begin{tikzpicture}[node distance=10pt] \node[draw, rounded corners] (a1) {有理数}; \node[draw, below=20pt of a1] (a2) {数轴}; \node[draw, below=of a2] (a3) {比较大小}; \node[draw, diamond, aspect=2, right=of a1] (b1) {有理数的运算}; \node[draw, right=of b1] (c2) {\parbox{3em}{交换律\\ 结合律}}; \node[draw, above=of c2] (c1) {加法}; \node[draw, below=of c2] (c3) {乘法}; \node[draw, below=of c3] (c4) {乘方}; \node[draw, right=of c1] (d1) {减法}; \node[draw, right=of c2] (d2) {分配律}; \node[draw, right=of c3] (d3) {除法}; \draw[->] (a1) -- node[right] {点与数的对应} (a2); \draw[->] (a2) -- (a3); \draw[->] (a1) -- (b1); \draw[->] (b1.east) -- ++(5pt,0) |- (c1); \draw[->] (b1.east) -- ++(5pt,0) |- (c3); \draw[-] (c1) -- (c2); \draw[-] (c2) -- (c3); \draw[->] (c3) -- (c4); \draw[->] (c1) -- (d1); \draw[-] (c3) -- (d2); \draw[->] (c3) -- (d3); \end{tikzpicture} \end{document} ``` ![](https://wenda.latexstudio.net/data/attach/200604/HwYsRAaC.jpg)
  • 这个代码变动最小。适合当下我的思考过程。下面的解答提供了新思路。一并致谢! – 海波 2020-06-05 11:34 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。