Posicionamento de linha da tabela em caso de quebras de linha

Posicionamento de linha da tabela em caso de quebras de linha

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:

Versão Atual

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

guias de livros

Responder3

Como todas as suas colunas são p{some width}, você pode usar \newlinedentro de uma célula e ter menos linhas. Alternativamente, você pode usar o makecellpacote, 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} 

insira a descrição da imagem aqui

informação relacionada