我正在搜索我的问题(参见这里了解更多详情)并找到了一个主题commath 和 \ifinner。在线程中,有一个名为的宏\spx
,其定义和用法摘录如下。从{^{#1}}
定义中可以看出,它似乎是一个改进的^
。我理解\if\relax\detokenize{#1}
确定是否#1
为空,但我不明白这个 -clause 的其余部分如何\if
运作。此外,在一些线程中\if
可以找到类似的 -clause(例如撰写音乐音调,不计“&”符号的表格等等)。
这类 -clause 起什么作用并且和普通 -clause\if
有什么区别?\spx
^
% ----- definition of \spx and its usage -----
\newcommand{\spx}[1]{%
\if\relax\detokenize{#1}\relax
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{^{#1}}%
}
\newcommand\pd[3][]{\frac{\partial\spx{#1}#2}{\partial#3\spx{#1}}}
答案1
反过来回答这个问题,区别在于\spx{}
展开为零,而^{}
产生一个空的上标原子。这样的空上标场并不等同于没有上标,并且会影响同一基数上下标的位置。
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{^{#1}}%
{^{#1}
在真实情况下从输入流中删除,因为\expandafter
扩展了,\else
删除了所有内容,\fi
所以接下来的扩展是\@gobble{^#1}
其中没有任何内容。
类似地,在错误分支中,您需要\expandafter
删除\fi
,然后\@firstofone
删除外部括号,因此扩展\@firstofone{^{#1}}
即^{#1}