何时可以使用隐式括号代替显式括号?

何时可以使用隐式括号代替显式括号?

对于上下文,隐式字符是已\let添加到字符的控制序列。例如,纯 TeX 和 LaTeX 都使用\let\bgroup{ \let\egroup}\bgroup\egroup放入隐式括号中。

在某些地方,TeX 接受这两种方式,而在其他地方则不接受。例如,隐式括号不能用于收集未分隔的宏参数的标记,也不能用于分隔宏赋值的替换文本。

可以使用隐式括号

  • 组成团体:\bgroup...\egroup
  • 构造盒子:\hbox\vbox,和\vtop
  • \insert用或创建垂直材料\vadjust
  • 用于对准材料,包括\halign\valign\noalign;以及
  • 创建一个新的数学原子。

隐式左边可以使用括号(必须与类别代码为 2 的文字字符匹配,例如}2

  • 分配给标记变量;
  • \hyphenation\patterns
  • \uppercase用和来改变大小写\lowercase
  • \message使用或编写消息\errmessage
  • \write使用;写入文件
  • 构建一个\special
  • 为了\mark;
  • 对于\discretionary;和
  • 为四通\mathchoice

我尝试过彻底解决,但 TeX 非常复杂。还有什么地方可以使用隐式括号代替显式括号吗?

答案1

在 TeX82 中,

需要明确的左括号:开始宏定义的主体:,,,,,\def以及当标记列表应塞入单个标记时。\edef\xdef\gdef

当标记列表必须结束时,需要明确的右括号,包括标记列表应塞入单个标记的情况。

需要标记列表参数的原语:

  • \def,,,,\edef\xdef\gdef
  • \mark
  • \message\errmessage
  • \uppercase\lowercase
  • \write
  • \special
  • \patterns,但仅限于排版已经开始后 initex 中的 extra 这种特殊错误情况\patterns( 的其他用法都可以使用隐式右括号)。

需要标记列表参数的作业:

  • \toks,,,,,,,,,,\output\everypareverymath\everydisplay\everyhbox\everyvbox\everyjob\everycr\errhelp

据我所知,这些都是 TeX82 中的情况。新的扩展排版引擎将具有更长的显式右括号原始列表,但将应用相同的关于关闭标记列表的基本规则。

相关内容