lualatex luasec/luasocket

lualatex luasec/luasocket

我希望这不会令人沮丧,因为已经有其他关于类似问题的帖子,但不知何故,到目前为止我读到的都不起作用。

由于我使用的是 Arch Linux,所以我通过(可能与软件包安装路径有关)安装了lua和。然后我通过(指定了 luaversion,因为否则 lib 是为 5.4 安装的) 安装了。如所示luarockspacmanluarocks 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")}

我已经在使用luapackageloadertex-package 来搜索“正常”的 lua 路径。

有谁知道为什么这不适用于 lualatex?

(我也检查过其他 lua 库,date或者lunajson似乎是以这种方式工作的,所以也许这是 openssl 的问题,但在这种情况下,我也不知道确切的原因是什么)

答案1

  1. 您不需要安装,luasocket因为luasocket它由 LuaTeX 自动提供。
  2. 如果您想在 LuaLaTeX 中加载基于 C 的库,您必须lualatex使用该--shell-escape选项运行,因为它允许执行任意代码。

相关内容