我想使用 etoolbox 的切换功能来实现以下功能:在序言中创建一个切换功能,在排版文档时其值可能会发生变化,最后我想将该值写入辅助文件以便下次访问它。但是,在辅助文件中设置切换功能似乎不起作用,如以下 MWE 所示:
\documentclass{minimal}
\usepackage{etoolbox}
\newtoggle{testtoggle}
\begin{document}
\makeatletter
\immediate\write\@auxout{\noexpand\toggletrue{testtoggle}}
\makeatother
\iftoggle{testtoggle}{true}{false}
\end{document}
运行此命令后,aux 文件包含
\relax
\toggletrue {testtoggle}
应该如此。然而,在创建的文档中,它显示的是“false”而不是“true”。如何修复这个问题?
\newif
当我使用语句而不是切换时也会出现同样的问题。
答案1
该.aux
文件(通常)是按组读取的,因此您想要传播到整个文档的所有更改都需要全局应用。在这种情况下
\immediate\write\@auxout{\noexpand\global\noexpand\toggletrue{testtoggle}}
应该足够让.aux
文件读取
\relax
\global \toggletrue {testtoggle}
如果不能轻易地附加\global
到命令(或切换到\global
类似的版本\gdef
而不是\def
),或者您需要更频繁地执行此操作,您可能需要考虑为该.aux
文件编写一个辅助函数。
\documentclass{article}
\usepackage{etoolbox}
\newtoggle{testtoggle}
\begin{document}
\makeatletter
\immediate\write\@auxout{\noexpand\global\noexpand\toggletrue{testtoggle}}
\makeatother
\iftoggle{testtoggle}{true}{false}
\end{document}