在回答这个问题时自动用方程+对齐组合替换环境对齐egreg 用途
\def\relaxtag#1#{\relaxrelaxtag}
\def\relaxrelaxtag#1{}
第二个的作用#
我不太清楚。它似乎既不是带有结构参数的定义的元素,也不是对齐标记。
答案1
该\tag
命令允许使用 * 形式,因此可以将其调用为\tag{x}
或\tag*{x}
。
由于目的是中和,\tag
我们不需要花哨的\@ifstar
定义。语法
\def\relaxtag#1#{...}
表示参数\relaxtag
被输入流中找到的第一个左括号分隔。因此,如果\relaxtag{...}
参数为空,则\relaxtag*{...}
第一个参数为*
。
这当然是通过\let\tag\relaxtag
宏来补充的。
概念证明:
\def\relaxtag#1#{\showtokens{Before the brace we have '#1'}\relaxrelaxtag}
\def\relaxrelaxtag#1{\showtokens{Between the braces we have '#1'}}
\relaxtag{x}
\relaxtag*{x}
运行此代码pdftex
(或pdflatex
同时运行)将在终端上产生以下输出
> Before the brace we have ''.
\relaxtag ...okens {Before the brace we have '#1'}
\relaxrelaxtag {
l.4 \relaxtag{
x}
?
> Between the braces we have 'x'.
\relaxrelaxtag ...Between the braces we have '#1'}
l.4 \relaxtag{x}
?
> Before the brace we have '*'.
\relaxtag ...okens {Before the brace we have '#1'}
\relaxrelaxtag {
l.6 \relaxtag*{
x}
?
> Between the braces we have 'x'.
\relaxrelaxtag ...Between the braces we have '#1'}
l.6 \relaxtag*{x}
?
引用 TeXbook 第 204 页,第二个双重危险的段落:
允许对这些规则进行特殊扩展:如果 ⟨参数文本⟩ 的最后一个字符是
#
,因此#
紧接着的是{
,则 TeX 将表现得好像{
已插入到参数文本和替换文本的右端。例如,如果您说 '\def\a#1#{\hbox to #1}
',则后续文本 '\a3pt{x}
' 将扩展为 '\hbox to 3pt{x}
',因为 的参数\a
由左括号分隔。