如果要写一大段文字,并想在其中添加如下图所示的图表,那么使用 LaTeX 最简单、最容易的方法是什么?我说的“简单”和“容易”是指 - 如果可能的话 - 不使用任何附加软件包,或者 - 再次:如果可能的话 - 至少不使用大型且功能强大(但也会减慢速度)的软件包,如 TikZ 和 PGF(或类似 smartdiagram 等的衍生产品)。
不过,如果能同时使用两条线以及虚线或其他类型的线就更好了,比如:——————
当然,我也对如何使用 Tikz 感兴趣,但如果可以避免所有这些神奇的工具,那么我更喜欢非 tikz 解决方案。或者,如果你告诉我使用 tikz 不会减慢编译过程,那么我很乐意使用 tikz。
答案1
虽然TikZ
可能确实如你所说“神奇”,但我认为它很容易理解并满足你的愿望。像你这样的图表不会增加编译时间,所以我认为这TikZ
是你最好的选择,如果你想自定义线条样式,这TikZ
很容易。所以这是你拥有的第一个图表的代码:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (a) at (0,0) {A};
\node (b) at (2,.7) {B};
\node (c) at (2,-.7) {C};
\node (d) at (4,1.1) {D};
\node (e) at (4,.3) {E};
\node (f) at (4,-.7) {F};
\node (g) at (6,-.3) {G};
\node (h) at (6,-1.1) {H};
\foreach \x\y in {a/b,a/c,b/d,b/e,c/f,f/g,f/h}{
\draw[line width=1pt] (\x)--(\y);
}
\end{tikzpicture}
\end{document}
命令非常直观,\node
将节点放置在您指定的位置,并\draw
在两点之间画一条线。所有位置均以笛卡尔坐标表示。我使用循环\foreach
在节点(以小写字母命名)之间绘制线条。命令选项放在方括号中,[...]
如\draw[line width=1pt]
,表示要绘制的线宽为 1pt。若要使线条变为虚线,请使用\draw[dashed]
,或 以获得更多变化,\draw[densely dashed]
或\draw[loosely dashed]
。此外,若要仅使部分线条变为虚线(而不是通过循环使所有线条都变为相同),只需从行中的花括号列表中\foreach
取出(例如),然后使用 创建新线条。这是上述代码的结果:a/b
\foreach
\draw[dashed] (a)--(b);
第二张图有同样的想法,所以我就不重复了。唯一改变的是,你有一个箭头,其中一条线是弯曲的。所有这些都可以在 中轻松处理TikZ
。所以这里是带有曲线的部分的代码:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (gamma) at (0,0) {$\gamma$};
\node (z) at (-1.5,-4) {Z};
\node (w) at (-.5,-2) {W};
\node (j) at (.5,-2) {J};
\draw[->,>=latex] (gamma)--(w);
\draw[->,>=latex] (gamma)--(j);
\draw[->,>=latex] (gamma) to [bend right=10] (z);
\end{tikzpicture}
\end{document}
请注意,现在\draw
命令有选项->
,表示在线的末端绘制箭头,和>=latex
,表示箭头的样式为latex
(箭头的样式有很多种)。命令的选项以逗号 分隔,
。此外,弯曲的线在指令中间有一个选项(还请注意(a)--(b)
可以替换为(a) to (b)
,但添加弯曲等选项时需要后者), 可以将其更改为bend left
,角度(在本例中为10
)也可以更改以使其更加弯曲。结果如下:
我认为所有这些都很简单,不是吗?编译这些图片不会减慢整个过程,现在您有一个强大的工具可供使用。