我正在读取一个 json 文件并写入表格,但想要根据数组中的值数量拆分表格的一个单元格。如何在 Lua 中实现这一点?使用 Jeffrey Friedl 的 JSON.lua 包(http://regex.info/blog/lua/json)
"Declination": {
"MEAN DECLINATION": "0.34 DEGREES WEST",
"MEAN GRIVATION": "67 DEGREES EAST",
"ANNUAL RATE OF CHANGE": ["6 Minutes, 8 Minutes"]
}
第1节.tex:
\section*{}
\begin{tikzpicture}
\draw (-0.04in,-0.22in) -- (7.54in,-0.27in);
\end{tikzpicture}
\newcolumntype{L}{|>{\raggedright\arraybackslash\bfseries}X|X}
\catcode10=9\
\renewcommand{\arraystretch}{1.5}
\begin{luacode*}
local json = require("json")
local file = io.open("data.json")
tab = json.parse(file:read("*all"))
file:close()
tex.sprint(
[[\begin{table}[ht!]
\centering
\begin{tabularx}{\textwidth}{@{} LL @{}}
\rowcolor{lightgray!50}
\hline]])
for i, k in pairs(tab["Declination"]) do
tex.sprint(
[[\textbf]],
i, [[& ]],
k, [[\\]], %split cell if Annual change is more than 1 value
[[\hhline{--}]])
end
tex.sprint(
[[\hhline{--}
\end{tabularx}
\end{table}]])
\end{luacode*}
所需表格:
答案1
这是第一次尝试。您确实应该编写一个最小的工作示例。只有这样,您才能在文档中添加花哨的东西:
\documentclass{article}
\usepackage{luacode}
\usepackage{multirow}
\begin{filecontents*}{data.json}
{
"Declination":
{
"MEAN DECLINATION": "0.34 DEGREES WEST",
"MEAN GRIVATION": "67 DEGREES EAST",
"ANNUAL RATE OF CHANGE": ["6 Minutes, 8 Minutes"]
}
}
\end{filecontents*}
\begin{document}
\begin{luacode*}
local concat = table.concat
local split = string.split
local texprint = tex.print
local json = require("JSON")
local tab = json:decode(io.loaddata("data.json"))
texprint([[\begin{tabular}{ll}]])
for _, v in pairs(tab) do
for kk, vv in pairs(v) do
if type(vv) == 'string' then
local pat = '^%S+%s+%S+%s+(%S+)$'
texprint(kk..'&')
texprint(vv:gsub(pat,'%1')..'\\\\')
elseif type(vv) == 'table' then
local w = split(vv[1],",")
texprint(([[\multirow{%d}{*}{%s} & ]]):format(#w, kk))
texprint(concat(w, '\\\\ & ')..'\\\\')
end
end
end
texprint([[\end{tabular}]])
\end{luacode*}
\end{document}
请注意,由于 的性质,字段将无序出现pairs
。但是,由于您的问题不够清楚(例如,字段是否始终是上面的三个?),因此,稍微澄清一下会有所帮助。