lua - 使用 Pandoc 将 Latex 转换为 HTML,如何将 Lua 脚本输出包含到转换中?
问题描述
我正在使用 pandoc 将 LaTeX 转换为 HTML。但是,我在乳胶文件中包含一个 lua 脚本(它从 JSON 文件中提取一些数据并将数据格式化为 LaTeX)。当我转换为 HTML 时,脚本没有执行,但在输出中显示为 lua。
有没有办法为转换获得纯乳胶输出或在转换期间运行脚本?
解决方案
不幸的是,答案是“是的,但实际上:不是”。
我的意思是你可以运行 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 的内部格式,使用pandoc --to=native
. Pandoc 不了解luacode
环境,因此它将其视为普通文本。
[Para [Str "You",Space,Str "are",Space,Str "runnig:"]
,Div ("",["luacode"],[])
[Para [Str "tex.print(_VERSION)"]]]
我们看到该块变成了一个带有 class 的 div 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'
当然,我们可以tex.print
在 pandoc 过滤器中定义。例如,设置
tex = {['print'] = print}
至少会将结果打印到控制台。您可以设计一种机制,将其实际转换为 pandoc 的内部文档格式。有关详细信息,请参阅https://pandoc.org/lua-filters.html。
使用 调用 pandoc 也可能是有益的--from=latex+raw_tex
,这使得 pandoc 将未知luacode
环境逐字保留在RawBlock
元素中。这可以更容易在过滤器中处理。
推荐阅读
- oracle - 如何使用 SqL ldr 将大小超过 4000 字节的字符串插入 CLOB 类型的表列
- javascript - 如何访问javascript中的每个索引?
- sql-server-2012 - 在 SQL Server(错误日志表)本身中跟踪 SQL Server 存储过程超时异常的最佳方法是什么?
- reactjs - React js Material UI扩展面板通过代码禁用
- r - 如何将 64 位 R(不设置为 32 位)连接到 32 位 MS Access
- angular - 如何在 Angular 8 中使用 angular-oauth2-oidc 实现身份验证代码流
- python - 在两个字典中查找浮点数范围的差异
- mysql - 如何在mysql中添加触发事件?
- android - Firebase SDK 中的 Google Ads 归因
- node.js - 仅当日期总计超过 45 天时如何获取数据?