Multirow e multicolumn tabular para (uma e uma) meia linha
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
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}
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}%