如果事先删除了(过时的?)AUX 文件,则不会渲染 SVG

如果事先删除了(过时的?)AUX 文件,则不会渲染 SVG

在我的文档中,我在页眉 (fancyhdr) 中使用了一个 SVG 文件,并且在标题页上独立使用了相同的 SVG。大致如下:

...
\fancyhead[C]{
    \includesvg[]{images/my-svg-file}
}

\begin{document}
  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=west]{some text before};
  \end{tikzpicture}
  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=north]{\includesvg[]{images/my-svg-file}}; % <-- will not be rendered
  \end{tikzpicture}
  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=east]{some text after};
  \end{tikzpicture}

  \newpage
  While the header is deactivated on the first page, this page has the correct header...
  \newpage
  ... so does this page.
\end{document}

我希望能够使用批处理脚本编译该文档,这样我就可以复制/重命名输出 PDF,删除编译期间生成的所有文件(将它们称为 AUX 文件),也许还可以做一些其他的事情。

这是我的批处理文件,但我认为它不相关(因为如果我使用 MikTeX 编辑器进行编译也会发生同样的情况):

lualatex --shell-escape --enable-write18 my_document.tex
DEL *.log
DEL *.out
DEL *.aux
DEL *.table
DEL *.lua
DEL *.dat

现在,问题是,第一次出现的 SVG 图像(参见 tex 代码片段中的注释)没有被渲染,文本“之前的一些文本”和“之后的一些文本”也没有被渲染。

仅当文档在 .tex 文件目录中不存在 AUX 文件的情况下编译时。我想了解为什么会发生这种情况... 编译不是每次都提供完全相同的结果吗? 先前编译中存在的文件如何影响后续编译?!

在我看来,这似乎是一个严重的缺陷,因为文档在两次编译之间可能会发生巨大变化。在我看来,编译完成后,AUX 文件应该被视为过时的,但我对 LaTeX 了解甚少。

我知道我有一些选择:

  • 调用luatex command twice(测试过并且可以工作,但是很丑)
  • 将 PDF 从编译目录中复制出来,但这不是首选

相反,我想了解导致这个问题的原因。

答案1

正如@Ulrike 所说,您不应该删除任何生成的辅助文件,以便在多次运行后获取最终处理后的文档。事实上,包svg使用辅助文件本身来确定使用的 Inkscape 版本。

尽管如此,如果要多次使用同一个 SVG 文件,我强烈建议您在添加后将其存储到框中,并将其用于标题。否则,SVG 文件将针对每个页面进行处理,没有任何好处,但会影响性能,尤其是在用于大型文档的标题时。

所以一个非常简单的方法就是

\documentclass{article}
\usepackage{iftex}
\iftutex
  \usepackage{fontspec}
\else
  \usepackage[T1]{fontenc}
\fi
\usepackage{svg}
\usepackage{tikz}
\usepackage[headings]{fancyhdr}
\pagestyle{headings}

\begin{document}

\newbox\fancyheadbox
\savebox\fancyheadbox{\rule{100pt}{5pt}}
%\savebox\fancyheadbox{\includesvg[]{images/my-svg-file}}
\fancyhead[C]{\usebox\fancyheadbox}

  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=west]{some text before};
  \end{tikzpicture}
  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=north]{\usebox\fancyheadbox}; 
  \end{tikzpicture}
  \begin{tikzpicture}[remember picture,overlay,shift={(current page.north)}]
    \node[anchor=east]{some text after};
  \end{tikzpicture}

  \newpage
  While the header is deactivated on the first page, this page has the correct 
  header...
  \newpage
  ... so does this page.
\end{document}

相关内容