将 \setcounter 命令写入文件

将 \setcounter 命令写入文件

newfile我尝试通过类似下面的方式将 setcounter 命令写入文件(使用包)

\addtostream{mystream}{\protect\setcounter{mycounter}{\myvariable}}

但是,由于整个变量都受到保护,\myvariable没有展开,而且它的值在文档中稍后会发生变化,因此我的计数器中最终会出现错误的值。那么,我如何才能在此处“取消保护”变量呢?

---编辑---这是最小的例子:

\documentclass{article}

\usepackage{newfile}

\begin{document}
\newoutputstream{stream}
\openoutputfile{stream.file}{stream}

\newcounter{mycounter}
\setcounter{mycounter}{6}

\addtostream{stream}{%
    \protect\setcounter{othercounter}{mycounter}%
}
\closeoutputstream{stream}

\end{document}

它输出一个名为的文件,stream.file内容如下

\setcounter{othercounter}{mycounter}

但我想要

\setcounter{othercounter}{6}

答案1

如果othercountermycounter是 LaTeX 计数器,则不能

\setcounter{othercounter}{mycounter}

但一般来说,你应该说

\setcounter{othercounter}{\value{mycounter}}

但是,对于您的应用程序,您需要一种不同的方法,因为您需要的实际值mycounter,而不是引用执行分配时的值。因此

\addtostream{stream}{%
  \protect\setcounter{othercounter}{\arabic{mycounter}}%
}

就是您要查找的内容。写入操作将扩展\arabic{mycounter}为计数器值的当前十进制表示。

答案2

\protect仅保护下一个标记,而不保护下一个标记的参数。如果\myvariable未展开,则可能无法展开(例如由 定义\newcount\myvariable。然后\number帮助:

\addtostream{mystream}{%
  \protect\setcounter{mycounter}{\number\myvariable}%
 }%

相关内容