我希望这不会令人沮丧,因为已经有其他关于类似问题的帖子,但不知何故,到目前为止我读到的都不起作用。
由于我使用的是 Arch Linux,所以我通过(可能与软件包安装路径有关)安装了lua
和。然后我通过(指定了 luaversion,因为否则 lib 是为 5.4 安装的) 安装了。如所示luarocks
pacman
luarocks install --local --lua-version=5.3 luasec
$ luarocks --local --lua-version 5.3 list
Rocks installed for Lua 5.3 in /home/lukas/.luarocks
----------------------------------------------------
luasec
1.0.2-1 (installed) - /home/lukas/.luarocks/lib/luarocks/rocks-5.3
luasocket
3.0rc1-2 (installed) - /home/lukas/.luarocks/lib/luarocks/rocks-5.3
岩石安装完毕。执行一个简短的测试程序
$ cat main2.lua
-- output from luarocks --lua-version 5.3 path converted
package.path='/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua;/usr/lib/lua/5.3/?.lua;/usr/lib/lua/5.3/?/init.lua;./?.lua;./?/init.lua;/home/lukas/.luarocks/share/lua/5.3/?.lua;/home/lukas/.luarocks/share/lua/5.3/?/init.lua'
package.cpath='/usr/lib/lua/5.3/?.so;/usr/lib/lua/5.3/loadall.so;./?.so;/home/lukas/.luarocks/lib/lua/5.3/?.so'
local https = require 'ssl.https'
print("Hi")
$ lua5.3 main2.lua
Hi
作品。
如果我现在尝试在lualatex
\documentclass[a4paper, 12pt]{scrartcl}
\usepackage{luapackageloader} % use the default lua path as well
\directlua{dofile("main2.lua")}
\begin{document}
hi
\end{document}
我收到此错误:
/home/lukas/.luarocks/shar
e/lua/5.3/ssl.lua:8: module 'ssl.core' not found:
no field package.preload['ssl.core']
[lua searcher]: module not found: 'ssl.core'
no file '/usr/share/lua/5.3/ssl/core.lua'
no file '/usr/share/lua/5.3/ssl/core/init.lua'
no file '/usr/lib/lua/5.3/ssl/core.lua'
no file '/usr/lib/lua/5.3/ssl/core/init.lua'
no file './ssl/core.lua'
no file './ssl/core/init.lua'
no file '/home/lukas/.luarocks/share/lua/5.3/ssl/core.lua'
no file '/home/lukas/.luarocks/share/lua/5.3/ssl/core/init.lua'
[kpse lua searcher] file not found: 'ssl.core'
[lua C searcher]: module not found: 'ssl.core'
no file '/usr/lib/lua/5.3/ssl/core.so'
no file '/usr/lib/lua/5.3/loadall.so'
no file './ssl/core.so'
no file '/home/lukas/.luarocks/lib/lua/5.3/ssl/core.so'
stack traceback:
[C]: in function 'require'
/home/lukas/.luarocks/share/lua/5.3/ssl.lua:8: in main chunk
[C]: in function 'require'
/home/lukas/.luarocks/share/lua/5.3/ssl/https.lua:10: in main chunk
[C]: in function 'require'
main2.lua:4: in main chunk
[C]: in function 'dofile'
[\directlua]:1: in main chunk.
l.5 \directlua{dofile("main2.lua")}
我已经在使用luapackageloader
tex-package 来搜索“正常”的 lua 路径。
有谁知道为什么这不适用于 lualatex?
(我也检查过其他 lua 库,date
或者lunajson
似乎是以这种方式工作的,所以也许这是 openssl 的问题,但在这种情况下,我也不知道确切的原因是什么)
答案1
- 您不需要安装,
luasocket
因为luasocket
它由 LuaTeX 自动提供。 - 如果您想在 LuaLaTeX 中加载基于 C 的库,您必须
lualatex
使用该--shell-escape
选项运行,因为它允许执行任意代码。