对于上下文,隐式字符是已\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
\everypar
everymath
\everydisplay
\everyhbox
\everyvbox
\everyjob
\everycr
\errhelp
据我所知,这些都是 TeX82 中的情况。新的扩展排版引擎将具有更长的显式右括号原始列表,但将应用相同的关于关闭标记列表的基本规则。