如何同时声明和初始化 expl3 整数变量

如何同时声明和初始化 expl3 整数变量

有没有办法同时声明和初始化expl3整型变量?

考虑以下 LaTeX 代码,它同时声明和初始化一个浮点变量。

\documentclass{article}
\begin{document}
\ExplSyntaxOn
\fp_gset:Nn\myvar{1}
\fp_use:N\myvar
\ExplSyntaxOff
\end{document}

当使用以下代码进行编译时Overleaf 的2022LuaLaTeX引擎,编译成功完成并打印出1

但是,如果现在将出现的两个字符串“fp”替换为“int”,并重新编译代码,则会出现以下错误消息:

<argument> \myvar

l.4 \int_gset:Nn\myvar{1}

The control sequence at the end of the top line
of your error message was never \def'ed.

答案1

抱歉,你错了。该指令\fp_gset:Nn实际上并没有声明该变量。

确实,如果你运行

\documentclass{article}
\usepackage[check-declarations]{expl3}
\begin{document}
\ExplSyntaxOn
\fp_gset:Nn\myvar{1}
\fp_use:N\myvar
\ExplSyntaxOff
\end{document}

这是在代码测试期间推荐的,你会看到编译停止

! LaTeX Error: The variable \myvar has not been declared on line 5.

For immediate help type H <return>.
 ...

l.5 \fp_gset:Nn\myvar{1}

从实现上讲,\fp_gset:Nn当第一个参数尚未声明时,不会报错。 或 变量也是如此tlclist但这seq并不意味着它们不需要提前声明:它们应该无论如何。

对于整数变量来说,情况就不同了,因为它们需要分配一个内部寄存器,因此不需要提前声明它们总是产生错误。

为什么会有差异?效率:对每个<var>_(g)set:Nn函数进行重载并检查所声明的变量会使处理速度变得太慢。

相关内容