为什么额外的字符没有显示出来?

为什么额外的字符没有显示出来?

在阅读各种来源的代码时,我经常遇到\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,其扩展为空。

相关内容