在Lua建筑乳胶/特克斯参数(Building Latex/Tex arguments in lua

2019-10-22 23:31发布

我用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和最终用作\比较正确的说法形成?

Answer 1:

还有的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.

会工作。



文章来源: Building Latex/Tex arguments in lua
标签: lua latex tex