不久前,我问过如何写整数变量放入辅助文件中并读取它:将 LaTeX3 变量写入辅助文件并恢复它
现在,我面临一个几乎相同的问题,我必须向辅助文件写入/读取一个变量,但这次它是类型浮点.看一下最小的例子:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\fp_new:N \g_maxmaier_foo_fp
\fp_new:N \l_maxmaier_bar_fp
\NewDocumentCommand{\setbar}{m}
{
\fp_set:Nn \l_maxmaier_bar_fp { #1 }
}
\NewDocumentCommand{\showfoo}{}
{
\fp_to_tl:N \g_maxmaier_foo_fp
}
\AtEndDocument
{
\iow_now:cx { @auxout }
{
\token_to_str:N \ExplSyntaxOn
^^J
\fp_gset:Nn \g_maxmaier_foo_fp { \fp_to_scientific:N \l_maxmaier_bar_fp }
^^J
\token_to_str:N \ExplSyntaxOff
}
}
\ExplSyntaxOff
\begin{document}
The value of \texttt{foo} is \showfoo
\setbar{42}
\end{document}
执行 LaTeX 时出现错误。如果我们查看辅助文件,我们会发现:
\relax
\ExplSyntaxOn
\fp_gset:Nn \s__fp \__fp_chk:w 00\s__fp_exact ;{4.2e1}
\ExplSyntaxOff
浮点数是正确的,但变量名搞错了。我本来希望辅助文件具有以下格式:
\relax
\ExplSyntaxOn
\fp_gset:Nn \g_maxmaier_foo_fp {4.2e1}
\ExplSyntaxOff
为什么我不能像以前使用整数时那样在此处使用变量名?是否有任何建议的解决方法?
答案1
出于实现原因,表示浮点变量的宏不\protected
反对x
扩展。只需告诉 LaTeX 不要扩展它即可。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\fp_new:N \g_maxmaier_foo_fp
\fp_new:N \l_maxmaier_bar_fp
\NewDocumentCommand{\setbar}{m}
{
\fp_set:Nn \l_maxmaier_bar_fp { #1 }
}
\NewDocumentCommand{\showfoo}{}
{
\fp_to_tl:N \g_maxmaier_foo_fp
}
\AtEndDocument
{
\iow_now:cx { @auxout }
{
\token_to_str:N \ExplSyntaxOn
^^J
\fp_gset:Nn \exp_not:N \g_maxmaier_foo_fp { \fp_to_scientific:N \l_maxmaier_bar_fp }
^^J
\token_to_str:N \ExplSyntaxOff
}
}
\ExplSyntaxOff
\begin{document}
The value of \texttt{foo} is \showfoo
\setbar{42}
\end{document}
该文件的内容aux
将是
\relax
\ExplSyntaxOn
\fp_gset:Nn \g_maxmaier_foo_fp {4.2e1}
\ExplSyntaxOff