我尝试使用process_input_buffer
LuaTeX 提供的回调函数,但不幸的是,我没有得到我期望的结果。
手册上说
此回调允许您在 LuaTeX 实际开始查看行输入缓冲区之前更改其内容。
function (<string> buffer)
return <string> adjusted_buffer
end
如果您返回
nil
,LuaTeX 将假装您的回调从未发生过。这样您就可以节省少量的处理时间。
我尝试使用此回调来处理我的输入。首先,我必须注册它
-- a.lua
-- the function appendSomething will append the \TeX command to end of the input lines
-- and return the adjusted string later
local function appendSomething(str)
str = str .. " \\TeX{}"
return str
end
callback.register("process_input_buffer", appendSomething)
% a.tex
\directlua{dofile 'a.lua'}
hello
world
\bye
输出如下
hello T.5exEX world T.5exEX
我不明白TeX with lower E
。由于在process_input_buffer
TeX 实际查看输入行之前处理输入行,因此\TeX
应该将命令附加到输入行的末尾。之后,TeX 将进行实际的排版工作并读取 \TeX,将其转换为标记,并用替换文本替换它。
但是,这不会发生。为什么?为什么我无法获得每行末尾带有 TeX(下 E)的输出行?
答案1
上面给出的代码可以正常工作。我犯了一个错误,因为\lower
我在 tex 源文件的前面部分粗心地重新定义了。