Multirow e multicolumn tabular para (uma e uma) meia linha

Oct 11 2020

Eu sei que não é uma boa prática tipográfica adicionar todas essas linhas verticais à cabeça de uma mesa. Mas eu gostaria de criar um substituto para um documento existente e ele contém essas linhas. Consegui criar a cabeça tabular exceto na linha vertical:

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

A arte ASCII na fonte LaTeX mostra a ideia do resultado desejado. Mas a linha vertical entre a coluna 5 e a coluna 6 não está completa.

Como posso traçar essa linha?

Outro ponto é que as colunas múltiplas sobre as colunas 3-5 usam apenas uma linha para Mestre / Escravo / Gateway. O separador ( \cline) acima deve ser meia linha acima. Isso exigiria algo como uma linha múltipla de 1,5 linhas. Como isso pode ser implementado com o LaTeX?

Respostas

2 leandriis Oct 11 2020 at 00:57

O uso de \multicolumn{3}{l}{}substitui as linhas verticais, resultando no pequeno intervalo que você vê. Adicione a linha de volta usando \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}

Atualização sobre a segunda parte da pergunta: No exemplo a seguir, usei uma tabela aninhada para a parte "Gerado por" do cabeçalho. Com essa abordagem, me livrei de todos os \multirowcomandos. Para ter certeza, o cabeçalho da última coluna ocupa três linhas, eu usei \makecelldo makecellpacote, mas você também pode usar um tipo de coluna de largura fixa aqui. Para ter certeza, a linha abaixo de "Gerado por" fica mais alta, usei o cellspacepacote, a quantidade necessária de limite superior e inferior foi determinada por tentativa e erro. Por último, usei wccolunas de tipo do arraypacote em combinação com \widthofdo calcpacote para garantir que as colunas 3 a 5 tenham a mesma largura que seus cabeçalhos correspondentes:

\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}
SimonDispa Oct 11 2020 at 01:13

Tente este código (\ usepackage {bigstrut})

\begin{tabular}{|l|c|c|c|c|c|}
    \hline
    \multirow{2}[4]{*}{No}
    & \multirow{2}[4]{*}{Code}
    & \multicolumn{3}{c|}{\multirow{2}[4]{*}{Generated by}} 
    & \multicolumn{1}{p{2.5cm}|}{Generated and described on Layer} 
    \bigstrut\\
    \hline
    \hline
    &       & Master & Slave & Gateway &  \bigstrut\\
    \hline
    a     & b     & c     & d     & e     & f \bigstrut\\
    \hline
\end{tabular}%