虽然这个问题可能带有个人观点,但对于新手来说仍然很重要,因为它还涉及使用 LaTeX 的工作流程。目前,我使用 LaTeX 撰写论文,并在draw.io因为它使这个过程非常快速和简单。
然而,我注意到许多研究人员都有完整的 LaTeX 工作流程,因为他们使用 TikZ 来制作矢量图形。我尝试了一下,发现它和 LaTeX 一样复杂。显然,我不是独一无二的他认为 LaTeX 是一种不必要的复杂且令人困惑的排版系统。然而,一方面,我确实看到使用 LaTex 在引用、参考和数学方程方面有优势。另一方面,我看不出使用 Tikz 有什么优势,因为我浪费了大量时间来制作一个简单的图表,而这可以在 draw.io(或其他平台)上更快地完成,而不会造成任何损失。
可能,许多研究人员采用 Tikz 是有充分理由的,我真的很想知道这个理由是什么。
答案1
对我来说,我喜欢 TikZ 的原因与我喜欢 LaTeX 的原因相同:保存文档的原始源代码与保存编译后的文档一样重要 - 如果不是更重要的话。
我认为我写的每一篇文档都需要编辑,根据我的经验,这并非遥不可及。我使用 LaTeX 是因为它让我能够以高级、语义化、易于编辑的方式表达我的文档。我可以通过调整宏定义来调整文档的格式、布局甚至结构。这是文档编程。
我对图表也采取同样的方法。有图表固然很好,但我不只是想要图表——我想保留我如何创建图表以高级、语义化、易于编辑的方式。图表需要调整,如果我只有图像工件——甚至是 SVG 工件——我就无法制作基本的无需从头开始即可更改图表的格式、布局和结构。
Inkscape 之类的工具比 Paint 之类的简单绘图工具要好,因为它们至少可以让您保存和调整图表的定义。(这可能包括您提到的 draw.io 工具。我从未尝试过,所以我不知道。)但它们与 Word 之类的文字处理器存在同样的问题 — 它们将格式和结构与内容绑定在一起。Inkscape 和 Word 的抽象工具远不如 TikZ 或 LaTeX 强大。TikZ 和 LaTeX 一样,是一种编程语言。
使用 TikZ,我可以描述图形的节点,包括它们的相对位置,并且我可以用任意键和值标记它们。我可以分别地将格式(包括 LaTeX 格式)与这些键和值联系起来。我可以定义列表、范围、值等,并从这些列表、范围和值动态构建 TikZ 图表。TikZ 优于其他编程图表编程语言(例如,图表在 Python 中或美人鱼在 JavaScript 中)是 TikZ 源代码存在里面我的 LaTeX 文档,并将我的所有 LaTeX 宏和定义视为一等公民。因此我的所有字体和样式选择都会自动使用。
其他地方已经指出,由于现代 LaTeX 实现(如 LuaLaTeX 和 XeLaTeX)支持系统字体,因此很容易让 Inkscape 等工具使用相同的字体选择,但除了使用相同字体之外,还有其他好处。首先,TikZ 将自动地使用相同的字体,因此我只需在一个地方更改它,它就不会不同步。此外,字体只是样式的一个变量——还有间距、宽度、启用的连字,并且 TikZ 可以使用 LaTeX 的数学模式。
尽管如此,TikZ 很复杂,我经常需要阅读大量文档才能弄清楚如何在 TikZ 中表达我想要的内容——就像我在 LaTeX 中所做的一样!它们都遭受宏编程的相同复杂性和困难,并且 TikZ 的键值配置系统具有自己的独特性。这是一种权衡,有时使用所见即所得的工具来创建图表非常诱人。但我通常坚持使用 TikZ,因为我知道,一旦我投入工作来创建图表,出于我上面描述的所有原因,它将是值得的。
答案2
好吧,复杂性取决于观点和对工具的熟悉程度。让我们看一个例子:这正好花了 3 分钟(好吧,我的编辑器中有代码片段,这为我节省了大约 2 分钟……无论使用什么工具,熟练使用编辑器总是一件好事):
\documentclass{article}
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\newcommand{\mya}{2}
I have a nice parabola:
\[ y = \mya x^2 + 3 x + 1 \]
which is drawn like:
\begin{tikzpicture}
\begin{axis}[width=6cm,
xmin=-3, xmax=3,
ymin=-10, ymax=10,
domain=-10:10,
samples=100,
axis x line = center,
axis y line = center,
xlabel = {$x$},
ylabel = {$y$},
]
\addplot[blue, thick] {\mya *x*x + 3*x +1 };
\end{axis}
\end{tikzpicture}
\end{document}
...现在我可以更改文档始终如一只需改变宏的值\mya
。
这就是为什么 Ti钾Z(以及诸如pgfplots
和circuitikz
许多其他衍生工具)非常有用。我从未发现过集成度如此高的外部工具,让我几乎在短时间内就能获得 16 个不同的文档。
在我看来,这就是你问到的工具的主要价值。它们是完全集成的,你可以使用主文档中的变量(宏等),还可以生成一个文档,在其中调整几个参数,并且你不需要重新绘制任何东西。我经常用它们为我的学生准备考试和练习!
即使您不使用变量参数,您的图表和图形也会继承文档的特征——字体等。在上面的例子中,如果您将序言更改为使用 Palatino 字体,则图形标签也会随之更改,无需任何干预。
是的,学习曲线有时有点陡峭(但实际上并没有那么陡峭)。针锋相对……
PS — 撰写这篇文章比制作这个例子花费的时间要多得多。
答案3
我喜欢使用 TikZ,我的理由是:
- 在版本控制系统(Git 或 Subversion)中很常见。您有人类可读的差异,代码很小(与 XML 或二进制格式相比)
- 更改很容易,不需要存储原始图像文件(Gimp、draw.io 等)或转换文件格式。只需编辑代码、提交、编译即可。
- 工作流程可以自动化。我将测量结果保存为 CSV 并使用 TikZ 导入。如果我不得不更改实验,我会用新的 CSV 替换 CSV。如果论文审阅者要求我调整图表,则无需费力即可重新创建图表并进行修改。(数据分析的可重复性可加分)
答案4
使用 TikZ 做任何事情都有利弊,我认为对于我们大多数人来说,工具的范围要广泛得多。虽然每个人的需求都不同,但我认为我们可以从各种用户的实践中学习。但我认为基本问题是大多数人更喜欢更简单的工作流程更复杂的工作流程,使用多种工具(即使工具本身很简单)使得整体工作流程变得更加复杂,而不是更简单。
我用 TikZ 做一些事情,但其他事情就不用。我做的实验工作需要用 R 分析数据,所以我从不使用类似的东西pgfplots
来绘图,而是用 R 生成图表,然后把\includegraphics
它们包括进去。使用类似工具,knitr
你还可以将 R 代码包含在 LaTeX 文档中,如果你愿意的话,还可以保持所有内容独立,尽管我个人觉得这样做弊大于利。
另一方面,我的大部分工作也依赖于绘制句法树,为此我专门使用 TikZ。像和这样的树包forest
允许tikz-qtree
极其简单的输入(带标签的括号),然后为您绘制树。例如,这比任何 GUI 树绘制工具都要简单几个数量级。
对于其他类型的图表,即使是非常简单的图表,在 TikZ 中处理也会使工作流程更简单:无需保留使用多种工具创建的多个文档。此外,许多类型的小图表都适合成为宏。它们通常会重复出现,但使用不同的参数,而这种可编程性正是 TeX 非常适合的。
人们常说,与其他外部工具相比,在 TikZ 中完成所有操作都能实现更好的字体匹配。虽然这对于 来说是正确的pdflatex
,但如果您使用的是更现代的引擎,如lualatex
或 ,xelatex
那么字体匹配就没那么麻烦了,因为这些引擎可以使用任何系统安装的字体,因此您始终可以将字体与使用其他工具制作的图形进行匹配。当然,其他类型的东西,如行距等,可能更难匹配,但对于图形中的轴和图例标签等,这通常不是问题。