LuaLaTex 使用 fontspec 工具包和 luacode 读取 JSON 文件

我使用 Latex 已经多年了,但是我对嵌入式的 luacode (与 Lualatex) 很陌生。下面是一个简化的例子:

\begin{filecontents*}{data.json}
    [
        {"firstName":"Max", "lastName":"Möller"},
        {"firstName":"Anna", "lastName":"Smith"}
    ];
\end{filecontents*}

\documentclass[11pt]{article}

\usepackage{fontspec}
%\setmainfont{Carlito}

\usepackage{tikz}
\usepackage{luacode}

\begin{document}
\begin{luacode}
    require("lualibs.lua")
    local file = io.open('data.json','rb')
    local jsonstring = file:read('*a')
    file.close()

    local jsondata =  utilities.json.tolua(jsonstring)

    tex.print('\\begin{tabular}{cc}')
    for key, value in pairs(jsondata) do
        tex.print(value["firstName"] .. ' & ' .. value["lastName"] .. '\\\\')
    end
    tex.print('\\hline\\end{tabular}')
\end{luacode}
\end{document}

执行 Lualatex 时,发生以下错误:

LuaTeX error [\directlua]:6: attempt to index field 'json' (a nil value) [\directlua]:6: in main chunk. \end{luacode}

当注释掉行 \usepackage{fontspec} 后,输出将会被生成。或者,可以通过注释掉 utilities.json.tolua(jsonstring) 以及随后的所有 lua 代码来避免出现错误。

因此问题是:如何在不生成错误消息的情况下同时使用“fontspec”包和 json 数据?除此之外,我还有一个问题:如何在 luacode 的输出中启用德语特殊字符 (例如例子中的 "lastName":Möller)?

噢,我在 Ubuntu 16.04 上使用 TeX Live 2015/Debian。

谢谢, Jerome

点赞