下列两种结构有何区别?

下列两种结构有何区别?

First

\def\cs#1#2{00\fi\def\csa{#1}\def\csb{#2}
\ifx\csa\csb}
\if\cs{...}{...}

Second

\def\cs#1#2{\fi\def\csa{#1}\def\csb{#2}
\ifx\csa\csb}
\if\cs{...}{...}

我的意思是00在这个结构中扮演什么角色?

这是我的示例:

\documentclass[12pt]{book}
\usepackage{xcolor}
\begin{document}
\def\a{\fcolorbox{red}{green!20}{true}}
\def\b{\fcolorbox{green}{red!20}{false}}
\def\MadadString#1#2{00\fi\def\sh{#1}\def\sha{#2}
\ifx\sh\sha}
\if\MadadString{Shajarian}{Shajarian}
\a\else\b\fi\qquad
\if\MadadString{tt}{\makeindex}
\a\else\b\fi\qquad
\def\b{\fcolorbox{green}{red!20}{false}}
\def\MadadString#1#2{\fi\def\sh{#1}\def\sha{#2}
\ifx\sh\sha}
\if\MadadString{Shajarian}{Shajarian}
\a\else\b\fi\qquad
\if\MadadString{tt}{\makeindex}
\a\else\b\fi
\end{document}

谢谢。我的输出是:
在此处输入图片描述

答案1

没什么区别。当\if不跳过时,在第一种情况下,你会得到

\if00\fi\def\csa{...}\def\csb{...}\ifx\csa\csb

在第二种情况下,你会得到

\if\fi\def\csa{...}\def\csb{...}\ifx\csa\csb

并且\if\fi内部被 替换\if\relax\relax\fi。让 TeX 添加这些标记是一种不太好的编程风格,因此00应该使用第一种方法(使用 )。

请注意,00可以是任意一对不可扩展的标记,无论相等或不相等。

相关内容