![如何将布尔值保存到辅助文件中?(例如使用 etoolbox 的 toogles)](https://linux22.com/image/390141/%E5%A6%82%E4%BD%95%E5%B0%86%E5%B8%83%E5%B0%94%E5%80%BC%E4%BF%9D%E5%AD%98%E5%88%B0%E8%BE%85%E5%8A%A9%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%9F%EF%BC%88%E4%BE%8B%E5%A6%82%E4%BD%BF%E7%94%A8%20etoolbox%20%E7%9A%84%20toogles%EF%BC%89.png)
我想使用 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}