我尝试仅设置颜色第一个字母,(aaa
或bbb
)与测试有关\ifx
。
我原来有更复杂的任务,但我想了解它在这个简单的例子上是如何工作的。
我的 MWE:
\documentclass{article}
\usepackage[usenames]{color}
\begin{document}
\def\AAA{aaa}
\def\BBB{bbb}
\let\TST\AAA
\def\SETCOL #1{\textcolor{red}{#1}}
\expandafter\SETCOL\ifx\TST\AAA\AAA\else\BBB\fi
\end{document}
我用一个\expandafter
红色的整个aaa
答案1
您的代码在执行 操作后\expandafter
离开
\SETCOL\AAA\else\BBB\fi
并且的参数\SETCOL
是\AAA
,而不是首字母。
让我们尝试一下
\expandafter\expandafter\expandafter\SETCOL\expandafter\ifx\expandafter\TST\expandafter\AAA\AAA\else\BBB\fi
在第一幕之后\expandafter
,你将获得
\expandafter\SETCOL\ifx\TST\AAA aaa\else\BBB\fi
现在你得到了
\SETCOL aaa\else\BBB\fi
\else
在任何一种情况下,从到 的标记\fi
都会消失。但是,如果测试返回 false,则会出现同样的问题:当\TST
不\ifx
等于时\AAA
,\expandafter
噩梦就会消失
\SETCOL\BBB\fi
\BBB
如果您希望\SETCOL
看到扩展的第一个标记,则还需要到达\BBB
。最好使用不同的策略。
\documentclass{article}
\usepackage[usenames]{color}
\begin{document}
\def\AAA{aaa}
\def\BBB{bbb}
\let\TST\AAA
\def\SETCOL #1{\expandafter\SETCOLAUX#1}
\def\SETCOLAUX #1{\textcolor{red}{#1}}
\expandafter\SETCOL\ifx\TST\AAA\AAA\else\BBB\fi
\let\TST\BBB
\expandafter\SETCOL\ifx\TST\AAA\AAA\else\BBB\fi
\end{document}