![带有 def 和条件的奇怪问题](https://linux22.com/image/475160/%E5%B8%A6%E6%9C%89%20def%20%E5%92%8C%E6%9D%A1%E4%BB%B6%E7%9A%84%E5%A5%87%E6%80%AA%E9%97%AE%E9%A2%98.png)
梅威瑟:
\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
直到得到两个不可扩展的标记e
,n
在这种情况下并比较它们,因此会给出 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}