使用 Pandoc 将 Latex 转换为 HTML,如何将 Lua 脚本输出包含到转换中?
Latex to HTML with Pandoc, how do I include the Lua script output to the conversion?
我正在使用 pandoc 将 LaTeX 转换为 HTML。但是,我在 Latex 文件中包含一个 lua 脚本(它从 JSON 文件中提取一些数据并将数据格式化为 LaTeX)。当我转换为 HTML 时,脚本未执行但在输出中显示为 lua。
有没有办法获得用于转换的纯 Latex 输出或在转换过程中 运行 脚本?
不幸的是,答案是“是的,但实际上:不是”。
我的意思是你 可以 运行 Lua 代码,但它很可能包含特定于 luatex 的代码,并且不会在 pandoc 工作。
我们来看一个例子:
\documentclass{article}
\usepackage{luacode}
\begin{document}
You are runnig:
\begin{luacode}
tex.print(_VERSION)
\end{luacode}
\end{document}
脚本,当 运行 到 lualatex
时,将报告用于执行代码的 Lua 版本(当前为“Lua 5.3”)。 tex.print
命令由lualatex提供。
要查看 pandoc 如何处理此问题,我们可以使用 pandoc --to=native
将其转换为 pandoc 的内部格式。 Pandoc 不知道 luacode
环境,所以它把它当作普通文本。
[Para [Str "You",Space,Str "are",Space,Str "runnig:"]
,Div ("",["luacode"],[])
[Para [Str "tex.print(_VERSION)"]]]
我们看到块变成了 div 和 class luacode
。可以 运行 一个 Lua 过滤器并执行它的内容:
-- file: run-luacode.lua
function Div(d)
local code = pandoc.utils.stringify(d)
load(code)()
end
与
一起使用
pandoc my-test.latex --to=html --lua-filter=run-luacode.lua
会导致错误,因为tex.print
在pandoc的Lua.
中未定义
Error running filter run-luacode.lua:
[string "tex.print(_VERSION)"]:1: attempt to index a nil value (global 'tex')
stack traceback:
[string "tex.print(_VERSION)"]:1: in main chunk
run-luacode.lua:3: in function 'Div'
当然,我们可以在pandoc过滤器中定义tex.print
。例如,设置
tex = {['print'] = print}
至少会将结果打印到控制台。您可以设计一种机制,将其实际转换为 pandoc 的内部文档格式。有关详细信息,请参阅 https://pandoc.org/lua-filters.html。
用 --from=latex+raw_tex
调用 pandoc 也可能是有益的,这使得 pandoc 将未知的 luacode
环境逐字保存在 RawBlock
元素中。这在过滤器中更容易处理。
我正在使用 pandoc 将 LaTeX 转换为 HTML。但是,我在 Latex 文件中包含一个 lua 脚本(它从 JSON 文件中提取一些数据并将数据格式化为 LaTeX)。当我转换为 HTML 时,脚本未执行但在输出中显示为 lua。
有没有办法获得用于转换的纯 Latex 输出或在转换过程中 运行 脚本?
不幸的是,答案是“是的,但实际上:不是”。
我的意思是你 可以 运行 Lua 代码,但它很可能包含特定于 luatex 的代码,并且不会在 pandoc 工作。
我们来看一个例子:
\documentclass{article}
\usepackage{luacode}
\begin{document}
You are runnig:
\begin{luacode}
tex.print(_VERSION)
\end{luacode}
\end{document}
脚本,当 运行 到 lualatex
时,将报告用于执行代码的 Lua 版本(当前为“Lua 5.3”)。 tex.print
命令由lualatex提供。
要查看 pandoc 如何处理此问题,我们可以使用 pandoc --to=native
将其转换为 pandoc 的内部格式。 Pandoc 不知道 luacode
环境,所以它把它当作普通文本。
[Para [Str "You",Space,Str "are",Space,Str "runnig:"]
,Div ("",["luacode"],[])
[Para [Str "tex.print(_VERSION)"]]]
我们看到块变成了 div 和 class luacode
。可以 运行 一个 Lua 过滤器并执行它的内容:
-- file: run-luacode.lua
function Div(d)
local code = pandoc.utils.stringify(d)
load(code)()
end
与
一起使用pandoc my-test.latex --to=html --lua-filter=run-luacode.lua
会导致错误,因为tex.print
在pandoc的Lua.
Error running filter run-luacode.lua:
[string "tex.print(_VERSION)"]:1: attempt to index a nil value (global 'tex')
stack traceback:
[string "tex.print(_VERSION)"]:1: in main chunk
run-luacode.lua:3: in function 'Div'
当然,我们可以在pandoc过滤器中定义tex.print
。例如,设置
tex = {['print'] = print}
至少会将结果打印到控制台。您可以设计一种机制,将其实际转换为 pandoc 的内部文档格式。有关详细信息,请参阅 https://pandoc.org/lua-filters.html。
用 --from=latex+raw_tex
调用 pandoc 也可能是有益的,这使得 pandoc 将未知的 luacode
环境逐字保存在 RawBlock
元素中。这在过滤器中更容易处理。