web-dev-qa-db-fra.com

Comment insérer du texte dans les tableaux LaTeX?

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?

399
Arnkrishn

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}
455
marcog

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).

134
Damien Pollet

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}
45
Neil Rubens

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 .

35
ozi

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}

enter image description here

8
Shayan Amani

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.

5
cheshirekow