
最初のテーブルが適切に見えるよう最適化するのにしばらく時間を費やした後、同じものを再度必要としたときに、テーブルが複数のページにまたがるという問題が発生しました。 について知りました\longtable
が、私の知る限り、他の要件と互換性がないため、使用できません。回答を調べる際の問題は、個々の問題に対する解決策は得られますが、それらを組み合わせてすべての要件をカバーすることはできないことです。
必須:
- LuaLaTex を使用します (Times New Roman を使用する必要があります)
- 表は複数ページにまたがることがある
- 表のセル内の改行
- 各セル内のテキストの垂直方向の中央揃え
- 表の異なる行は区別できる必要があります (複数行のセルにある場合でも、単語がどの表の行に属しているかを判断できる必要があります)
- テーブルを参照するためのラベル
- 互換性
\begin{landscape} \end{landscape}
非常にありがたいが、そうでなければなくても生きていける物:
- 自動改行(
\linebreak
代わりに手動で設定) - 自動調整列幅
- 各列の水平方向の配置を個別に設定 (1 つの列は左揃え、もう 1 つの列は中央揃え、...)
\hbox
不足についての警告なし
以下のコード例では、私が遭遇した問題とその解決方法を示すために、テーブルの進化について説明します。私は非常に満足のいく解決策を見つけましたが、それは と互換性がありません。\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}