辅助文件被忽略

辅助文件被忽略

我想制作一个每次构建时看起来都不同的文档。我以为使用该aux文件可以很容易地做到这一点;但是,我似乎误解了一些非常基本的东西。对于一个小型概念验证,这里有一个文档,我认为它第二次运行时会产生与第一次不同的结果:

\documentclass{article}
\def\a{never ran}
\begin{document}
\a
\makeatletter\protected@write\@auxout{}{\string\def\string\a{ran}}\makeatother
\end{document}

运行之后pdflatex test,我可以看到test.pdf确实包含“从未运行”,并且test.aux包含:

\relax 
\def\a{ran}

但是,pdflatex test第二次运行不会改变任何文件。为什么不会?我应该进行哪些更改才能使文档ran在第二次运行时包含内容?

答案1

您需要\gdef,因为.aux文件是在组内读取的。至少,我认为这是原因。当然,\gdef有效。

我更改了命令的名称,以避免覆盖现有命令而导致的复杂情况。一般来说,非常短的宏名称(尤其是单个字母)是不安全和不明智的。至少,您应该确保它们不存在,而不是简单地重新定义它们。

\documentclass{article}
\def\abacus{never ran}
\begin{document}
\abacus
\makeatletter
\protected@write\@auxout{}{\string\gdef\string\abacus{ran}}
\makeatother
\end{document}

答案2

使其成为一个全局定义:

\documentclass{article}
\def\hasruncheck{never ran}
\begin{document}
    \hasruncheck
    \makeatletter\protected@write\@auxout{}{\string\gdef\string\hasruncheck{ran}}\makeatother
\end{document}

相关内容