![多行多列表格(一行半)](https://linux22.com/image/422136/%E5%A4%9A%E8%A1%8C%E5%A4%9A%E5%88%97%E8%A1%A8%E6%A0%BC%EF%BC%88%E4%B8%80%E8%A1%8C%E5%8D%8A%EF%BC%89.png)
我知道在表格标题中添加所有这些垂直线并不是好的印刷习惯。但我想创建一个替代现有文档的文档,其中包含这些行。我设法创建了表格标题,但垂直线除外:
\documentclass{scrarticle}
\usepackage{multirow}
%+----+------+--------------------------+---------------+
%| | | Generated by | Generated and |
%| No | Code +--------+-------+---------+ described on |
%| | | Master | Slave | Gateway | Layer |
%+----+------+--------+-------+---------+---------------+
\begin{document}
\begin{tabular}{|l|c|c|c|c|c|c|}
\hline
\multirow{3}{*}{No} &
\multirow{3}{2.4cm}{Code} &
\multicolumn{3}{|c|}{\multirow{2}{*}{Generated by }} &
\multirow{3}{2.5cm}{Generated and described on Layer}
\\
& & \multicolumn{3}{l}{} & \\ \cline{3-5}
& & Master & Slave & Gateway & \\
\hline\hline
a & b & c & d & e & f \\ \hline
\end{tabular}
\end{document}
LaTeX 源代码中的 ASCII 艺术展示了所需结果的想法。但第 5 列和第 6 列之间的垂直线并不完整。
我怎样才能画出这条线?
另一点是,第 3-5 列上的多列仅使用一行表示主/从/网关。\cline
上面的分隔符 ( ) 应该高出半行。这将需要类似 1.5 行的多行。如何使用 LaTeX 实现这一点?
答案1
使用\multicolumn{3}{l}{}
会覆盖垂直线,从而导致您看到小间隙。使用 重新添加该线\multicolumn{3}{l|}{}
。
\documentclass{scrarticle}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|l|c|c|c|c|c|}
\hline
\multirow{3}{*}{No} &
\multirow{3}{2.4cm}{Code} &
\multicolumn{3}{|c|}{\multirow{2}{*}{Generated by }} &
\multirow{3}{2.5cm}{Generated and described on Layer}
\\
& & \multicolumn{3}{l|}{} & \\ \cline{3-5}
& & Master & Slave & Gateway & \\
\hline\hline
a & b & c & d & e & f \\ \hline
\end{tabular}
\end{document}
关于问题第二部分的更新:在下面的示例中,我使用嵌套表格作为标题的“生成者”部分。通过这种方法,我摆脱了所有\multirow
命令。为了确保最后一列的标题占据三行,我使用了来自\makecell
包makecell
的类型,但您也可以在此处使用固定宽度的列类型。为了确保“生成者”下面的行最终更高,我使用了包cellspace
,通过反复试验确定了顶部和底部限制的必要量。最后,我结合使用了wc
来自包的类型列和来自包的类型列,以确保第 3 列到第 5 列的宽度与其对应的标题相同:array
\widthof
calc
\documentclass{scrarticle}
\usepackage{array}
\usepackage{calc}
\usepackage{makecell}
\usepackage[column=0]{cellspace}
\setlength{\cellspacetoplimit}{6pt}
\setlength{\cellspacebottomlimit}{\cellspacetoplimit}
\begin{document}
\begin{tabular}{|l|c|wc{\widthof{Master}}|wc{\widthof{Slave}}|wc{\widthof{Gateway}}|c|}
\hline
No &
Code &
\multicolumn{3}{@{}c@{}|}{\begin{tabular}{0c|0c|0c} \multicolumn{3}{0c}{Generated by} \\ \hline Master & Slave & Gateway \end{tabular} } &
\makecell[cl]{Generated and\\ described on\\ Layer} \\
\hline\hline
a & b & c & d & e & f \\ \hline
\end{tabular}
\end{document}