
在花了一段時間優化我的第一個表格使其看起來可以接受之後,當我再次需要相同的東西時遇到了問題,但表格也覆蓋了多個頁面。我發現了\longtable
,但據我所知,我無法使用它,因為它與我的其他要求不相容。尋找答案的問題是我得到了每個問題的解決方案,但我無法將它們組合起來以滿足我的所有要求。
必需的:
- 使用 LuaLaTex (我必須使用 Times New Roman)
- 表格可以延伸到多個頁面
- 表格儲存格內的換行符
- 每個單元格中文字的垂直居中
- 表格的不同行必須是可區分的(您需要能夠分辨出單字屬於哪個表格行,即使它位於多行單元格中)
- 能夠引用表格的標籤
- 相容性
\begin{landscape} \end{landscape}
我非常欣賞的東西,但如果沒有的話我也可以忍受生活:
- 自動換行(
\linebreak
改為手動設定) - 自動調整列寬
- 單獨設定每列的水平對齊方式(一列左對齊,另一列居中,...)
- 沒有關於 underfull
\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}