我想LaTeX
在 lua 变量中获取命令的完整扩展形式的含义。最简单的方法是什么?换句话说,我应该用什么来替换该函数getmeaning
?
% !TeX program = lualatex
\documentclass{article}
\usepackage{luacode,luatexbase}
\begin{luacode}
function whatis(s)
s="\\" .. s
x=getmeaning(s)
end
\end{luacode}
\newcommand{\whatis}[1]{\luadirect{whatis(\luastring{#1})}}
\begin{document}
I want the contents of \textbackslash{}foo fully expanded to appear in the Lua variable x.
\whatis{foo}
\end{document}
答案1
您可以使用宏来访问替换文本,token.get_macro
但完整扩展(就其定义而言)在 luatex 的 tex 方面是牢固的。 \directlua
已经进行了 edef 样式扩展,因此除了将结果字符串保存在全局变量中之外,Lua 没有留下太多事情要做。
我在这里展示了两种形式。
\documentclass{article}
\directlua{
function whatis(s)
x=token.get_macro(s)
end
function whatisE(s)
xe=s
end
}
\def\foo{a \zzz\space b}
\def\zzz{XYZ}
\newcommand{\whatis}[1]{\directlua{whatis("#1")}}
\newcommand{\whatisE}[1]{\directlua{whatisE("\csname#1\endcsname")}}
\begin{document}
I want the contents of \textbackslash{}foo to appear in the Lua variable x.
\whatis{foo}
I want the contents of \textbackslash{}foo fully expanded to appear in the Lua variable xe.
\whatisE{foo}
x is \texttt{\directlua{tex.print(-2,x)}}
xe is \texttt{\directlua{tex.print(-2,xe)}}
\end{document}