Как обернуть текст в таблицы LaTeX? - PullRequest
386 голосов
/ 26 апреля 2009

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

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

Ответы [ 7 ]

439 голосов
/ 26 апреля 2009

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

\begin{tabular}{|p{1cm}|p{3cm}|}
  This text will be wrapped & Some more text \\
\end{tabular}
131 голосов
/ 26 апреля 2009

В обычной среде 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).

43 голосов
/ 19 февраля 2010

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

\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}
34 голосов
/ 20 января 2014

Мне нравится простота пакета 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 голосов
/ 19 июля 2013

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

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

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

4 голосов
/ 19 декабря 2018

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

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

0 голосов
/ 09 сентября 2013
\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}
...