![表格问题:垂直居中的单元格内的换行符和跨多页的表格](https://linux22.com/image/344379/%E8%A1%A8%E6%A0%BC%E9%97%AE%E9%A2%98%EF%BC%9A%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD%E7%9A%84%E5%8D%95%E5%85%83%E6%A0%BC%E5%86%85%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%92%8C%E8%B7%A8%E5%A4%9A%E9%A1%B5%E7%9A%84%E8%A1%A8%E6%A0%BC.png)
在花了一段时间优化我的第一个表格以使其看起来可接受之后,我遇到了一个问题,当我再次需要同样的东西时,但表格也覆盖了多个页面。我找到了\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}