在使用 LaTeX 进行科学写作时,我陷入了哲学困境。起初,我尝试在编译时用 LaTeX 渲染所有图形,例如使用 PGFPlots 制作图表,而不是从 Excel 导入。然而,当我开始更大的项目时,我的编译时间呈指数级增长,而且我听说许多人更喜欢在图形中使用预渲染图像,而不是在编译时渲染图形。对于包含许多图表的大型项目来说,哪种做法更好?
我现在正在进行的项目包括 circuitikz 中的一些图表和电路图,用于提供一定程度的背景信息。我还在考虑采用 LaTeX 中设计的图形,将它们导出为图像,然后将它们重新导入到最终文档中。谢谢。
答案1
standalone
可以设置为仅在需要时重新编译包含的图片。否则,它将包含之前编译的 PDF。因此,无需切换到\includegraphics
以从预编译中受益。
这是一个基本的例子。
图示:
% mytikz.tex
\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{cathod}
\begin{document}
\begin{tikzpicture}
\pic {cath gorwedd={blue!50}{blue!25}{green}{yellow}{red!20!brown}};
\end{tikzpicture}
\end{document}
这里真正需要的是tikzpicture
环境,但是其余部分在最初处理图像时很方便,并且standalone
会在适当的时候忽略它,因此它最好保留下来。
现在主要文件:
\documentclass{article}
\usepackage[mode=buildnew]{standalone}
\usepackage{tikz}
\usetikzlibrary{cathod}
\begin{document}
\begin{figure}
\includestandalone{mytikz}
\end{figure}
\end{document}
如果使用 完成编译-shell-escape
,则会发生以下情况:
- 第一次运行时,将运行单独的编译过程来创建图像的裁剪版本,
mytikz.pdf
然后将其包含在内\includegraphics{}
; \includegraphics{}
在后续运行中,除非源已发生改变,否则将包含图像,在这种情况下它将首先重新编译。
通过改变的值mode=
,可以根据需要定制此行为。
在所有情况下,我都会得到一只可爱的蓝猫:
不过,你也可以用它处理其他猫的图片。即使是非猫内容也可以,至少我是这么理解的。
另一种方法是使用external
TikZ 库来外部化图像。同样,这需要-shell-escape
并且可以配置。默认情况下,它还会仅在图形发生变化时重新编译图形。然而,这显然仅限于 PGF/TikZ 图片,而standalone
提供了一种更通用的方法。
答案2
在我看来,出版物大多需要预编译的图形。你可以相对轻松地缓解你的困境,方法是将序言和Tikz/PGF
图形移动到单独的.tex
文件中,并\input
在编译时给自己一个选择。例如,你的主文档可能看起来像:
\documentclass{report}
\input{preamble}
\begin{document}
\begin{figure}
%\includegraphics{pgf_graphic.pdf}
\input{pgf_graphic.tex}
\caption{\label{fig:...}...}
\end{figure}
\end{document}
如果您想要预编译,您可以为您的图形制作一个包装器,如下所示:
\documentclass{standalone}
\input{preamble}
\begin{document}
\input{pgf_graphic.tex}
\end{document}
然后,您可以根据需要、心情等将行上的注释与主文档中的注释交换\input{pgf...
...\includegraphics{pgf...
我这样做了,但我仍在尝试确定最佳的文件结构以使工作流程无缝衔接。
答案3
我目前正在更新一本图解数学概念词典。它包含很多 3D 图形,我知道如果每次编译文档时都保留源代码并生成所有图形,编译时间将大幅增加。
所以我的解决方案是这样的:
我创建了一个单独的 tex 文件,名为“DrawTest.tex”,以便为要包含在字典中的图形和图表编写源代码。一旦我对图表的外观感到满意,我就会生成两个文件:一个带有图表的 PDF 和一个不带序言和行的源代码文件\end{document}
。两个文件必须具有相同的名称。并通过以下指令:
% % 指示是否需要添加 PDF %或相应的源代码 % \newcounter{最终} \setcounter{最终}{0} \newcommand{\insertfigure}[1]{ \ifthenelse{\thefinal=1}{\input{./source/#1}}{\pgfimage{./gallery/#1.pdf}} }
当我创建与字典草稿对应的 PDF 时,PDF 文件会作为图像插入。当我完成整个文档时(即完成字典时),最后一次生成它时,我只需要切换计数器的值final
,(我通常将其更改为零),然后图形就会从其 latex 源代码生成。
从前面的代码中,不言而喻,tex 文件被保存到名为“source”的文件夹中,而 PDF 则位于名为“gallery”的文件夹中。
文件“DrawTest.tex”的源代码如下:
\documentclass{文章} \usepackage{tikz} \usepackage{tikz-3dplot} \usetikzlibrary{数学} \usepackage[active,tightpage]{预览} \预览环境{tikzpicture} \setlength\预览边框{0.1pt} % \开始{文档} % \开始{中心} % \开始{tikzpicture} % 在此处包含图形的代码行。 \结束{tikzpicture} \结束{中心} % \结束{文档}
生成该图的 PDF 文件,并将 PDF 复制到“gallery”文件夹中。然后从该代码中删除前言(包括该\begin{document}
行)以及最后一行(包括\end{document}
说明),这就是“source”文件夹中所需的文件。只需记住将两个文件命名为完全相同的名称即可。
这是我采用的方法,以避免因编制图形而浪费时间。
如果有人提出更好的方法,我会很乐意复制该策略。