这里有些奇怪!(我的意思是我不明白)。我在(全局)变量 context 中输入一个内容,比如说“Something”。在下面代码的第 2 行中,正如人们所预料的那样,我们对 context 的内容和文字 Something 的打印输出相同。然而,在第 3 行,context 的内容和文字 Something 被识别为不同的!
\luaexec{context="Something"}
§§\luaexec{tex.print(context)}§§Something§§\\
\ifthenelse{\equal{\luaexec{tex.print(context)}}{Something}}{egal}{different}
catcode 是否存在问题,导致两者看起来相同但实际上不同?我应该选择 luadirect、directlua 等吗?
事实上,我尝试使用 \luadirect 而不是 \luaexec,它有时似乎可以工作(不太稳定,因为有时在其他情况下,它不起作用)。
\luaexec{context="Something"}
§§\luaexec{tex.print(context)}§§Something§§\\
\ifthenelse{\equal{\luadirect{tex.print(context)}}{Something}}{egal}{different}
我该如何确保变量上下文的内容被准确识别为文字内容?
答案1
的检验\equal
完全\ifthenelse
展开了它的论证(用\protected@edef
);因此,例如,
\ifthenelse{\equal{\textbf}{\expandafter\protect\csname textbf \endcsname}}{a}{b}
返回,因为应用a
之后,这些产生的标记列表是相同的。\protected@edef
另一方面\luaexec
,充分扩展为字符串,如手册中脚注 2 所述luacode
。
如果我尝试
\documentclass{article}
\usepackage{ifthen,luacode}
\begin{document}
\luaexec{context="Something"}
\makeatletter\protected@edef\test{\luaexec{tex.print(context)}}
\show\test
\end{document}
我明白了
> \test=macro:
->\begingroup \escapechar 92 \newlinechar 10 \edef \protect \\{\\}\edef \protect \nobreakspace {}{~}\let \%=%\let \#=#\endgroup Something.
很明显这与 不一样Something
。
另一方面,是完全可扩展的,如果我改变上面代码中\luadirect
的第二个实例,我得到\luaexec
> \test=macro:
->Something.