Размещение строк таблицы в случае переносов строк

Размещение строк таблицы в случае переносов строк

У меня есть таблица с тремя столбцами, включающими описание, короткую аббревиатуру и значение. Описание может быть очень длинной записью, поэтому я использую тип столбца p для автоматического переноса строк. Я использую longtable, потому что итоговая таблица будет занимать несколько страниц.

На данный момент я использую этот код

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

чтобы получить эту таблицу:

текущая версия

Как видите, если запись в первом столбце короткая, то легко выровнять последние два столбца. Но если текст в первом столбце разбит на несколько строк, то, естественно, в последних двух строках есть похожее, но теперь пустое пространство. Так что в этом примере я бы хотел «переместить» Entry l.2 и Value v.l2 на две «строки» вверх.

решение1

Вы можете использовать \multirowпакет multirowдля охвата ячейки на несколько строк, например:

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

Для переноса текста необходимо вручную задать ширину столбца – в примере она установлена ​​на .5\textwidth. Смотрите такжеэтот ответ на «Перенос текста в многострочных столбцах».

РЕДАКТИРОВАТЬ: Чтобы избежать ручной проверки строк, которые занимает ваш текст, вы можете использовать вложенные таблицы для последних двух столбцов вместо использования \multirow, например:

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

Думаю, я бы предпочел проверить дважды, поскольку я бы постарался по возможности избегать длинного текста в таблицах.

решение2

Вы также можете использовать пакет 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}

закладки

решение3

Так как все ваши столбцы p{some width}, вы можете использовать \newlineвнутри ячейки, и иметь меньше строк. В качестве альтернативы вы можете использовать пакет makecell, который позволяет переносить строки внутри ячеек:

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

введите описание изображения здесь

Связанный контент