У меня есть таблица с тремя столбцами, включающими описание, короткую аббревиатуру и значение. Описание может быть очень длинной записью, поэтому я использую тип столбца 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}