Latex3:在辅助文件中声明变量

Latex3:在辅助文件中声明变量

我的问题是问题。

我想将变量写入辅助文件并在那里声明它们,因为变量的数量会有所不同,并且它们的 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

您的代码有两个问题:

  1. TeX 尝试解释\g_test_int,因为你正在做\iow_now:cx

  2. 当 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文件中声明一个变量:如果该文件尚不存在,则文档主体中的任何宏都不能使用该变量。

相关内容