![LuaLaTeX 需要路径 - 只有绝对路径才有效](https://linux22.com/image/432234/LuaLaTeX%20%E9%9C%80%E8%A6%81%E8%B7%AF%E5%BE%84%20-%20%E5%8F%AA%E6%9C%89%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%E6%89%8D%E6%9C%89%E6%95%88.png)
我想使用外部包进行 LuaLaTeX 脚本编写(例如penlight
)。我经常使用texlua
命令测试我的脚本,没有任何问题。但是,我注意到当我使用命令编译文档时lualatex
,会出现错误require()
。我确定package.path
和package.cpath
包含存储我的外部模块的目录。似乎我可以通过提供外部模块的绝对路径来添加模块,但如果模块相对引用另一个模块,这就会成为一个问题。
所以总而言之,require()
相对路径不适用于lualatex
,但适用于texlua
命令。
我知道这是一个相关的问题,但现在是 2011 年,解决方案不够优雅,因为我必须手动更改require
每个外部模块的调用。“Lua 树”(texmf 树的类似物)
主文本
\documentclass{scrartcl}
\directlua{dofile("FileInSameDirAsMainAndRequiresExternalModules.lua")}
\begin{document}
Hello World
\end{document}
FileInSameDirAsMainAndRequiresExternalModules.lua
_LUA_STUFF_DIR = 'C:/Program Files/MiKTeX 2.9/miktex/bin/x64' --just to be sure the path is there...
package.path = package.path..';'.._LUA_STUFF_DIR
package.cpath = package.cpath..';'.._LUA_STUFF_DIR --todo why does this not work for luatex but texlua
--Both calls below work with texlua command
pl = require('pl') -- this fails with lualatex as pl is not found
pl = require(_LUA_STUFF_DIR..'/pl/tablex') -- this also fails with lualatex, but differently
--it "gets" through to the pl.tablex module, but fails since tablex.lua had a require(pl.util) in it
编辑:也测试了同样的问题
\documentclass{scrartcl}
\directlua{
LUASTUFFDIR = 'C:/Program Files/MiKTeX 2.9/miktex/bin/x64'
package.path = package.path..';'..LUASTUFFDIR
package.cpath = package.cpath..';'..LUASTUFFDIR
pl = require('pl')
}
\begin{document}
Hello
\end{document}
答案1
正如@UlrikeFischer 指出的那样,\usepackage{luapackageloader}
这个问题已经解决了。