如何正确理解LaTeX3中局部变量的作用域?

如何正确理解LaTeX3中局部变量的作用域?

常见的编程语言(C)。

// foo is global scope
int foo = 0;

int main() {
    // bar is local scope within main
    int bar = 1;
}

让我们考虑一下LaTeX3

\documentclass[]{article}

\ExplSyntaxOn
\cs_set:Nn \create_list:n
{
    \tl_set:Nn \l_my_tl {(#1)}
}

\NewDocumentCommand\uselist{m}
{
    \create_list:n {#1}
     \tl_use:N \l_my_tl
}
\ExplSyntaxOff

\begin{document}

\uselist{2}

\end{document}

LaTeX3预计的范围\l_my_tl是的主体\create_list:n。但从宏\l_my_tl中也可以看到\uselist{m}。这是为什么?我在这里误解了什么?

答案1

TeX 中的范围(因此在 中expl3)不是由宏定义的:它们在“使用”时仅由其定义替换。因此,使用显式组提供范围:

  • \group_begin:/ \group_end:( expl3) - \begingroup/ \endgroup(经典 TeX 名称)
  • {...}或者\bgroup/\egroup

基于括号的版本可能会影响数学模式间距,并且expl3我们总是使用第一种类型的分组。


有一些“隐藏”范围,例如表格单元格,但对于大部分编程来说,这些不是我们所使用的。

相关内容