如何导入 Lua 模块并在 Lua pandoc 过滤器中使用它们

Pandoc 通过 --lua-filter 参数原生支持 lua 过滤器。

然而,我想知道它使用的是哪个版本的 Lua,并且是否可以导入 Lua 模块,比如依赖于 C 代码的 luacom。

这是我研究的一部分,旨在创建一个过滤器,读取 Excel 工作表并将其转换为 pandoc 表格。

点赞
用户2425163
用户2425163

通常可以通过运行 print(_VERSION) 来检查 Lua 版本。也就是说,在 shell 中运行这个命令应该可以:

pandoc --lua-filter <(echo 'print(_VERSION)') <<< ''

旧版本的 pandoc 可以编译为 Lua 5.1、Lua 5.2、Lua 5.3 或 LuaJIT。然而,维护兼容性很繁琐,因此 pandoc 使用的 HsLua 包的维护者(即我)一年前停止支持旧版本。如果您使用的是 pandoc 2.3.1 或更高版本,则 pandoc 包含 Lua 5.3.x。

加载纯 Lua 库不会有问题,并且应该像使用普通 Lua 可执行文件一样工作。唯一的问题可能在于 pandoc 中设置的默认 LUA_PATH 与其他程序使用的 LUA_PATH 不同。如果 pandoc 没有针对系统范围的 Lua 版本进行编译,则可能会出现这种情况。LuaRocks 可以帮助您处理这个问题,只需运行 eval "$(luarocks path)"

与纯 Lua 库一样,如果 pandoc 以非静态二进制文件编译,则 C Lua 库也应该可以正常工作。但是,在 pandoc 网站和 GitHub 上提供的非 Windows 二进制文件是静态的,动态加载 C 库将无法工作。

我们维护基于 Alpine 的 Docker 镜像 pandoc/corepandoc/latex,它们针对系统范围的 Lua 版本进行编译。如果您的平台软件包管理器没有提供最新的 pandoc 版本,无法使用静态编译的二进制文件,并且不想自己编译 pandoc,这可能是一个不错的选择。如果您想看到其他基础镜像的支持(比如 Ubuntu),只需提高一个票。

2019-05-11 06:07:44