在 Lua 变量中捕获 LaTeX 命令的定义

在 Lua 变量中捕获 LaTeX 命令的定义

我想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}

相关内容