LuaTeX - 仅打印一个参数

LuaTeX - 仅打印一个参数

我想使用 Lua 代码解析参数,但下面的基本代码失败了。我遗漏了什么?

\documentclass{article}

\usepackage{luacode}

\begin{luacode}
function calctree(a)     
  tex.print(">>>"..a.."<<<")
end    
\end{luacode}

\newcommand\calctree[1]{\directlua{calctree(#1)}}%


\begin{document}    

\calctree{OOO}
\calctree{a (b + 3) - c**2}

\end{document}

答案1

TeX 是一种宏语言,因此您的代码将扩展为\directlua{calctree(a (b + 3) - c**2)}。现在 Lua 没有理由将此参数视为字符串,因为没有引号,因此将其解释为 Lua 表达式。由于abc未定义且**不是有效的 Lua 运算符,因此此操作失败。

您可以使用以下方式将您的参数读取为字符串token.scan_argument

\documentclass{article}

\usepackage{luacode}

\begin{luacode}
function calctree(a)     
  tex.print(">>>"..a.."<<<")
end    
\end{luacode}

% This fully expands the argument
\newcommand\calctree{\directlua{calctree(token.scan_argument())}}%

% This would suppress the expansion
%\newcommand\calctreE[2]{\directlua{calctree(token.scan_argument())}{\unexpanded{#1}}}%


\begin{document}    

\calctree{OOO}
\calctree{a (b + 3) - c**2}

\end{document}

相关内容