Как обернуть текст в таблицы LaTeX?

454

Я создаю отчет в LaTeX, который включает в себя несколько таблиц. Я застрял на этом, так как данные моей ячейки в таблице превышают ширину страницы. Можно ли как-то обернуть текст так, чтобы он попадал в следующую строку в той же ячейке таблицы?

Это как-то связано с шириной стола? Но поскольку он выходит за пределы ширины страницы, будет ли это иметь значение?

Arnkrishn
источник
Я искал способ обернуть длинное слово, другое решение лучше соответствует моим потребностям tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Miranda

Ответы:

514

Используйте p {width} для ваших столбцов вместо l / r / c.

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
moinudin
источник
37
Хорошее решение, но потерять '|' если вы не хотите границы вокруг стола. Это тогда стало бы\begin{tabular}{p{1cm}p{3cm}}
Andrejas
83
Есть ли способ сделать это, указав выравнивание в каждой ячейке?
Дилан Ноулз
7
Я нашел способ указать выравнивание в каждой ячейке! Создай макрос! \ newcolumntype {L} {> {\ centering \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Сравнение} \ centering% \ begin {tabular} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Веридиан
8
Что если у меня есть два столбца, первый из которых должен быть столько, сколько нужно для его содержимого, а другой должен заполняться до ширины строки при переносе? Так что в основном мне нужноbegin{tabular}{lp{<whatever is left to fill the line width>}}
Сандер
118
Отличное решение. Тем не менее, я бы рекомендовал использовать относительные значения вместо произвольного измерения, напримерp{0.2\linewidth}p{0.6\linewidth}}
jgyou
139

В обычной tabularсреде вы хотите использовать p{width}тип столбца, как указывает marcog. Но это заставляет вас давать явные ширины.

Еще одним решением является 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}

Все столбцы X имеют одинаковую ширину. Вы можете повлиять на это, установив \hsizeв объявлении формата:

>{\setlength\hsize{.5\hsize}} X >{\setlength\hsize{1.5\hsize}} X

но тогда все факторы должны быть суммированы до 1, я полагаю (я взял это от спутника LaTeX). Существует также пакет, tabularyкоторый будет регулировать ширину столбцов, чтобы сбалансировать высоту строк. Для получения подробной информации, вы можете получить документацию для каждого пакета с texdoc tabulary(в TeXlive).

Дэмиен Поллет
источник
3
Интересно, что выглядит действительно полезным. Насколько разумно выбирать ширину столбцов? Например, если у вас есть два столбца, которые нужно обернуть, но в одном тексте намного больше текста, чем в другом, будет ли он по-прежнему иметь одинаковую ширину?
Мойнудин
2
Я отредактировал свой ответ. Но на самом деле на практике я пытаюсь упростить свои таблицы так, чтобы мне нужен только X для одного столбца. Я только что открыл табулатуры :)
Дэмиен Поллет
50

Другой вариант - вставить мини-страницу в каждую ячейку, где требуется перенос текста, например:

\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}
Нил Рубенс
источник
8
Спасибо, это позволило мне разместить itemizeсписки в моих камерах.
Квентин Праде
Я думаю, что ответ должен объяснить значение \columnwidth: когда я попробовал это, это, казалось, было больше ширины таблицы, а не ширины столбца, таким образом, я должен был установить ручную пропорцию как 0.2\columnwidthполучить разумную ширину.
У. Виндл
37

Мне нравится простота 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} 

В этом примере вы размещаете всю ширину таблицы относительно \ textwidth. Например, 0,4. Затем все остальное автоматически выполняется пакетом.

Большая часть примера взята с http://en.wikibooks.org/wiki/LaTeX/Tables .

OZI
источник
20

Просто как кусок пирога!

Вы можете определить новый тип столбца , как ( Lв данном случае) при сохранении текущего выравнивания ( c, rили 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}

введите описание изображения здесь

Шаян Амани
источник
5

Если вы хотите обернуть текст, но сохранить выравнивание, вы можете обернуть эту ячейку в minipageили varwidthсреде (varwidth поставляется из пакета varwidth). Varwidth будет «таким же широким, как его содержимое, но не шире X». Вы можете создать собственный тип столбца, который действует как "p {xx}", но сжимается, чтобы соответствовать, используя

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

который может потребовать arrayпакет. Затем, когда вы используете что-то вроде \begin{tabular}{llM{2in}}первых двух столбцов, мы будем выровнены по левому краю, а третий столбец будет выровнен по левому краю, но если он станет шире, чем 2 дюйма, текст будет перенесен.

cheshirekow
источник
1

Чтобы изменить текст ABв A \r Bячейке таблицы, поместите это в положение ячейки: \makecell{A \\ B}.

Прежде чем сделать это, вам также необходимо включить пакет makecell.

FlowerBeach
источник
-12
\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}
Md Monjur Ul Hasan
источник
Downvote. Это только кодовый ответ без объяснения.
starbeamrainbowlabs
1
Кроме того, это в любом случае неверно, так как вторая строка содержит 4 ячейки, в которых таблица предназначена для размещения только двух столбцов. И это никак не связано с переносом содержимого ячеек.
Ахмед Салах