![将 \setcounter 命令写入文件](https://linux22.com/image/264439/%E5%B0%86%20%5Csetcounter%20%E5%91%BD%E4%BB%A4%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6.png)
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
如果othercounter
和mycounter
是 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}%
}%