如何将布尔值保存到辅助文件中?(例如使用 etoolbox 的 toogles)

如何将布尔值保存到辅助文件中?(例如使用 etoolbox 的 toogles)

我想使用 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}

真的

相关内容