LaTeX3 - 在 LaTeX3 中读取 Json 作为输入

LaTeX3 - 在 LaTeX3 中读取 Json 作为输入

我想根据JSON输入生成 LaTeX 模板。是否可以将JSON其作为输入LaTeX3并创建 LaTeX 模板?我在 中找到了解决方案LuaLaTeX

在 LaTeX 中解析 JSON 的方法?

如何在 LaTeX3 中实现这一点?我的JSON输入如下:

{
    "LaTeXPage": {
        "obj": "LaTeXPage",
        "pro": {
            "paperWidth": {
                "property": "paperWidth",
                "value": "129",
                "units": "mm",
                "remarks": null
            },
            "paperHeight": {
                "property": "paperHeight",
                "value": "198",
                "units": "mm",
            },
            "topMargin": {
                "property": "topMargin",
                "value": "3",
                "units": "mm",
            },
        }
    }
    }

预期的 LaTeX 包输出:

\setlength{\paperwidth}{129mm}
\setlength{\paperheight}{198mm}
\setlength{\topmargin}{3mm}

我尤其想使用expl3LaTeX 包。或者也欢迎任何其他解决方案!!!

答案1

我找到了解决方案。

\documentclass{article}
\usepackage{luatextra} % luacode
\usepackage{environ}  % LaTeX Stylefile Writing in NewEnvironment

% load json file
\begin{luacode*}
function read(File)
    local handler = io.open(File, "rb")
    local content = handler:read("*all")
    handler:close()
    return content
end

JSON = (loadfile "JSON.lua")()
tab = JSON:decode(read("sample.json"))
\end{luacode*}

\newcommand*\JSONpagewidth{\directlua{tex.print(tab['LaTeXPage']['pro']['pageWidth']['value'])}\directlua{tex.print(tab['LaTeXPage']['pro']['pageWidth']['units'])}}

\newwrite\writer
\NewEnviron{styleFileWrite}
    {\immediate\write\writer{%
    \string\setlength\paperwidth{\JSONpagewidth}^^J%
    \unexpanded\expandafter{\BODY}
    }}
\immediate\openout\writer=LaTeX-\jobname.sty    
\begin{styleFileWrite}
\end{styleFileWrite}
\immediate\closeout\writer

\begin{document}

Pagewidth values is ::  {\JSONpagewidth}

\end{document}

相关内容