我的问题是这问题。
我想将变量写入辅助文件并在那里声明它们,因为变量的数量会有所不同,并且它们的 csname 会在构建过程中自动在文档主体中定义。我有一个控制序列,它遍历生成的变量并将声明和存储命令(使用 c 类型参数而不是 N)写入辅助文件。一切都运行良好,除了我收到类似这样的错误:
控制序列 \g_test_int 已定义。
aux 文件本身看起来正确(来自 MWE):
\放松
\ExplSyntaxOn
\int_new:N \g_test_int
\ExplSyntaxOff
梅威瑟:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\AtEndDocument{
\iow_now:cx{@auxout}{
\token_to_str:N \ExplSyntaxOn
^^J
\int_new:N\g_test_int
^^J
\token_to_str:N \ExplSyntaxOff
}
}
\ExplSyntaxOff
\begin{document}
Hello
\end{document}
答案1
您的代码有两个问题:
TeX 尝试解释
\g_test_int
,因为你正在做\iow_now:cx
当 TeX 重新读取该
.aux
文件时,\int_new:N
将引发错误。
解决方案:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\AtEndDocument{
\iow_now:cn{@auxout}{
\ExplSyntaxOn
^^J
\int_zero_new:N \g_test_int
^^J
\ExplSyntaxOff
}
}
\ExplSyntaxOff
\begin{document}
Hello
\end{document}
在重读时,\g_test_int
将被归零,但这并不重要,因为所有排版都已完成。
另一方面,不清楚为什么要在.aux
文件中声明一个变量:如果该文件尚不存在,则文档主体中的任何宏都不能使用该变量。