![ConTeXt:使用 Lua 进行交叉引用扩展和处理](https://linux22.com/image/401266/ConTeXt%EF%BC%9A%E4%BD%BF%E7%94%A8%20Lua%20%E8%BF%9B%E8%A1%8C%E4%BA%A4%E5%8F%89%E5%BC%95%E7%94%A8%E6%89%A9%E5%B1%95%E5%92%8C%E5%A4%84%E7%90%86.png)
我想在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?