LuaLaTeX与Archlinux上的LuaSQL

问题描述:

我正在使用LuaSQL从我的数据库获取数据的LuaLaTeX文件。所以这是我想出了003-v1.tex003-v1.lua文件:LuaLaTeX与Archlinux上的LuaSQL

003-v1.tex文件:

\documentclass{article} 
\usepackage{luacode} 

% Lua kodo vpišemo v ločeno datoteko zaradi syntax highlithing 
\directlua{dofile('003-v1.lua')} 

\newcommand{\stranke}{\luadirect{stranke()}} 

\begin{document} 
    \begin{tabular}{ll} 
     \hline 
     id stranke & ime \\ 
     \hline 
     \stranke 
     \hline 
    \end{tabular} 
\end{document} 

003-v1.lua文件:

function stranke() 

    package.cpath = package.cpath .. ";/usr/lib/i386-linux-gnu/lua/5.1/?.so" 
    luasql = require "luasql.mysql" 

    env = assert (luasql.mysql()) 
    con = assert (env:connect("linux_krozki","root","mypassword")) 
    cur = assert (con:execute("SELECT * FROM stranke")) 

    vnos = cur:fetch ({}, "a") 

    while vnos do 

     print(
      string.format([[%s & %s \\]], vnos.id_stranke, vnos.ime) 
     ) 
     vnos = cur:fetch (vnos, "a") 

    end 

end 

这个文件应该工作,但是当我尝试使用编译lualatex 003-v1.tex我收到的错误:

This is LuaTeX, Version 1.0.4 (TeX Live 2017/Arch Linux) 
restricted system commands enabled. 
(./003-v1.tex 
LaTeX2e <2017-04-15> 
(using write cache: /home/ziga/.texlive/texmf-var/luatex-cache/generic)(using r 
ead cache: /var/lib/texmf/luatex-cache/generic /home/ziga/.texlive/texmf-var/lu 
atex-cache/generic) 
luaotfload | main : initialization completed in 0.144 seconds 
Babel <3.12> and hyphenation patterns for 1 language(s) loaded. 
(/usr/share/texmf-dist/tex/latex/base/article.cls 
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class 
(/usr/share/texmf-dist/tex/latex/base/size10.clo(load luc: /home/ziga/.texlive/ 
texmf-var/luatex-cache/generic/fonts/otl/lmroman10-regular.luc))) 
(/usr/share/texmf-dist/tex/lualatex/luacode/luacode.sty 
(/usr/share/texmf-dist/tex/generic/oberdiek/ifluatex.sty) 
(/usr/share/texmf-dist/tex/luatex/luatexbase/luatexbase.sty 
(/usr/share/texmf-dist/tex/luatex/ctablestack/ctablestack.sty))) (./003-v1.aux) 
003-v1.lua:8: module 'luasql.mysql' not found: 
     no field package.preload['luasql.mysql'] 
     [kpse lua searcher] file not found: 'luasql.mysql' 
     [kpse C searcher] file not found: 'luasql.mysql' 
     no file '/usr/local/lib/lua/5.2/luasql.so' 
     no file '/usr/local/lib/lua/5.2/loadall.so' 
     no file './luasql.so' 
     no file '/usr/lib/i386-linux-gnu/lua/5.1/luasql.so' 
stack traceback: 
     [C]: in function 'require' 
     003-v1.lua:8: in function 'stranke' 
     [\directlua]:1: in main chunk. 
\luadirect ... { \[email protected]@printdbg {#1} #1 } 

l.14   \stranke 

并根据this topic这个错误arrizes,因为LuaLaTeX不能加载模块luasql.mysqllua可以自己。我怎么知道这个?如果我有lua 003-v1.lua编译之前从003-v1.lua注释掉第一行(function stranke())和最后一行(end)我得到的输出是完全没问题:

1 & Žiga \\ 
2 & Ranja \\ 
3 & Romana \\ 

所以我的问题是,如何确保模块luasql.mysql负荷当LuaLateX被调用?我在Archlinux上,正在使用texlive。我听说人们再次支持luasql编译texlive,但是找不到一步一步的指南......那太棒了!如果有人已经编译过它,情况会更好。


这里是我的版本的texlive的信息:

[[email protected] ~]$ pacman -Qs tex | grep live 
local/texlive-bibtexextra 2017.44915-1 (texlive-most)                               
local/texlive-bin 2017.44590-2                                     
local/texlive-core 2017.44918-1 (texlive-most) 
local/texlive-fontsextra 2017.44818-1 (texlive-most) 
local/texlive-formatsextra 2017.44177-2 (texlive-most) 
local/texlive-games 2017.44131-1 (texlive-most) 
local/texlive-humanities 2017.44833-1 (texlive-most) 
local/texlive-langchinese 2017.44333-1 (texlive-lang) 
local/texlive-langcyrillic 2017.44895-1 (texlive-lang) 
local/texlive-langextra 2017.44908-1 (texlive-lang) 
local/texlive-langgreek 2017.44917-1 (texlive-lang) 
local/texlive-langjapanese 2017.44914-1 (texlive-lang) 
local/texlive-langkorean 2017.44467-1 (texlive-lang) 
local/texlive-latexextra 2017.44907-1 (texlive-most) 
local/texlive-music 2017.44885-1 (texlive-most) 
local/texlive-pictures 2017.44899-1 (texlive-most) 
local/texlive-pstricks 2017.44742-1 (texlive-most) 
local/texlive-publishers 2017.44916-1 (texlive-most) 
local/texlive-science 2017.44906-1 (texlive-most) 
+0

['\ usepackage {luapackageloader}'](https://ctan.org/pkg/luapackageloader)(需要TeXlive 2017)。 –

+0

@HenriMenke它看起来像我已经安装。我在问题结尾处添加了Texlive信息。 – 71GA

+0

@HenriMenke如果我在'\ documentclass'之后添加这行并重新编译,我得到这个输出:'LaTeX警告:你已经请求包luapackageloader,但是包提供了'.'所有其他的都是相同的,包括错误.. 。 – 71GA

我们找到了答案上Archlinux论坛的主题被张贴后。看起来像Lua语言存在一些内部问题 - package.cpath无法重新识别问号,因此?.so必须更改为mysql.so。谁能解释为什么会发生这种情况