Je crée un rapport dans LaTeX qui implique quelques tables. Je suis bloqué là-dessus car mes données de cellules dans le tableau dépassent la largeur de la page. Puis-je en quelque sorte envelopper le texte afin qu'il tombe dans la ligne suivante dans la même cellule du tableau?
Est-ce lié d'une certaine manière à la largeur de la table? Mais comme cela dépasse la largeur de la page, cela fera-t-il une différence?
Utilisez p {largeur} pour vos spécificateurs de colonne au lieu de l/r/c.
\begin{tabular}{|p{1cm}|p{3cm}|}
This text will be wrapped & Some more text \\
\end{tabular}
Avec l’environnement tabular
normal, vous souhaitez utiliser le type de colonne p{width}
, comme l’indique marcog. Mais cela vous oblige à donner des largeurs explicites.
Une autre solution est l'environnement tabularx
:
\usepackage{tabularx}
...
\begin{tabularx}{\linewidth}{ r X }
right-aligned foo & long long line of blah blah that will wrap when the table fills the column width\\
\end{tabularx}
Toutes les colonnes X ont la même largeur. Vous pouvez influencer ceci en définissant \hsize
dans la déclaration de format:
>{\setlength\hsize{.5\hsize}} X >{\setlength\hsize{1.5\hsize}} X
mais alors tous les facteurs doivent résumer à 1, je suppose (j'ai pris cela du compagnon LaTeX). Il y a aussi le paquetage tabulary
qui ajustera la largeur des colonnes pour équilibrer la hauteur des lignes. Pour plus de détails, vous pouvez obtenir la documentation de chaque paquet avec texdoc tabulary
(dans TeXlive).
Une autre option consiste à insérer une minipage dans chaque cellule où l’habillage de texte est souhaité, par exemple:
\begin{table}[H]
\begin{tabular}{l}
\begin{minipage}[t]{0.8\columnwidth}%
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line a very long line
a very long line a very long line a very long line %
\end{minipage}\tabularnewline
\end{tabular}
\end{table}
J'aime la simplicité du paquet tabulary
:
\usepackage{tabulary}
...
\begin{tabulary}{\linewidth}{LCL}
\hline
Short sentences & \# & Long sentences \\
\hline
This is short. & 173 & This is much loooooooonger, because there are many more words. \\
This is not shorter. & 317 & This is still loooooooonger, because there are many more words. \\
\hline
\end{tabulary}
Dans l'exemple, vous organisez toute la largeur de la table par rapport à\textwidth. Par exemple 0,4. Ensuite, le reste est automatiquement effectué par le package.
La plupart des exemples proviennent de http://en.wikibooks.org/wiki/LaTeX/Tables .
Simple comme un morceau de gâteau!
Vous pouvez définir un nouveau type de colonne, tel que (L
dans ce cas), tandis que en maintenant l'alignement actuel (c
, r
ou l
):
\documentclass{article}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}
\begin{document}
\begin{table}
\begin{tabular}{|c|L|L|}
\hline
Title 1 & Title 2 & Title 3 \\
\hline
one-liner & multi-line and centered & \multicolumn{1}{m{3cm}|}{multi-line piece of text to show case a multi-line and justified cell} \\
\hline
Apple & orange & banana \\
\hline
Apple & orange & banana \\
\hline
\end{tabular}
\end{table}
\end{document}
Si vous souhaitez envelopper votre texte tout en conservant l'alignement, vous pouvez envelopper cette cellule dans un environnement minipage
ou varwidth
(varwidth provient du package varwidth). Varwidth sera "aussi large que son contenu mais pas plus large que X". Vous pouvez créer un type de colonne personnalisé qui agit comme "p {xx}" mais se réduit à l’ajustement en utilisant
\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}
qui peut nécessiter le package array
. Ensuite, lorsque vous utilisez quelque chose comme \begin{tabular}{llM{2in}}
dans les deux premières colonnes, nous sommes normalement alignés à gauche et la troisième colonne est alignée à gauche, mais si elle est plus large que 2 pouces, le texte est alors renvoyé à la ligne.