允许在 expl3 中使用下划线

允许在 expl3 中使用下划线

有人向我争论说,将连字符改为-样式文件中的普通字符是危险的,因为这可能会破坏很多代码,负数、上划线重音符号、表格标记……都可能破坏。

下划线是否\ExplSyntaxOff也会导致类似的问题?

我开始认为最初不允许_名称中使用下划线实际上是一个设计错误。

答案1

TeX 在对字符进行标记时会设置其类别代码。这意味着,如果我们的代码使用了 a-zA-Z 之外的“字母”,我们只需要担心发生了什么其中 catcode 已设置.因此例如在expl3

\cs_new:Npn \foo #1 { \__mypkg_internal_foo:n {#1} }

定义\foo,将使用\__mypkg_internal_foo:n 即使我们改变了 catcode_

_在 TeX 的正常使用中,以“字母”开头的唯一问题是它用于下标。因此,如果我们想在expl3代码中生成下标,我们需要“生成”正确的字符标记:\char_generate:nn { `\_ } { 8 }

我们可以对其他字符执行相同的操作:最明显的字符是@,由普通 TeX 和 LaTeX2e 使用。使用-更“有趣”,因为在诸如 这样的表达式中\count10=-5\relax,TeX 需要的-是“其他”。这是一个真正的问题,也是expl3我们尚未找到一种方法来“设置”所有潜在活动字符的 catcode 的原因之一。

答案2

不是的。LaTeX 语法中下划线的主要两个用途是:

  1. 数学下标,例如\alpha_i
  2. 文件地址和 URL,例如my_file.tex

由于expl3主要用于实际编程,数学内容很少,在少数情况下,你需要写类似α,您可以输入\alpha\sb{i}而不是\alpha_i。因此,第一次使用下划线实际上不会在 中引起问题expl3。据我所知,第二次使用下划线不受 中 catcode 更改的影响expl3,因此这实际上也不会引起问题。

相关内容