有没有办法同时声明和初始化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
当第一个参数尚未声明时,不会报错。 或 变量也是如此tl
。clist
但这seq
并不意味着它们不需要提前声明:它们应该无论如何。
对于整数变量来说,情况就不同了,因为它们需要分配一个内部寄存器,因此不需要提前声明它们总是产生错误。
为什么会有差异?效率:对每个<var>_(g)set:Nn
函数进行重载并检查所声明的变量会使处理速度变得太慢。