我想在 Ti 中绘制类似这样的图表钾Z.我的代码是:
\documentclass[a4paper]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node (wrijving) {wrijving};
\node (lading) [right=of wrijving] {(onzichtbare) lading};
\node (elkracht) [below=of lading] {elektrische kracht};
\node (afst) [below left=of elkracht] {afstoten};
\node (aantr) [below right=of elkracht] {aantrekken};
\path (wrijving) edge[->] (lading)
(lading) edge[->] (elkracht)
(elkracht) edge[-] (afst)
edge[-] (aantr);
\end{tikzpicture}
\end{document}
可能有更好的方法来绘制它,但我不知道如何。
我还希望“afstoten”和“aantrekken”更接近一些。我知道您可以为below
和指定一个值left
,但是是否可以有一个正常长度的分支,然后将其旋转 x 度?
答案1
因为它是一棵树,所以可以使用forest
包;代码现在相当短,并且您可以使用例如选项来控制两个较低元素的分离calign
(请参阅我的示例代码中注释掉的行):
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={edge={->},
%calign=fixed edge angles,
%calign primary angle=-40,calign secondary angle=40
}
[wrijving,grow=0
[(onzichtbare) lading
[elektrische kracht
[afstoten]
[aantrekken]
]
]
]
\end{forest}
\end{document}
答案2
这还没有调整定位,但更简洁:
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{chains,scopes}
\begin{document}
\begin{tikzpicture}[start chain=main going right, every on chain/.append style={join}, every join/.append style={->}]
\node [on chain] (wrijving) {wrijving};
\node [on chain] (lading) {(onzichtbare) lading};
\node [on chain=main going below] (elkracht) {elektrische kracht};
{[start branch=split going below left]
\node [on chain] (afst) {afstoten};}
\node [on chain=main going below right] (aantr) {aantrekken};
\end{tikzpicture}
\end{document}
编辑
为了改变图表在分支时的紧凑性,可以为链指定更详细的方向。例如,使用calc
库:
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{chains,scopes,calc}
\begin{document}
\begin{tikzpicture}[start chain=main going right, every on chain/.append style={join}, every join/.append style={->}]
\node [on chain] (wrijving) {wrijving};
\node [on chain] (lading) {(onzichtbare) lading};
\node [on chain=main going below] (elkracht) {elektrische kracht};
\node [on chain={main placed {at=($(\tikzchainprevious.south)+(-50:1.5)$)}}] (aantr) {aantrekken};
{[start chain=split]
\chainin (elkracht);
\node [on chain=placed {at=($(\tikzchainprevious.south)+(-130:1.5)$)}] (afst) {afstoten};}
\end{tikzpicture}
\end{document}
请注意,我非常喜欢forest
,如果您的图表真的是树,那就太好了。如果不是——也就是说,如果它们多次改变方向,并且不一定只有一个根——那么forest
仍然是一个选择,但chains
对于简单的情况来说可能更容易,因为编程能力并不是一个重要的考虑因素。
答案3
我提出了一种替代的、更简洁的解决方案,使用tikz-cd
为交换图制作的包,并且(在我看来)语法非常清晰和简单。通过一些简单的技巧,间距也可以轻松调整以产生任何你喜欢的结果:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
\mathrm{wrijving} \arrow[rr]& &[-2cm] \mathrm{(onzichtbare)\ lading} \arrow[d] &[-2cm]\\
& & \mathrm{elektrische\ kracht}\arrow[dl, no head]\arrow[dr, no head]\\
& \mathrm{afstoten} & & \mathrm{aantrekken}
\end{tikzcd}
\end{document}
其结果如下: