根据数组长度和保留顺序将表格单元格拆分为多行

根据数组长度和保留顺序将表格单元格拆分为多行

我正在读取一个 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。但是,由于您的问题不够清楚(例如,字段是否始终是上面的三个?),因此,稍微澄清一下会有所帮助。

在此处输入图片描述

相关内容