管理项目:单独的 .tex 文件、外部化的 TikZ、文件夹

管理项目:单独的 .tex 文件、外部化的 TikZ、文件夹

我目前正在清理我的项目,以便在未来扩展时更好地管理它。我想知道是否有办法以更智能、更高效的方式管理以下内容。

目前,这是我的 LaTeX 结构:

main.tex
  \include{chapter_1.tex}
    \input{fig_1.tikz}
    \input{fig_2.tikz}
  \include{chapter_2.tex}
    \input{fig_1.tikz}
  \include{chapter_3.tikz}

main.tex我将以下章节纳入其中。\include{chapter_1.tex}每个章节中,可能会有由 TikZ 生成的图形,我将其纳入其中,例如\input{fig_1.tikz}

现在,因为我想保持我的项目目录整洁,所以我想要有一个文件夹结构,其中有一个用于图像的文件夹,其中的图像根据它们所属的章节分开,如下所示:

main_folder/
  |-- main.tex
  |-- chapter_1.tex
  |-- chapter_2.tex
  |-- chapter_3.tex
  |-- figures/
    |-- chapter_1/
      |-- generated_fig_0.pdf
      |-- generated_fig_1.pdf
      |-- tikz/
        |-- fig_1.tikz
        |-- fig_2.tikz

等等。然后每个 tikz 将被输入如下\input{figures/chapter_1/tikz/fig_1.tikz

现在,当我从 TikZ 外部化我的图形生成以加快我的文档编译速度时,问题就出现了。

在我的文档标题中,我必须\tikzexternalize[prefix=figures/]将所有 TikZ 图像排序到figures/文件夹中。在每个包含的章节中,在文件开头的章节正文后面有{ \tikzset{external/figure name/.add={chapter_1/}{}}一个右括号,}用于添加前缀以将所有生成的内容放入其中figures/chapter_#/,并将其限制在章节正文的范围内。

但是,如果我希望每个生成的图像都有一个有意义的名称,我需要\tikzsetnextfilename{image_name}在每个输入的 TikZ 之前添加,这样我总是会有这样的块:

\tikszetnextfilename{foo}
\input{figures/chapter/tikz/foo.tikz}

是否有一种简单的方法,如果我有一个foo.tex想要输入的章节bar.tikz,某些程序\input{bar.tikz}会自动查找bar.tikzfigures/foo/tikz/创建生成的外部化 PDF figures/foo/bar.pdf

LatexMk 的使用会对此产生任何影响吗(我想使用它,但我不确定它在上述中能发挥什么作用)?

编辑:事实证明,这\tikzsetnextfilename实际上会覆盖除用 设置的初始前缀之外的所有命名定义\tikzexternalprefix。因此,我无法直接为我的图形文件名提供名称。

因此另一个问题是:有没有办法 a) 将生成的图像保存到子文件夹中figures/chapter_name/,以及 b) 为图像提供单独的名称?

答案1

您可以尝试以下方法:

main.tex

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\def\useexternalfile#1{\tikzsetnextfilename{#1-output}\input{\csname tikzexternal@filenameprefix\endcsname#1.tikz}}
\begin{document}

\tikzsetexternalprefix{./chapter1/tikz/}
\include{chapter1}

\tikzsetexternalprefix{./chapter2/tikz/}
\include{chapter2}

\end{document}

编辑:更清晰、更 LaTeX 风格的定义\useexternalfile

\makeatletter
\newcommand{\useexternalfile}[1]{%
    \tikzsetnextfilename{#1-output}%
    \input{\tikzexternal@filenameprefix#1.tikz}}
\makeatother

记录一下,\tikzexternal@filenameprefix内部宏是\tikzsetexternalprefix保存“当前前缀”的地方。此外,您可以替换#1-output您最喜欢的表达式(也许generated-figure-#1?)

结束编辑

chapter1.tex

... 
\begin{figure}
\useexternalfile{myfigure}
\caption{...}
\end{figure}
...

chapter1/tikz/myfigure.tikz

\begin{tikzpicture}
\draw (0,0) rectangle (4,4);
\end{tikzpicture}

(我在我的 OSX 系统中测试过,它有效;我使用了一个稍微简单一点的系统)。这与您的问题不同,因为它myfigure-output.pdf位于文件夹中chapter1/tikz/,而不是chapter1/您想要的文件夹中。也许您(或其他人)可以对其进行更多调整。

答案2

我编写了一个 VB.NET 应用程序,可以处理多个 Tikz 文件并根据给定的序言(Tikz 图形的选项)生成 PDF。

可以从我的网页下载:

http://web.itu.edu.tr/bariserkus/docs.html

我还附加了一个示例项目。

VB.NET 项目是开源的,可以从以下位置下载

https://github.com/bariserkus/figs1

我写得很快,所以可能存在错误。

需要.NET Framework 4.7,TeX 系统安装并正常运行。

在您掌握 Tikz 的外部化库之前可能会有帮助。

在此处输入图片描述

相关内容