我想根据JSON
输入生成 LaTeX 模板。是否可以将JSON
其作为输入LaTeX3
并创建 LaTeX 模板?我在 中找到了解决方案LuaLaTeX
。
如何在 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}
我尤其想使用expl3
LaTeX 包。或者也欢迎任何其他解决方案!!!
答案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}