几天前,我看到了一个乳胶文件的示例,它\def
在后续运行中执行了条件,但我再也找不到那个了。
我还记得是通过查看\jobname.aux
do 来获取以前的构建数量。
就我目前的情况而言,我想不是使用包minted
但定义其命令以在前两次构建期间简单地使用 verbatim-environment,并minted
在第三次运行中使用其内置宏进行 syntaxhighlight。
我究竟如何才能获得之前的 latex 运行次数?
答案1
此.tex
代码使用一个名为的计数器NumberOfRuns
,并将其值写入.aux
文档末尾的文件(\AtEndDocument
)。在文档开头,.aux
读取文件后,计数器值已知,然后增加。
然后可以轻松地通过\ifnum
或\ifnumexpr
命令(例如来自etoolbox
包)对当前计数器值做出反应。
笔记:如果.aux
文件被删除,信息将会丢失。
\documentclass{scrartcl}
\newcounter{NumberOfRuns}
\makeatletter
\AtEndDocument{%
\immediate\write\@auxout{%
\string\setcounter{NumberOfRuns}{\number\value{NumberOfRuns}}
}
}%
\AtBeginDocument{%
\refstepcounter{NumberOfRuns}
}%
\makeatother
\begin{document}
This document was compiled \theNumberOfRuns~times so far!
\end{document}
改进版本,显示对某些值的查询
\documentclass{scrartcl}
\usepackage{etoolbox}
\newcounter{NumberOfRuns}
\makeatletter
\AtEndDocument{%
\immediate\write\@auxout{%
\string\setcounter{NumberOfRuns}{\number\value{NumberOfRuns}}
}
}%
\AtBeginDocument{%
\refstepcounter{NumberOfRuns}
}%
\makeatother
\newcommand{\prettyoutput}[1]{%
\ifnumequal{\number\value{#1}}{1}{once}{%
\ifnumequal{\number\value{#1}}{2}{twice}{%
\ifnumequal{\number\value{#1}}{3}{thrice}{%
\number\value{#1}~times%
}%
}%
}%
}%
\begin{document}
This document was compiled \prettyoutput{NumberOfRuns} so far!
\end{document}