安装 Lua 模块以在 LuaLaTeX 中使用

安装 Lua 模块以在 LuaLaTeX 中使用

我已尽我所能进行搜索,并且我认为我读到了正确的答案,但我太笨了,不知道我读到了它。

我似乎无法弄清楚如何让 Lua 模块(通过 luarocks 或任何其他方式安装)显示在 LuaLaTeX 中。因此,这里有一个最简单的方法:

%!TEX TS-program = lualatex
\documentclass{article}
\usepackage{luatexbase}
\usepackage{luacode}
\begin{document}

    \directlua{package.path = "~/.luarocks/share/lua/5.1/?.lua;~/.luarocks/share/lua/5.1/?/init.lua;" .. package.path }

    \directlua{require('pl')}
    \directlua{require('htk')}

    \directlua{tex.sprint(package.path)}

    the standard approximation $\pi = \directlua{tex.sprint(math.pi)}$

\end{document}

htk使用 luarocks 和命令进行安装luarocks --local install HTK 。Penlight 模块的安装方式相同,但使用penlight。Penlight 使用“pl/submodulename”方案,而 htk 仅使用目录中的“htk.lua” ~/.luarocks/share/lua/5.1

日志输出为:

./luamoduleload.tex:9: LuaTeX error <\directlua >:1: module 'pl' not found:
    no field package.preload['pl']
    [luatexbase.loader] Search failed
    [kpse lua searcher] file not found: 'pl'
    [kpse C searcher] file not found: 'pl'
stack traceback:
    [C]: in function 'require'
    <\directlua >:1: in main chunk.
l.9     \directlua{require('pl')}

The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.

./luamoduleload.tex:10: LuaTeX error <\directlua >:1: module 'htk' not found:
    no field package.preload['htk']
    [luatexbase.loader] Search failed
    [kpse lua searcher] file not found: 'htk'
    [kpse C searcher] file not found: 'htk'
stack traceback:
    [C]: in function 'require'
    <\directlua >:1: in main chunk.
l.10    \directlua{require('htk')}

The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.

更多的日志文件是否有帮助?

事实上,如果我知道在哪里安装我想要使用的 lua 模块,我就会很高兴,特别是如果我不需要做任何魔术就可以让独立的 lua 脚本在 LuaLaTeX 之外工作。

如果我可以更清楚地表达或者我没有阅读正确的手册,请告诉我。:)

-安德鲁

答案1

这一行:

 \directlua{package.path = "~/.luarocks/share/lua/5.1/?.lua;~/.luarocks/share/lua/5.1/?/init.lua;" .. package.path }

看起来有点可疑。我认为你需要\noexpand在波浪符号前加上 s,否则宏的扩展~最终会成为 的一部分package.path

\directlua{package.path = "\noexpand~/.luarocks/share/lua/5.1/?.lua;\noexpand~/.luarocks/share/lua/5.1/?/init.lua;" .. package.path }

答案2

我知道这是一个非常老的问题,但为了完整性......

\usepackage{luapackageloader}

并将你的 Lua 包放在你的 texmf 目录中(我将其与可执行文件放在一起),可能需要刷新文件名数据库。

例如:C:\Users\PERSON\AppData\Local\Programs\MiKTeX\miktex\bin\x64\youPackagesHere

相关内容