在阅读各种来源的代码时,我经常遇到\ifx\\<sth>\\
检查是否<sth>
为空的构造。例如,在以下代码中这个答案我懂了:
\newcommand*{\mint@}[4]{%
% #1: \limits, \nolimits, \displaylimits
% #2: overlay symbol: -, =, ...
% #3: subscript
% #4: superscript
\mathop{}%
\mkern-\thinmuskip
\mathchoice{%
\mint@@{#1}{#2}{#3}{#4}%
\displaystyle\textstyle\scriptstyle
}{%
\mint@@{#1}{#2}{#3}{#4}%
\textstyle\scriptstyle\scriptstyle
}{%
\mint@@{#1}{#2}{#3}{#4}%
\scriptstyle\scriptscriptstyle\scriptscriptstyle
}{%
\mint@@{#1}{#2}{#3}{#4}%
\scriptscriptstyle\scriptscriptstyle\scriptscriptstyle
}%
\mkern-\thinmuskip
\int#1%
\ifx\\#3\\\else _{#3}\fi
\ifx\\#4\\\else^{#4}\fi
}
我已经多次使用该代码,并且带有限制。从来没有出错过。好吧......几乎。阅读 中的这段代码,LaTeX 会抱怨,这解释了和ExplSyntax
之间的空格。但如果我有限制,比如说我有,那么应该考虑 。因此它与进行比较,得出结论它们不一样,然后呢?其余的限制会怎样?它们应该在之后进行处理并出现在排版的 pdf 中,至少这是我的期望。但是他们没有。那么它们会变成什么样子?为什么它们不出现?\else
_{#3}
\mint-_{B(0,1)}
\ifx\\B(0,1)\\
\\
B
答案1
当 TeX 被赋予输入时
\ifx\\\\A\else B\fi
它进行比较\\
并\\
确定它们是相等的;因此它删除了条件和测试标记,留下
A\else B\fi
这会执行A
(通常是一些代码),然后扩展\else
;的扩展\else
包括上升到匹配的\fi
,删除在其间找到的所有内容(但跟踪条件)。
使用如下输入
\ifx\\XYZ\\A\else B\fi
TeX\\
与进行比较X
,确定它们不同,因此忽略匹配之前的所有内容\else
(跟踪条件),留下
B\fi
这将执行B
(通常是一些代码)并扩展\fi
,其扩展为空。