Ответ 1
Используйте p {width} для ваших спецификаторов столбцов вместо l/r/c.
\begin{tabular}{|p{1cm}|p{3cm}|}
This text will be wrapped & Some more text \\
\end{tabular}
Я создаю отчет в LaTeX, который включает в себя несколько таблиц. Я застрял на этом, так как данные моей ячейки в таблице превышают ширину страницы. Можно ли как-нибудь обернуть текст так, чтобы он попадал в следующую строку в той же ячейке таблицы?
Это как-то связано с шириной таблицы? Но как это выходит за рамки ширины страницы, это будет иметь значение?
Используйте p {width} для ваших спецификаторов столбцов вместо l/r/c.
\begin{tabular}{|p{1cm}|p{3cm}|}
This text will be wrapped & Some more text \\
\end{tabular}
В обычной среде 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).
Другим вариантом является вставка мини-диска в каждую ячейку, где требуется текстовая упаковка, например:
\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}
Мне нравится простота пакета 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.
Просто как кусок пирога!
Вы можете определить новый тип столбца, например (в данном случае 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}
Если вы хотите обернуть текст, но поддерживаете выравнивание, вы можете перенести эту ячейку в среду minipage
или varwidth
(varwidth поступает из пакета varwidth). Varwidth будет "столь же широким, как и его содержимое, но не шире X". Вы можете создать собственный тип столбца, который действует как "p {xx)", но сжимается, чтобы соответствовать с помощью
\newcolumntype{M}[1]{>{\begin{varwidth}[t]{#1}}l<{\end{varwidth}}}
которому может потребоваться пакет array
. Затем, когда вы используете что-то вроде \begin{tabular}{llM{2in}}
, первые два столбца мы будем иметь нормальное выравнивание по левому краю, а третий столбец будет нормализован по левому краю, но если он станет более широким, чем 2in, тогда текст будет завернут.
Чтобы изменить текст AB
на A \r B
в ячейке таблицы, поместите его в положение ячейки: \makecell{A \\ B}
.
Перед этим также необходимо включить пакет makecell
.
\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}