Lua 到 Tex:内容和变量内容不同吗?

Lua 到 Tex:内容和变量内容不同吗?

这里有些奇怪!(我的意思是我不明白)。我在(全局)变量 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.

相关内容