我用LUA做一些复杂的工作,在特克斯/ 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
最后一行创建了一个错误。 显然,特克斯没有检测“”列入\测试。
我怎样才能做到让\测试被理解为11紧接着,其次是12,而不是串11,12和最终用作\比较正确的说法形成?
还有的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.
会工作。