读取和写入 auxfile 命令

读取和写入 auxfile 命令

我对辅助文件有疑问。根据 Tex-Exchange 上的一些帖子,辅助文件是在文档开头读取的(是在\begin{document}还是\documentclass?我想建立一个测试文档。每次运行它都应该增加打印在纸上的数字。

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{graphicx}
\usepackage{environ}
\usepackage{etoolbox}

\begin{document}

%Don't overwrite \counti
\ifdefined\counti 
TRUE
\else
FALSE
\newcount\counti
\counti=0
\fi

%make counti raise by 1
\the\counti
\advance\counti by1

%write to aux-file
\makeatletter
\write\@auxout{\noexpand\newcount\counti}
\write\@auxout{\counti= \the\counti}
\makeatother

\end{document}

输出为

TRUE
0

这证明它从辅助文件中读取了新计数。但不幸的是,该值保持为 0。实际上,每次运行时它都应该增加一。

辅助文件说

\newcount \counti 
\counti = 1

每次跑步后。

答案1

当 LaTeX 读取.aux文件时,它会在本地组内读取。\newcount全局分配计数寄存器,但分配\counti=...与 LaTeX 的类似,是本地的\setlength,但与 LaTeX 的分配不同\setcounter。因此,可以通过全局分配来解决问题:

\write\@auxout{\global\counti= \the\counti\relax}

(我已添加\relax。然后 TeX 将不会再进行解析以查找数字。)

答案2

这里有一个更“乳胶”的方法,使用 Heiko 的引用计数包。这个想法是将计数器的值作为标签保存到辅助文件中,然后在每次使用编译文件时将其读回\setcounterref

下面的 MWE 输出采用以下形式:

在此处输入图片描述

计数器的值每次都会增加。

\documentclass{article}
\usepackage{refcount}\setrefcountdefault{0}
\usepackage{etoolbox}

\newcounter{TestCounter}

\AtEndDocument{% save counter value to aux file at end of document
  \addtocounter{TestCounter}{-1}%
  \refstepcounter{TestCounter}\label{Ref:TestCounter}% 
}
\AfterEndPreamble{% set counter using value saved in aux file
 \setcounterref{TestCounter}{Ref:TestCounter}%
}

\begin{document}

Counter is \arabic{TestCounter}

\addtocounter{TestCounter}{1}

\end{document}

我已经使用\AtEndDocument\AfterEndPreamble命令自动执行了此操作电子工具箱包。(这只是为了概念验证。有更好的方法可以写入辅助文件,避免减少然后增加计数器。)

相关内容