我已尽我所能进行搜索,并且我认为我读到了正确的答案,但我太笨了,不知道我读到了它。
我似乎无法弄清楚如何让 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