
Después de haber pasado un tiempo optimizando mi primera tabla para que pareciera aceptable, me encontré con un problema cuando necesitaba lo mismo nuevamente, pero la tabla también cubría varias páginas. Descubrí \longtable
, pero no puedo usarlo porque, hasta donde yo sé, es incompatible con mis otros requisitos. El problema al buscar respuestas es que obtengo soluciones para cada problema, pero no puedo combinarlas para cubrir todos mis requisitos.
requerido:
- usa LuaLaTex (tengo que usar Times New Roman)
- la tabla puede abarcar varias páginas
- saltos de línea dentro de las celdas de la tabla
- centrado vertical del texto en cada celda
- las diferentes filas de la tabla deben poder distinguirse (debe poder saber a qué fila de la tabla pertenece una palabra, incluso si está en una celda con varias líneas)
- una etiqueta para poder hacer referencia a la tabla
- compatibilidad con
\begin{landscape} \end{landscape}
cosas que apreciaría mucho, pero que podría soportar vivir sin ellas si no fuera posible de otra manera:
- salto de línea automático (configuración
\linebreak
manual en su lugar) - anchos de columna autoajustables
- configuración individual de las alineaciones horizontales para cada columna (una columna justificada a la izquierda, la otra centrada,...)
- sin advertencias sobre underfull
\hbox
-es
En el siguiente ejemplo de código, analizo la evolución de mis tablas para mostrarles algunos de los problemas que encontré y cómo los resolví. Encontré una solución con la que estaba muy satisfecho, pero es incompatible con \longtable
. Esto anula todos los avances que he hecho en términos de saltos de línea dentro de las celdas, centrado vertical y, en general, producir una tabla respetable.
¡Muchas gracias por sus respuestas de antemano!
Aquí está el ejemplo de código:
\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}
Respuesta1
No dijiste lo que hiciste, longtable
pero presumiblemente hiciste algo mal. Si entro, longtable
parece funcionar bien.
\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}