在lua中构建Latex / Tex参数

时间:2015-05-04 08:32:24

标签: lua latex tex

我使用lua做一些复杂的工作来为Tex / LaTex中的宏准备参数。

第一部分 这是一个愚蠢的最小例子:

\newcommand{\test}{\luaexec{tex.print("11,12")}}% aim to create 11,12
\def\compare#1,#2.{\ifthenelse{#1<#2}{less}{more}}
\string\compare11,12. : \compare11,12.\\ %answer is less
\string\test : \test\\ % answer is 11,12
\string\compare : \compare\test. % generate an error

最后一行会产生错误。显然,Tex没有发现&#34;,&#34;包含在\ test。

我怎样才能将\ test理解为11后跟,后跟12而不是字符串11,12,最后用作\ compare的正确形成的参数?

1 个答案:

答案 0 :(得分:3)

对TeX如何运作存在一些误解。

您的\compare宏想要找到一个逗号后跟一些东西,然后是一段句子。但是,当你打电话

\compare\test

找不到逗号,因此TeX一直在寻找它,直到找到文件末尾或\par(或空白行)。请注意,在查找宏的参数时,TeX 从不扩展宏。

你可以做

\expandafter\compare\test.

前提是\test会立即以所需格式扩展为令牌,但不会,因为\test的扩展是

\luaexec{tex.print("11,12")}

并且逗号被大括号隐藏,因此它不计算在内。但它无济于事。

问题是一样的:当你做

\newcommand{\test}{\luaexec{tex.print("11,12")}}

论证是扩展。您可以在\edef中使用“扩展定义”,但问题是\luaexec无法完全展开。

如果你这样做

\edef\test{\directlua{tex.sprint("11,12")}}

然后

\expandafter\compare\test.

会起作用。