LaTeX
在 LaTeX 中创建或嵌入图形
在《导入图形》章节中,你学习了如何将图形导入或链接到 LaTeX 文档中,比如你在其他程序中创建或从其他地方获得的图形。在本章节中,你将学习如何直接在 LaTeX 文档中创建或嵌入图形。这些图形通过使用类似于排版粗体文本或创建数学公式的命令进行标记,如以下嵌入图形的示例所示:
\begin{displaymath}
\xymatrix{ \bullet \ar[r] \ar@{.>}[r] & \bullet }
\end{displaymath}
有多个包支持直接在 LaTeX 中创建图形,包括 picture
、xy-Pic
和 PGF/TikZ
,它们将在以下部分进行描述。
与 Xfig 或 Inkscape 等所见即所得(WYSIWIG)工具相比,这种方法需要更多的时间,但能够产生更好的结果。此外,输出完美地集成到文档中(无大小或字体上的对比问题)。
有关图形导入的更多细节以及如何解决集成问题的尝试,请参见《导入图形》。
概述
picture
环境允许你在 LaTeX 中直接编程图形。一方面,存在一些相当严格的约束,例如线段的斜率以及圆的半径只能选择一小部分值。另一方面,LaTeX2e 的 picture
环境引入了 \qbezier
命令,其中“q”代表二次贝塞尔曲线。许多常用曲线(如圆形、椭圆和悬链线)可以通过二次贝塞尔曲线很好地近似,尽管这可能需要一些数学计算。如果像 Java 这样的编程语言用于生成包含 \qbezier
的 LaTeX 输入文件块,picture
环境将变得非常强大。
尽管在 LaTeX 中直接编程图形受到严重限制,并且通常相当繁琐,但仍然有理由这么做。这样生成的文档在字节大小上是“小”的,且不需要附加的图形文件。
像 epic
、eepic
或 pstricks
这样的包增强了原始的 picture
环境,并大大加强了 LaTeX 的图形能力。
虽然前两个包只是增强了 picture
环境,但 pstricks
包拥有自己的绘图环境 pspicture
。pstricks
的强大之处在于它广泛利用了 PostScript 的功能。不幸的是,它有一个重大缺陷:它不能与 pdfLaTeX 一起使用。为了从 TeX 源生成 PDF 文档,必须从 TeX 转到 DVI,再转到 PDF,这个过程中会丢失超链接、元数据以及 pdfLaTeX 的微排版功能。
此外,还为特定目的编写了许多包。其中之一是 XY-pic
,在本章末尾进行了介绍。关于这些包的广泛信息,可以在《LaTeX Graphics Companion》中详细找到(与《LaTeX Companion》不同)。
MetaPost
与 LaTeX 相关的最强大的图形工具可能是 MetaPost,它是 Donald E. Knuth 的 METAFONT 的姊妹工具。MetaPost 具有非常强大且数学上复杂的编程语言,与 METAFONT 不同,MetaPost 生成封装的 PostScript 文件,可以导入到 LaTeX 中。有关介绍,请参见《MetaPost 用户手册》[1]。关于 LaTeX 和 TeX 图形(以及字体)策略的详细讨论,请参见《TeX Unbound》[2]。
PGF/TikZ 和 Asymptote
最后但并非最不重要的是 PGF/TikZ 和 Asymptote 系统。前面的系统(picture
、epic
、pstricks
或 metapost
)主要关注如何绘制,而 TikZ 和 Asymptote 更侧重于绘制的内容。可以说,TikZ 和 Asymptote 就像 LaTeX 对数字排版的作用一样,专注于 LaTeX 中的绘图。如果你的 LaTeX 发行版包含其中之一,建议使用它。TikZ 是一个纯粹的(La)TeX 系统,不依赖外部软件,而 Asymptote 是一个外部系统,可以无缝地与(La)TeX 集成。如果使用 Asymptote,使用 latexmk
来管理编译步骤会非常有帮助。
外部图形软件
在许多情况下,尤其是对于更复杂的图表,使用外部矢量图形软件绘制图形,并将文件导入到文档中可能更为容易(参见 LaTeX/导入图形)。然而,大多数软件不支持 LaTeX 字体或数学符号,这可能导致图形不合适或不一致。对此问题有几个解决方案。