繁体   English   中英

Latex 到 HTML 与 Pandoc,如何包含 Lua 脚本 Z78E6221F6393D14666811DB398 转换?

[英]Latex to HTML with Pandoc, how do I include the Lua script output to the conversion?

我正在使用 pandoc 将 LaTeX 转换为 HTML。 但是,我在 latex 文件中包含一个 lua 脚本(它从 JSON 文件中提取一些数据并将数据格式化为 LaTeX)。 当我转换为 HTML 时,脚本未执行,但在 output 中显示为 lua。

有没有办法获得纯 latex output 进行转换或在转换期间运行脚本?

不幸的是,答案是“是的,但实际上:不是”。

我的意思是您可以运行 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)"]]]

我们看到该块变成了一个带有 class luacode的 div。 可以运行 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}

至少会将结果打印到控制台。 您可以使用 devise 一种机制,将其实际转换为 pandoc 的内部文档格式。 有关详细信息,请参阅https://pandoc.org/lua-filters.html

使用 --from --from=latex+raw_tex调用 pandoc 也可能是有益的,这使得 pandoc 将未知的luacode环境逐字保留在RawBlock元素中。 这可以更容易在过滤器中处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM