如何检索文档中稍后设置的值?

如何检索文档中稍后设置的值?

根据为变量赋值并检索以供日后使用的推荐方法是什么?在 ConTeXt 中,可以使用\setvalue{name}{value}来设置值,\getvalue{name}然后使用 来稍后检索该值。这似乎仅在需要\setvalue之前使用时才有效\getvalue。当值在文档中设置得更晚时,我如何在文档的早期检索该值?

答案1

Marco 的说法是:使用 ConTeXt 的多通道数据机制。方法如下。

% Define a dataset that will store our key-value tables
\definedataset[mydataset]

\starttext

\framed[
    % Here we use \datasetvariable to retrieve the values of myheight and mywidth. 
    % Notice that we only define those values further on in the document.
    % Notice also that we don't worry about the first pass: through some black magic,
    % we don't get 'variable undefined' problems.
    % Ah, the wonders of automatic multi-pass compiling.
    height=\datasetvariable{mydataset}{mytable}{myheight},
    width=\datasetvariable{mydataset}{mytable}{mywidth}
]{
    This is my text in a framed box
}

% Observe how we define myheight and mywidth here at the end, 
% *after* having already invoked their values.
\setdataset[mydataset][mytable][myheight=3cm, mywidth=3cm]

\stoptext

通常myheight,这mywidth取决于文档中其他对象的高度或宽度,但为了这个例子,我懒得摆弄这些框。

答案2

OP 要求提供 ConTeXt 解决方案,该解决方案由 Esteis 提供(仅起作用语境)。 为了 ”过度杀伤“这里是一个非 ConTeXt 解决方案(仅起作用没有语境):

在该文件的序言中:

\setvalue{name}{1}

或者一些其他“无害”的值,只是为了在第一次编译运行中设置该值。

在文档中

\getvalue{name}

文档后面部分提到:

\makeatletter%
\immediate\write\@mainaux{\string\setvalue{name}{value}}%
\makeatother%

它将写入\setvalue{name}{value}\jobname.aux\string是必需的,因为\setvalue命令应被写入而不是执行,例如\string\thepage写入\thepage,而\thepage将写入页码,例如49。)下次编译文档时,文件.aux(这次包含)在文档开头\setvalue{name}{value}之后(实际上紧接着 的内容之前)进行处理,并执行(在 之前)。文件也在的内容和之间进行处理,但这对此处的情况没有影响。\setvalue{name}{1}\AtBeginDocument{...}\setvalue{name}{value}\getvalue{name}.aux\AtEndDocument{...}\end{document}

相关内容