带有 def 和条件的奇怪问题

带有 def 和条件的奇怪问题

梅威瑟:

\documentclass{article}
\def\ENLANG{english}
\def\FRLANG{french}
\def\LANG{\ENLANG}
\begin{document}
\if\LANG\ENLANG \ENLANG \else \FRLANG \fi

\ifx\LANG\ENLANG \ENLANG \else \FRLANG \fi

\LANG\ \ENLANG\ \FRLANG
\end{document}

对我来说真的很奇怪。它为 if 和 ifx 输出法语。但我希望它是英语和英语。

如果我希望 if 和 ifx 中至少有一个为 true 并输出英语,我该怎么做?

答案1

你的期望是错误的,抱歉。

当 TeX 看到\if\LANG它扩展\LANG并得到时\ENLANG,它是可扩展的,所以最后我们得到\if en它并返回 false。

另一方面,\ifx当第一级扩展相同时,如果以下两个标记都是宏,则返回 true;但它们并不相同,因为\LANG扩展为\ENLANG并且\ENLANG扩展为english

你可以比较\ifx,只要你这样做

\let\LANG=\ENLANG

而不是\def\LANG{\ENLANG}

答案2

\if\LANG

扩展\LANG直到得到两个不可扩展的标记en在这种情况下并比较它们,因此会给出 false 并跳到\else

\ifx\LANG\ENLANG

为假,因为它们有不同的定义,\LANG被定义为有替换\ENLANG\ENLANG被定义为有替换english


您可以安排\LANG具有合适的定义,\ifx例如

\documentclass{article}
\def\ENLANG{english}
\def\FRLANG{french}
\edef\LANG{\ENLANG}
\begin{document}


\ifx\LANG\ENLANG THIS: \ENLANG \else NOT THIS: \FRLANG \fi


\end{document}

相关内容