Tenho uma tabela com três colunas que incluem uma descrição, uma breve abreviatura e um valor. A descrição pode ser uma entrada muito longa, então uso o tipo de coluna p para quebrar as linhas automaticamente. Estou usando longtable porque a tabela final ocupará algumas páginas.
No momento, eu uso este código
\documentclass{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}cc}
\hline
Column 2 & Column 2 & Column 3\\
\hline
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\hline
here is a very long text in the first column that will be broken into multiple rows & Entry l.1 & Value v.l1 \\
& Entry l.2 & Value v.l2 \\
\hline
\end{longtable}
\end{document}
para obter esta tabela:
Como você pode ver, se a entrada na primeira coluna for curta, é fácil alinhar as duas últimas colunas. Mas se o texto na primeira coluna for dividido em várias linhas, naturalmente haverá um espaço semelhante, mas agora vazio, nas duas últimas linhas. Portanto, no exemplo, o que eu gostaria de fazer é "mover" a entrada l.2 e o valor v.l2 duas "linhas" para cima.
Responder1
Você pode usar \multirow
o multirow
pacote para abranger uma célula em várias linhas, por exemplo:
\documentclass{article}
\usepackage{longtable}
\usepackage{multirow}
\begin{document}
\begin{longtable}{p{0.5\textwidth}cc}
\hline
Column 2 & Column 2 & Column 3\\
\hline
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\hline
\multirow{2}{0.5\textwidth}{here is a very long text in the first column that will be broken into multiple rows} & Entry l.1 & Value v.l1 \\
& Entry l.2 & Value v.l2 \\
\\
\hline
\end{longtable}
\end{document}
Para quebra de texto, você precisa definir a largura da coluna manualmente – no exemplo, ela está definida como .5\textwidth
. Veja tambémesta resposta para "Quebra de texto em colunas multilinhas".
EDITAR:
Para evitar a verificação manual das linhas que seu texto abrange, você pode usar tabelas aninhadas para as duas últimas colunas em vez de usar \multirow
, por exemplo:
\documentclass{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}c}
\hline
Column 2 &\begin{tabular}{cc}Column 2 & Column 3\end{tabular}\\
\hline
short entry &\begin{tabular}{cc}
Entry s.1 & Value v.s1\\
Entry s.2 & Value v.s2
\end{tabular}\\
\hline
here is a very long text in the first column that will be broken into multiple rows &\begin{tabular}{cc}
Entry l.1 & Value v.l1 \\
Entry l.2 & Value v.l2
\end{tabular}\\
\hline
\end{longtable}
\end{document}
Acho que prefiro verificar duas vezes porque tentaria evitar textos longos nas tabelas, se possível.
Responder2
Você também pode usar o pacote booktabs.
\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\begin{document}
\begin{longtable}{p{0.5\textwidth}p{3cm} p{3cm}}
\toprule
Column 1 & Column 2 & Column 3\\
\midrule
short entry & Entry s.1 & Value v.s1\\
& Entry s.2 & Value v.s2 \\
\midrule
There is a very long text in the & Entry l.1 & Value v.l1 \\
first column that will be broken &Entry 1.2 & Value v.12\\
into multi rows&&\\
\bottomrule
\end{longtable}
\end{document}
Responder3
Como todas as suas colunas são p{some width}
, você pode usar \newline
dentro de uma célula e ter menos linhas. Alternativamente, você pode usar o makecell
pacote, que permite quebras de linha dentro das células:
\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{makecell}
\renewcommand\cellalign{lt}
\begin{document}
\begin{longtable}{p{0.5\textwidth}p{3cm} p{3cm}}
\toprule
Column 1 & Column 2 & Column 3 \\
\midrule
short entry & Entry s.1 & Value v.s1 \\
& Entry s.2 & Value v.s2 \\
\midrule
There is a very long text in the first column that will be broken into multi rows & \makecell{Entry l.1 & \\Entry 1.2} & \makecell{Value v.l1\\Value v.12} \\
\addlinespace
There is a very long text in the first column that will be broken into multi rows & Entry l.1\newline Entry 1.2 & Value v.l1\newline Value v.12 \\
\bottomrule
\end{longtable}
\end{document}