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

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

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

Ответ 1

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

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}

Ответ 2

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

Другим решением является среда 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

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

\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

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

Ответ 5

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

Вы можете определить новый тип столбца, например (в данном случае 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}

enter image description here

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

\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}