我使用来自 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
看起来\csviffirstrow
像A可以这样。不要只把 放在\csviffirstrow
周围\hline
,而是把它放在整行周围(但要把它放在你的外部 内\ifthenelse
):
\csviffirstrow{%
\\ \hline \hline \multicolumn{2}{|c|}{\csvcoli}
}{%
\\ \hline \multicolumn{2}{|c|}{\csvcoli}
}
要在第一行放置一条粗线,同时保持单元格的高度,请使用\specialrule
booktabs 包中的:
\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}