提问于:
浏览数:
3343
## 编译环境
操作系统
* [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 回答
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. 没有`-|-`这种用法
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)
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。