ConTeXt:使用 Lua 进行交叉引用扩展和处理

ConTeXt:使用 Lua 进行交叉引用扩展和处理

我想在ConTeXt/LuaTeX中处理交叉引用,即使用\at\inlinerange命令返回的页码和行号在Lua中做一些计算。

但这不起作用,因为这些命令在传递给 Lua 之前显然没有被扩展。

一个简单的例子:

\setupreferencing[state=start]

\definenumber[test]
\setnumber[test][5]

\startluacode
function TestVar(var)
print('VARIABLE: ')
print(var)
tex.print(var)
end
\stopluacode

\def\TestLua#1{\ctxlua{TestVar([==[#1]==])}} % Cf. https://www.contextgarden.net/Programming_in_LuaTeX

\startbuffer[testtext]
\dorecurse{100}{Words, words, words. }
\stopbuffer

\starttext
\startlinenumbering

Counter: \TestLua{\rawcountervalue[test]}\par % The counter is expanded before being passed to Lua.
Lineref: \TestLua{\inlinerange[1]}\par % The line reference is not expanded before being passed to Lua.

\getbuffer[testtext]
\someline[1]LABEL 1

\stoplinenumbering
\stoptext

\TestLua只是将参数传递给 Lua 命令TestVar,该命令将其打印stdout并返回给 TeX。

PDF 结果乍一看不错,按预期显示了正确的值,但stdout我们可以看到:

VARIABLE: 
5
VARIABLE: 
\inlinerange [1]

所以行引用显然之前没有被扩展,而是在传递给 Lua 命令之后才被扩展。因此,当尝试在 Lua 中对其进行数学计算时,就会出现错误。

那么我怎样才能将我的引用的值传递给 Lua?

相关内容