我遇到过一种情况,我需要访问在文本中使用后定义的变量。下面是我想要实现的一个示例,本质上变量的定义发生在 latex 文档的后面,这显然会导致编译器错误。
\begin{document}
\Varirable
\renewcommand{\Varirable}{Updated}
\end{document}
有没有什么方法可以让我以某种方式预先声明该变量,并在编译时交叉引用它,以便可以用正确的值(在最后定义)进行更新?
答案1
您需要将其写入.aux
文件中。
\documentclass{article}
\ExplSyntaxOn
% at point of definition, store in the aux file
\NewDocumentCommand{\definevariable}{mm}{%
% #1 = symbolic name, #2 = value
\iow_now:cn { @auxout } {\setvariable{#1}{#2}}
}
% the container for the variables
\prop_new:N \g_tracey_variables_prop
% \setvariable populates the property list
\NewDocumentCommand{\setvariable}{mm}
{
\prop_gput:Nnn \g_tracey_variables_prop { #1 } { #2 }
}
% \usevariable uses (or prints ??)
\NewExpandableDocumentCommand{\usevariable}{m}
{
\tl_if_empty:eTF { \prop_item:Nn \g_tracey_variables_prop { #1 } }
{ ?? }
{ \prop_item:Nn \g_tracey_variables_prop { #1 } }
}
\ExplSyntaxOff
\begin{document}
\usevariable{mytext}
Some text
\definevariable{mytext}{Ööç}
\end{document}
第一次运行:
第二次运行: