在从 csv 读取的表格标题下方添加一个 toprule,其中某些行是多列的

在从 csv 读取的表格标题下方添加一个 toprule,其中某些行是多列的

我使用来自 csv 的数据创建了一个表格,这样就可以自动检测 csv 中的多列行。为了做到这一点,我把所有的\\ 每行而不是每行之后,否则 ifthenelse 中的多列不起作用(参见csvsimple 放错了 \omit。当对整行使用多列时,\multispan

但是,我现在不知道如何在列名和表格的其余部分之间放置一条粗线。

这就是我所拥有的:

\documentclass[11pt]{article}
\usepackage{csvsimple}

\begin{filecontents}[overwrite]{data-mwe.csv}
    a,b
    c,d
    text,
    e,f
\end{filecontents}

\begin{document}

    \begin{tabular}{|l|l|}
        \hline
        column 1 & column 2
        \csvreader[no head]{data-mwe.csv}{}{%
            \ifthenelse{\equal{\csvcolii}{}}{
                \\ \hline \multicolumn{2}{|c|}{\csvcoli}
            }{%
                \\ \hline \csvcoli & \csvcolii
            }
        }
        \\ \hline
    \end{tabular}

\end{document}

在此处输入图片描述

本着第一行上的 Tabularx、csvsimple 和 multicol 导致 \omit 错误,这几乎就是我想要的(用双线模拟粗线),只不过在标题行之后当然有太多的空间:

\\ \hline \hline \multicolumn{1}{c}{}在标题行后添加结果

在此处输入图片描述

我想\csviffirstrow使用csvsimple 文档(第 12 页),但是当我{\\ \hline \csvcoli & \csvcolii}{\\ \csviffirstrow{\hline\hline}{\hline} \csvcoli & \csvcolii}这个替换时

在此处输入图片描述

不幸的是,第一个数据行并不总是相同的,否则我当然可以简单地对该行进行硬编码,并将 \toprule 放在其上方。

如果答案适用于 LaTeX 并且可以从 csv 中确定多列/无多列(因此在 LaTeX 文件中不是硬编码),那么建议完全不同的解决方案(也许是 LuaTeX?)的答案当然也是有效的。csv 格式不是固定的,我可以改变它。

答案1

环境{NiceTabular}为您提供了在构建表格后使用 Tikz 绘制规则的工具。因此,无需更改相关代码(甚至简化该代码)nicematrix即可绘制繁重的规则。\csvreader

\documentclass[11pt]{article}
\usepackage{csvsimple}
\usepackage{nicematrix,tikz}

\begin{filecontents}[overwrite]{data-mwe.csv}
    a,b
    c,d
    text,
    e,f
\end{filecontents}

\begin{document}

\begin{NiceTabular}{ll}[hvlines]
column 1 & column 2 
\csvreader[no head]{data-mwe.csv}{}{%
    \ifthenelse{\equal{\csvcolii}{}}{
        \\ \multicolumn{2}{c}{\csvcoli}
    }{%
        \\ \csvcoli & \csvcolii
    }
}
\CodeAfter \tikz \draw [very thick] (2-|1) -- (2-|3) ; 
\end{NiceTabular}

\end{document}

nicematrix因为使用 PGF/Tikz 节点,所以您需要多次编译。

上述代码的输出

答案2

看起来\csviffirstrowA可以这样。不要只把 放在\csviffirstrow周围\hline,而是把它放在整行周围(但要把它放在你的外部 内\ifthenelse):

\csviffirstrow{%
    \\ \hline \hline \multicolumn{2}{|c|}{\csvcoli}
}{%
    \\ \hline \multicolumn{2}{|c|}{\csvcoli}
}

要在第一行放置一条粗线,同时保持单元格的高度,请使用\specialrulebooktabs 包中的:

\specialrule{\heavyrulewidth}{0pt}{0pt}

其中是\heavyrulewidth的(默认)宽度\toprule

综合起来,

\begin{tabular}{|l|l|}
        \hline
        column 1 & column 2
        \csvreader[no head]{data-mwe.csv}{}{%
            \ifthenelse{\equal{\csvcolii}{}}{
                \csviffirstrow{%
                    \\ \specialrule{\heavyrulewidth}{0pt}{0pt} \multicolumn{2}{|c|}{\csvcoli}
                }{%
                    \\ \hline \multicolumn{2}{|c|}{\csvcoli}
                }
            }{%
                \csviffirstrow{%
                    \\ \specialrule{\heavyrulewidth}{0pt}{0pt} \csvcoli & \csvcolii
                }{%
                    \\ \hline \csvcoli & \csvcolii
                }
            }
        }
        \\ \hline
    \end{tabular}

在此处输入图片描述

相关内容