
Потратив некоторое время на оптимизацию своей первой таблицы, чтобы она выглядела приемлемо, я столкнулся с проблемой, когда мне снова понадобилось то же самое, но с таблицей, охватывающей несколько страниц. Я узнал о \longtable
, но я не могу использовать его, поскольку он несовместим с моими другими требованиями, насколько я могу судить. Проблема с поиском ответов заключается в том, что я получаю решения для каждой отдельной проблемы, но я не могу объединить их, чтобы удовлетворить все мои требования.
необходимый:
- использует LuaLaTex (мне приходится использовать Times New Roman)
- таблица может растягиваться на несколько страниц
- переносы строк в ячейках таблицы
- вертикальное центрирование текста в каждой ячейке
- разные строки таблицы должны быть различимы (вы должны иметь возможность определить, к какой строке таблицы относится слово, даже если оно находится в ячейке с несколькими строками)
- метка, позволяющая ссылаться на таблицу
- совместимость с
\begin{landscape} \end{landscape}
вещи, которые я бы высоко оценил, но без которых я мог бы обойтись, если бы это было невозможно:
- автоматический разрыв строки (
\linebreak
вместо этого можно задать вручную) - саморегулирующаяся ширина столбцов
- индивидуальная настройка горизонтального выравнивания для каждого столбца (один столбец по левому краю, другой по центру,...)
- нет предупреждений о недозаполненных
\hbox
-es
В примере кода ниже я прохожу эволюцию моих таблиц, чтобы показать вам некоторые проблемы, с которыми я столкнулся, и как я их решил. Я нашел решение, которым я был очень доволен, но оно несовместимо с \longtable
. Это сводит на нет все мои достижения в плане переносов строк внутри ячеек, вертикального центрирования и в целом создания приличной таблицы.
Заранее большое спасибо за ваши ответы!
Вот пример кода:
\documentclass[a4paper,11pt]{report}
% preamble
% general: margins, font, spacing
\usepackage[twoside,margin=2.5cm,bindingoffset=1.25cm]{geometry}
\usepackage{fontspec} % for times new roman
\setmainfont{Times New Roman}
\usepackage{setspace} % for 1.5 line spacing
% references to papers, figures, tables, ...
% \usepackage[style=IEEE,backend=biber]{biblatex}
% \addbibresource{library.bib}
\usepackage{refstyle} % for figure references
\usepackage{tabulary} % for easier handling of multiline entries in tables
\usepackage{array,booktabs} % http://ctan.org/pkg/
\usepackage{longtable} % for multi-page tables
\usepackage{lscape} % for horizontal tables
\begin{document}
\begin{onehalfspace} % line spacing
The following table is pretty bad. One entry/row is hard to distinguish from the other. Also, it produces four warnings for underfull hboxes. Everything is aligned to the left, which is not good, but there might be a solution for this which I didn't bother to look up due to the other problems.
\medskip
\begin{tabular}{p{7.5cm}p{2cm}p{3cm}}
\hline
\textbf{word} & \textbf{word} & \textbf{some text} \\ \hline
some even longer text, it \linebreak starts to get uncomfortable & some \linebreak more text & word \\
some text that is so long that it will have \linebreak to cover multiple lines no matter what & some \linebreak text & word \\
%\label{table:thefirstfailedattempt}
\end{tabular}
\bigskip
\bigskip
The following example is better, at least it doesn't generate warnings, decides where to include line breaks within cells and self-adjusts the width of each column. Moreover, it is easy to define the alignment for each column separately, which is something I appreciate. But the vertical centering is missing. This is not acceptable to me.
\medskip
\begin{tabulary}{14cm}{CCC} % good except for missing vertical centering
\hline
\textbf{word} & \textbf{word} & \textbf{some text} \\ \hline
some even longer text, it starts to get uncomfortable & some more text & word \\
some text that is so long that it will have to cover multiple lines no matter what & some text & word \\
%\label{table:thesecondfailedattempt}
\end{tabulary}
\bigskip
\bigskip
With this solution (Table\,\ref{table:solutionfound}) I was very happy. Distinguishable rows, vertical alignment, table-label and a nice format as the cherry on top. This is what I was looking for.
% http://tex.stackexchange.com/questions/127050/vertically-align-text-in-table-in-latex
\medskip
\begin{table}[htbp]
\centering
%\caption{Data Units, Sources, and Dates}
\renewcommand{\arraystretch}{1.5}% Spread rows out...
\begin{tabular}{>{\centering}m{7.5cm} >{\centering}m{2cm} >{\centering\arraybackslash}m{3cm}}
\toprule
\textbf{word} & \textbf{word} & \textbf{some text} \\
\midrule
some even longer text, it starts to get uncomfortable & some more text & word \\
some text that is so long that it will have \linebreak to cover multiple lines no matter what & some text & word \\
\bottomrule
\end{tabular}
\caption[The table I was happy with]{\textbf{The table I was happy with.} Some longer text describing the table. Some longer text describing the table. Some longer text describing the table. Some longer text describing the table.
\label{table:solutionfound}}
\end{table}
\bigskip
\bigskip
But then I reached the next table (Table\,\ref{table:thetablethatistoolong}), which is quite the monster. I had to switch to landscape to fit all the columns in, but I quickly found a solution that worked. However, it is too long and stretches over multiple pages. By looking up other stackexchange answers I found out that longtable is the solution for this. But my previous solution is not compatible with longtable, which nullifies all the advances I have made in terms of linebreaks within cells, vertical centering and generally producing a respectable table.
I could split this table into three separate tables (defined by the second column), but the third table (second column is 'bar') would still be too long for one page.
\begin{landscape}
\begin{table}[htbp] % doesn't work with longtable
\centering
%\caption{Data Units, Sources, and Dates}
\renewcommand{\arraystretch}{1.5}% Spread rows out...
\begin{tabular}{>{\centering}m{2cm} >{\centering}m{2cm} >{\centering}m{2cm} >{\centering}m{5cm} >{\centering}m{3cm} >{\centering}m{2cm} >{\centering}m{2cm} >{\centering\arraybackslash}m{3cm}}
\toprule
\textbf{some ID} & \textbf{a property} & \textbf{another column} & \textbf{column containing much text} & \textbf{more text} & \textbf{further specification of foo} & \textbf{further specification of bar} & \textbf{final comment} \\
\midrule
B01 & foo & word & some middle-length text & some text & some text & & some middle-length text \\
B02 & foo & word & some even longer text, it starts to get uncomfortable & word & word & & some text \\
B04 & foo & word & some text with a bit more length & word & word & & some text \\
B05 & foo & word & some text with a bit more length & some text & word & & some text \\
B06 & foo & word & some middle-length text & some text & some text & & some text \\
B08 & foo & word & some text with a bit more length & some text & some text & & some text with a bit more length \\
B10 & foo & word & some middle-length text & some text & some text & & some text \\
B11 & foo & word & some text with a bit more length & some text & word & & word \\
B12 & foo & word & some middle-length text & some text & word & & some text \\
B13 & foo & word & some middle-length text & some text & some text & & some text \\
B15 & foo & word & some even longer text, it starts to get uncomfortable & some text & some text & & some text \\
B16 & foo & word & some text that is so long that it will have to cover multiple lines no matter what & some text & some text & & some text \\
B17 & foo & word & some even longer text, it starts to get uncomfortable & word & some text & & some text \\
B18 & foo & word & some even longer text, it starts to get uncomfortable & word & some text & & some text \\
B19 & foo & word & some text that is so long that it will have to cover multiple lines no matter what & word & word & & some text \\
B21 & foo & word & some text with a bit more length & some text & some text & & word \\
B23 & foo & word & some text with a bit more length & some text & word & & some text \\
B25 & foo & word & some middle-length text & some text & some text & & some text \\
B27 & foo & word & some middle-length text & some text & word & & some text \\
B29 & foo & word & some text with a bit more length & some text & word & & some text \\
B30 & foo & word & some even longer text, it starts to get uncomfortable & some text & word & & some text \\
B32 & foo & word & some text with a bit more length & some text & word & & some text \\
B34 & foo & word & some middle-length text & some text & word & & word \\
B35 & foo & word & some text with a bit more length & some text & some text & & word \\
B39 & foo & word & some middle-length text & some text & some text & & word \\
B41 & foo & word & some even longer text, it starts to get uncomfortable & some text & some text & & word \\
B42 & foo & word & some text with a bit more length & word & word & & word \\
B45 & foo & word & some text with a bit more length & word & some text & & word \\
B04 & foo+bar & word & some middle-length text & some text & word & some text & some text \\
B14 & foo+bar & word & some middle-length text & some text & some text & word & some text \\
B20 & foo+bar & word & some middle-length text & word & some text & some text & word \\
B24 & foo+bar & word & some middle-length text & word & some middle-length text & word & some text \\
B26 & foo+bar & word & some text with a bit more length & some text & some middle-length text & some text & word \\
B28 & foo+bar & word & some even longer text, it starts to get uncomfortable & word & some text & word & word \\
B31 & foo+bar & word & some even longer text, it starts to get uncomfortable & some text & word & some text & word \\
B33 & foo+bar & word & some text with a bit more length & some text & some middle-length text & word & word \\
B40 & foo+bar & word & some text with a bit more length & word & some text & some text & word \\
B44 & foo+bar & word & some text with a bit more length & word & some middle-length text & some text & word \\
B46 & foo+bar & word & some middle-length text & some text & word & word & word \\
B48 & foo+bar & word & some middle-length text & word & some middle-length text & some text & some text \\
D01 & foo+bar & word & some even longer text, it starts to get uncomfortable & word & some middle-length text & some text & word \\
D05 & foo+bar & word & some middle-length text & some text & some text with a bit more length & word & infiltrated \\
D09 & foo+bar & word & some even longer text, it starts to get uncomfortable & some text & some text with a bit more length & word & infiltrated \\
D22 & foo+bar & word & some text with a bit more length & some text & some text with a bit more length & some text & some text \\
D31 & foo+bar & word & some text with a bit more length & some text & some text with a bit more length & some text & some text \\
D02 & bar & word & some text with a bit more length & some text & & word & word \\
D03 & bar & word & some text with a bit more length & word & & some text & some text \\
D04 & bar & word & some text with a bit more length & some text & & some text & some text \\
D06 & bar & word & some even longer text, it starts to get uncomfortable & word & & some text & some text \\
D07 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & some text \\
D08 & bar & word & some even longer text, it starts to get uncomfortable & some text & & some text & some text \\
D10 & bar & word & some even longer text, it starts to get uncomfortable & some text & & some text & some text \\
D11 & bar & word & some text with a bit more length & some text & & some text & some text \\
D12 & bar & word & some even longer text, it starts to get uncomfortable & word & & word & some text \\
D13 & bar & word & some text that is so long that it will have to cover multiple lines no matter what & word & & some text & word \\
D14 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D15 & bar & word & some middle-length text & word & & some text & word \\
D16 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D17 & bar & word & some text with a bit more length & some text & & some text & some text \\
D18 & bar & word & some text with a bit more length & some text & & some text & some text \\
D19 & bar & word & some text with a bit more length & some text & & word & word \\
D20 & bar & word & some text with a bit more length & word & & word & infiltrated \\
D21 & bar & word & some text with a bit more length & some text & & some text & some text \\
D23 & bar & word & some middle-length text & word & & some text & some text \\
D24 & bar & word & some text with a bit more length & some text & & some text & word \\
D25 & bar & word & some middle-length text & some text & & some text & word \\
D26 & bar & word & some text with a bit more length & some text & & word & word \\
D27 & bar & word & some text with a bit more length & word & & some text & word \\
D28 & bar & word & some text with a bit more length & some text & & word & word \\
D29 & bar & word & some text with a bit more length & some text & & word & word \\
D32 & bar & word & some text with a bit more length & some text & & word & word \\
D33 & bar & word & some middle-length text & word & & word & word \\
D34 & bar & word & some middle-length text & word & & some text & word \\
D35 & bar & word & some middle-length text & some text & & some text & word \\
D38 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D39 & bar & word & some text with a bit more length & word & & some text & word \\
D40 & bar & word & some text with a bit more length & some text & & word & word \\
D42 & bar & word & some text with a bit more length & word & & word & word \\
D43 & bar & word & some text with a bit more length & some text & & some text & word \\
D44 & bar & word & some text with a bit more length & some text & & some text & word \\
D45 & bar & word & some text with a bit more length & some text & & some text & word \\
D46 & bar & word & some text with a bit more length & some text & & word & word \\
\bottomrule
\end{tabular}
\caption[This table is too long]{\textbf{This table is too long, you won't even see this.} Some longer text describing the table. Some longer text describing the table. Some longer text describing the table. Some longer text describing the table.
\label{table:thetablethatistoolong}}
\end{table}
\end{landscape}
\end{onehalfspace} % line spacing
\end{document}
решение1
Вы не сказали, что именно вы сделали, longtable
но, по-видимому, вы сделали что-то неправильно. Если я включаю его, longtable
то, кажется, все работает нормально.
\documentclass[a4paper,11pt]{report}
% preamble
% general: margins, font, spacing
\usepackage[twoside,margin=2.5cm,bindingoffset=1.25cm]{geometry}
\usepackage{fontspec} % for times new roman
\setmainfont{Times New Roman}
\usepackage{setspace} % for 1.5 line spacing
% references to papers, figures, tables, ...
% \usepackage[style=IEEE,backend=biber]{biblatex}
% \addbibresource{library.bib}
\usepackage{refstyle} % for figure references
\usepackage{tabulary} % for easier handling of multiline entries in tables
\usepackage{array,booktabs} % http://ctan.org/pkg/
\usepackage{longtable} % for multi-page tables
\usepackage{lscape} % for horizontal tables
\begin{document}
\begin{onehalfspace} % line spacing
The following table is pretty bad. One entry/row is hard to distinguish from the other. Also, it produces four warnings for underfull hboxes. Everything is aligned to the left, which is not good, but there might be a solution for this which I didn't bother to look up due to the other problems.
\medskip
\begin{tabular}{p{7.5cm}p{2cm}p{3cm}}
\hline
\textbf{word} & \textbf{word} & \textbf{some text} \\ \hline
some even longer text, it \linebreak starts to get uncomfortable & some \linebreak more text & word \\
some text that is so long that it will have \linebreak to cover multiple lines no matter what & some \linebreak text & word \\
%\label{table:thefirstfailedattempt}
\end{tabular}
\bigskip
\bigskip
The following example is better, at least it doesn't generate warnings, decides where to include line breaks within cells and self-adjusts the width of each column. Moreover, it is easy to define the alignment for each column separately, which is something I appreciate. But the vertical centering is missing. This is not acceptable to me.
\medskip
\begin{tabulary}{14cm}{CCC} % good except for missing vertical centering
\hline
\textbf{word} & \textbf{word} & \textbf{some text} \\ \hline
some even longer text, it starts to get uncomfortable & some more text & word \\
some text that is so long that it will have to cover multiple lines no matter what & some text & word \\
%\label{table:thesecondfailedattempt}
\end{tabulary}
\bigskip
\bigskip
With this solution (Table\,\ref{table:solutionfound}) I was very happy. Distinguishable rows, vertical alignment, table-label and a nice format as the cherry on top. This is what I was looking for.
% http://tex.stackexchange.com/questions/127050/vertically-align-text-in-table-in-latex
\medskip
\begin{table}[htbp]
\centering
%\caption{Data Units, Sources, and Dates}
\renewcommand{\arraystretch}{1.5}% Spread rows out...
\begin{tabular}{>{\centering}m{7.5cm} >{\centering}m{2cm} >{\centering\arraybackslash}m{3cm}}
\toprule
\textbf{word} & \textbf{word} & \textbf{some text} \\
\midrule
some even longer text, it starts to get uncomfortable & some more text & word \\
some text that is so long that it will have \linebreak to cover multiple lines no matter what & some text & word \\
\bottomrule
\end{tabular}
\caption[The table I was happy with]{\textbf{The table I was happy with.} Some longer text describing the table. Some longer text describing the table. Some longer text describing the table. Some longer text describing the table.
\label{table:solutionfound}}
\end{table}
\bigskip
\bigskip
But then I reached the next table (Table\,\ref{table:thetablethatistoolong}), which is quite the monster. I had to switch to landscape to fit all the columns in, but I quickly found a solution that worked. However, it is too long and stretches over multiple pages. By looking up other stackexchange answers I found out that longtable is the solution for this. But my previous solution is not compatible with longtable, which nullifies all the advances I have made in terms of linebreaks within cells, vertical centering and generally producing a respectable table.
I could split this table into three separate tables (defined by the second column), but the third table (second column is 'bar') would still be too long for one page.
\begin{landscape}
\renewcommand{\arraystretch}{1.5}% Spread rows out...
\begin{longtable}
{>{\centering}m{2cm} >{\centering}m{2cm} >{\centering}m{2cm} >{\centering}m{5cm} >{\centering}m{3cm} >{\centering}m{2cm} >{\centering}m{2cm} >{\centering\arraybackslash}m{3cm}}
\toprule
\textbf{some ID} & \textbf{a property} & \textbf{another column} & \textbf{column containing much text} & \textbf{more text} & \textbf{further specification of foo} & \textbf{further specification of bar} & \textbf{final comment} \\
\midrule
B01 & foo & word & some middle-length text & some text & some text & & some middle-length text \\
B02 & foo & word & some even longer text, it starts to get uncomfortable & word & word & & some text \\
B04 & foo & word & some text with a bit more length & word & word & & some text \\
B05 & foo & word & some text with a bit more length & some text & word & & some text \\
B06 & foo & word & some middle-length text & some text & some text & & some text \\
B08 & foo & word & some text with a bit more length & some text & some text & & some text with a bit more length \\
B10 & foo & word & some middle-length text & some text & some text & & some text \\
B11 & foo & word & some text with a bit more length & some text & word & & word \\
B12 & foo & word & some middle-length text & some text & word & & some text \\
B13 & foo & word & some middle-length text & some text & some text & & some text \\
B15 & foo & word & some even longer text, it starts to get uncomfortable & some text & some text & & some text \\
B16 & foo & word & some text that is so long that it will have to cover multiple lines no matter what & some text & some text & & some text \\
B17 & foo & word & some even longer text, it starts to get uncomfortable & word & some text & & some text \\
B18 & foo & word & some even longer text, it starts to get uncomfortable & word & some text & & some text \\
B19 & foo & word & some text that is so long that it will have to cover multiple lines no matter what & word & word & & some text \\
B21 & foo & word & some text with a bit more length & some text & some text & & word \\
B23 & foo & word & some text with a bit more length & some text & word & & some text \\
B25 & foo & word & some middle-length text & some text & some text & & some text \\
B27 & foo & word & some middle-length text & some text & word & & some text \\
B29 & foo & word & some text with a bit more length & some text & word & & some text \\
B30 & foo & word & some even longer text, it starts to get uncomfortable & some text & word & & some text \\
B32 & foo & word & some text with a bit more length & some text & word & & some text \\
B34 & foo & word & some middle-length text & some text & word & & word \\
B35 & foo & word & some text with a bit more length & some text & some text & & word \\
B39 & foo & word & some middle-length text & some text & some text & & word \\
B41 & foo & word & some even longer text, it starts to get uncomfortable & some text & some text & & word \\
B42 & foo & word & some text with a bit more length & word & word & & word \\
B45 & foo & word & some text with a bit more length & word & some text & & word \\
B04 & foo+bar & word & some middle-length text & some text & word & some text & some text \\
B14 & foo+bar & word & some middle-length text & some text & some text & word & some text \\
B20 & foo+bar & word & some middle-length text & word & some text & some text & word \\
B24 & foo+bar & word & some middle-length text & word & some middle-length text & word & some text \\
B26 & foo+bar & word & some text with a bit more length & some text & some middle-length text & some text & word \\
B28 & foo+bar & word & some even longer text, it starts to get uncomfortable & word & some text & word & word \\
B31 & foo+bar & word & some even longer text, it starts to get uncomfortable & some text & word & some text & word \\
B33 & foo+bar & word & some text with a bit more length & some text & some middle-length text & word & word \\
B40 & foo+bar & word & some text with a bit more length & word & some text & some text & word \\
B44 & foo+bar & word & some text with a bit more length & word & some middle-length text & some text & word \\
B46 & foo+bar & word & some middle-length text & some text & word & word & word \\
B48 & foo+bar & word & some middle-length text & word & some middle-length text & some text & some text \\
D01 & foo+bar & word & some even longer text, it starts to get uncomfortable & word & some middle-length text & some text & word \\
D05 & foo+bar & word & some middle-length text & some text & some text with a bit more length & word & infiltrated \\
D09 & foo+bar & word & some even longer text, it starts to get uncomfortable & some text & some text with a bit more length & word & infiltrated \\
D22 & foo+bar & word & some text with a bit more length & some text & some text with a bit more length & some text & some text \\
D31 & foo+bar & word & some text with a bit more length & some text & some text with a bit more length & some text & some text \\
D02 & bar & word & some text with a bit more length & some text & & word & word \\
D03 & bar & word & some text with a bit more length & word & & some text & some text \\
D04 & bar & word & some text with a bit more length & some text & & some text & some text \\
D06 & bar & word & some even longer text, it starts to get uncomfortable & word & & some text & some text \\
D07 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & some text \\
D08 & bar & word & some even longer text, it starts to get uncomfortable & some text & & some text & some text \\
D10 & bar & word & some even longer text, it starts to get uncomfortable & some text & & some text & some text \\
D11 & bar & word & some text with a bit more length & some text & & some text & some text \\
D12 & bar & word & some even longer text, it starts to get uncomfortable & word & & word & some text \\
D13 & bar & word & some text that is so long that it will have to cover multiple lines no matter what & word & & some text & word \\
D14 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D15 & bar & word & some middle-length text & word & & some text & word \\
D16 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D17 & bar & word & some text with a bit more length & some text & & some text & some text \\
D18 & bar & word & some text with a bit more length & some text & & some text & some text \\
D19 & bar & word & some text with a bit more length & some text & & word & word \\
D20 & bar & word & some text with a bit more length & word & & word & infiltrated \\
D21 & bar & word & some text with a bit more length & some text & & some text & some text \\
D23 & bar & word & some middle-length text & word & & some text & some text \\
D24 & bar & word & some text with a bit more length & some text & & some text & word \\
D25 & bar & word & some middle-length text & some text & & some text & word \\
D26 & bar & word & some text with a bit more length & some text & & word & word \\
D27 & bar & word & some text with a bit more length & word & & some text & word \\
D28 & bar & word & some text with a bit more length & some text & & word & word \\
D29 & bar & word & some text with a bit more length & some text & & word & word \\
D32 & bar & word & some text with a bit more length & some text & & word & word \\
D33 & bar & word & some middle-length text & word & & word & word \\
D34 & bar & word & some middle-length text & word & & some text & word \\
D35 & bar & word & some middle-length text & some text & & some text & word \\
D38 & bar & word & some even longer text, it starts to get uncomfortable & some text & & word & word \\
D39 & bar & word & some text with a bit more length & word & & some text & word \\
D40 & bar & word & some text with a bit more length & some text & & word & word \\
D42 & bar & word & some text with a bit more length & word & & word & word \\
D43 & bar & word & some text with a bit more length & some text & & some text & word \\
D44 & bar & word & some text with a bit more length & some text & & some text & word \\
D45 & bar & word & some text with a bit more length & some text & & some text & word \\
D46 & bar & word & some text with a bit more length & some text & & word & word \\
\bottomrule
\caption[This table is too long]{\textbf{This table is too long, you won't even see this.} Some longer text describing the table. Some longer text describing the table. Some longer text describing the table. Some longer text describing the table.
\label{table:thetablethatistoolong}}
\end{longtable}
\end{landscape}
\end{onehalfspace} % line spacing
\end{document}