多行多列表格(一行半)

多行多列表格(一行半)

我知道在表格标题中添加所有这些垂直线并不是好的印刷习惯。但我想创建一个替代现有文档的文档,其中包含这些行。我设法创建了表格标题,但垂直线除外:

\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命令。为了确保最后一列的标题占据三行,我使用了来自\makecellmakecell的类型,但您也可以在此处使用固定宽度的列类型。为了确保“生成者”下面的行最终更高,我使用了包cellspace,通过反复试验确定了顶部和底部限制的必要量。最后,我结合使用了wc来自包的类型列和来自包的类型列,以确保第 3 列到第 5 列的宽度与其对应的标题相同:array\widthofcalc

在此处输入图片描述

\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}

相关内容