2009-04-26 13 views
317

Je crée un rapport dans LaTeX qui implique quelques tables. Je suis bloqué sur cela que mes données de cellule dans le tableau dépasse 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 de la table?Comment faire du texte dans des tableaux LaTeX?

Est-ce lié à la largeur de la table? Mais comme il dépasse la largeur de la page, cela ne fera pas de différence, n'est-ce pas?

Répondre

344

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} 
+23

Bonne solution, mais perdez le '|' si vous ne voulez pas de bordure autour de la table. Il deviendrait alors '\ begin {tabulaire} {p {1cm} p {3cm}}' – Andrejas

+62

Y at-il un moyen de le faire tout en spécifiant l'alignement dans chaque cellule? –

+5

J'ai trouvé un moyen de spécifier l'alignement dans chaque cellule! Créer une macro! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {tableau *} [t] % \ small \ caption {Comparaison} \ centrage % \ begin {tableau} {| L | L | L | L | L | L | L | L | L | L | L | L | L |} – Veridian

115

Avec l'environnement tabular régulier, vous voulez utiliser le type de colonne p{width}, comme marcog indique. 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 obtiennent la même largeur. Vous pouvez influencer en fixant \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 (je pris ce compagnon du LaTeX). Il y a aussi le paquet tabulary qui ajustera les largeurs des colonnes pour équilibrer les hauteurs des rangées. Pour les détails, vous pouvez obtenir la documentation pour chaque paquet avec texdoc tabulary (dans TeXlive).

+3

Intéressant, cela semble vraiment utile. À quel point est-il intelligent quand il s'agit de choisir les largeurs de colonnes? Par exemple, si vous avez deux colonnes qui doivent être encapsulées mais une avec du texte beaucoup plus long que l'autre, est-ce que cela leur donne encore la même largeur? – marcog

+2

J'ai édité ma réponse. Mais en fait, dans la pratique, j'essaie de simplifier mes tables de sorte que je n'ai besoin que de X pour une seule colonne. Je viens de découvrir tabulary :) –

39

Une autre option consiste à insérer un minipage dans chaque cellule où l'habillage de texte est souhaitée, 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} 
+4

Merci, cela m'a permis de placer des listes 'itemize' dans mes cellules. –

5

Si vous voulez envelopper votre texte, mais maintenir un alignement alors vous pouvez envelopper cette cellule dans un minipage ou varwidth environnement (varwidth vient du paquetage varwidth). Varwidth sera "aussi large que son contenu mais pas plus large que X". Vous pouvez créer un type de colonne personnalisée qui agit comme « p {xx} », mais se rétrécit pour s'adapter à l'aide

\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}} 

qui peut nécessiter le paquet array. Ensuite, lorsque vous utilisez quelque chose comme \begin{tabular}{llM{2in}} les deux premières colonnes seront alignées à gauche et la troisième colonne sera alignée à gauche, mais si elle est plus large que 2in alors le texte sera encapsulé.

-3
\begin{table} 
\caption{ Example of force text wrap} 
\begin{center} 
    \begin{tabular}{|c|c|} 
    \hline 
    cell 1  & cell 2 \\ \hline 
    cell 3    &  cell 4 & & very big line that needs to be wrap. \\ \hline 
    cell 5  & cell 6 \\ \hline 
    \end{tabular} 
    \label{table:example} 
\end{center} 
\end{table} 
24

J'aime la simplicité de tabulary package:

\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 arrangez toute la largeur de la table par rapport à \ textwidth. E.g 0,4 de celui-ci. Ensuite, le reste est automatiquement fait par le paquet.

La majeure partie de l'exemple provient de http://en.wikibooks.org/wiki/LaTeX/Tables.

+0

merci :) cela convient bien pour les tables à base de texte. – sb32134

Questions connexes