受到文章的启发没有 TeX 的 TeX在 LuaTeX wiki 上,我很好奇是否可以在 lua 脚本中复制整个 LaTeX 解析到渲染管道。
我目前被数学难住了——mknodes
文章中的函数(以及我发现的更高级的版本这里) 只是将表示数学模式($符号)的字符作为字符处理,并不构造数学节点。
LuaTeX 中是否有方法可以调用 TeX 内置的文本解析功能?最好包括数学、宏、图像、表格、句点后的较大胶水等。我正在寻找一个函数,它可以获取一段 tex 源代码并返回一个节点列表。
任何帮助将不胜感激!
答案1
下面以一个 Lua 字符串开始,将其排版在一个框中,使用该框(以便您可以看到它)然后遍历框中的节点并给出它们的 ID(如字形/胶水/数学等)。
\documentclass{article}
\begin{document}
\directlua{\unexpanded{
function foo (n)
texio.write_nl("START")
local hnodes=tex.getbox(n).head
for n in node.traverse(hnodes) do
texio.write_nl("ID = " .. node.types()[(n.id or -1)] )
end
texio.write_nl("END")
end
tmpstr="A string with some $ \\sqrt{x^2+y^2} $ maths
and a \\textbf{font} \\textit{change} or \\textsc{Two}."
tex.print("\\sbox0{" ..
tmpstr ..
"}")
tex.print("\\usebox{0}")
tex.print("\\directlua{foo(0)}")
}}
\end{document}
它产生如下所示的终端输出,其中前两项是与起始文本相对应的“字形胶水”A
START
ID = glyph
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glue
ID = math
ID = hlist
ID = math
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glue
ID = glyph
ID = kern
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = kern
ID = glyph
ID = kern
ID = glue
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = glyph
ID = kern
ID = glue
ID = glyph
ID = glyph
ID = kern
ID = glue
ID = glyph
ID = glyph
ID = kern
ID = glyph
ID = glyph
END