我想使用 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 表达式。由于a
、b
和c
未定义且**
不是有效的 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}