Як загортати текст у таблиці LaTeX?


455

Я створюю звіт у LaTeX, який включає кілька таблиць. Я застряг у цьому, оскільки дані моїх комірок у таблиці перевищують ширину сторінки. Чи можу я якось обернути текст так, щоб він потрапив у наступний рядок у тій же комірці таблиці?

Це якось пов’язано з шириною столу? Але оскільки це буде перевищувати ширину сторінки, чи зміниться це?


Я шукав спосіб завершити довге слово, інше рішення краще відповідає моїм потребам tex.stackexchange.com/questions/198325/wrap-word-in-table-cell
Міранда,

Відповіді:


515

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

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

37
Гарне рішення, але програй "|" якщо ви не хочете межі навколо столу. Тоді б це стало\begin{tabular}{p{1cm}p{3cm}}
Андреас

83
Чи можливо це зробити, поки все ще вказується вирівнювання у кожній комірці?
Ділан Ноулз

7
Я знайшов спосіб вказати вирівнювання в кожній комірці! Створіть макрос! \ newcolumntype {L} {> {\ центрування \ arraybackslash} m {.8cm}} \ begin {table *} [t]% \ small \ caption {Порівняння} \ центрування% \ begin {таблиця} {| L | L | L | L | L | L | L | L | L | L | L | L | L |}
Veridian

8
Що робити, якщо у мене є два стовпці, де перший повинен бути стільки, скільки потрібно, щоб вмістити його вміст, а другий повинен заповнюватись до ширини рядка під час обгортання? Тому, в основному, мені потрібноbegin{tabular}{lp{<whatever is left to fill the line width>}}
Сандер

118
Прекрасне рішення. Однак я рекомендую використовувати відносні значення замість довільних розмірів, наприкладp{0.2\linewidth}p{0.6\linewidth}}
jgyou

140

У звичайному 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
Цікаво, що виглядає дуже корисно. Наскільки розумний він при виборі ширини стовпців? Наприклад, якщо у вас є два стовпчики, які потрібно обернути, але один зі значно довшим текстом, ніж інший, чи все ж вони призначають їх однакову ширину?
moinudin

2
Я відредагував свою відповідь. Але насправді на практиці я намагаюся спростити свої таблиці, щоб мені знадобилося лише X для однієї колонки. Я щойно відкрив таблицю :)
Дамієн

51

Інший варіант - вставити міні-сторінку в кожну клітинку, де бажано обгортати текст, наприклад:

\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щоб отримати розумну ширину.
U. Windl

38

Мені подобається простота 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 .


21

Простий, як шматок пирога!

Ви можете визначити новий тип стовпця , як ( 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). Ширина буде "такою ж широкою, як і вміст, але не ширше X". Ви можете створити спеціальний тип стовпця, який діє як "p {xx}", але зменшується, щоб відповідати, використовуючи

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

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


1

Щоб змінити текст ABв A \r Bкомірці таблиці, помістіть це в положення осередку: \makecell{A \\ B}.

Перш ніж це зробити, вам також потрібно включити пакет makecell.


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

Downvote. Це відповідь лише для коду, без пояснень.
starbeamrainbowlabs

1
Крім того, це неправильно, оскільки другий рядок містить 4 комірки, де таблиця призначена для розміщення лише двох стовпців. І це так чи інакше не пов’язане із загортанням вмісту комірок.
Ахмед Салах
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.