Как кодировать таблицы с многострочными ячейками

Я пытаюсь написать короткую статью с помощью LaTeX, и мне нужно добавить таблицу с 3 столбцами.

+-------------+-----------------+--------------------------------------+
| AAAAAAAAAA  | BBBBBBBBBBBBBBB | Betty Botter Bought a Bit of Butter  |
|             |                 | but the Butter's Bitter              |
+-------------+-----------------+--------------------------------------+
| CCCCCCCC    | DDDD            | Betty Botter Thought:                |
|             |                 | If I Put This Bitter Butter in My    |
|             |                 | Batter it Will Make My Batter Bitter |
+-------------+-----------------+--------------------------------------+

К сожалению, я не могу найти правильную идиому для этого.


Я пытался:

\begin{tabular}{lll} 
    AAAAAAAAAA  & BBBBBBBBBBBBBBB & Betty Botter Bought a Bit of Butter but 
    the Butter's Bitter  \\
    CCCCCCCC  & DDDD & Betty Botter Thought: \newline If I Put This Bitter Butter in My Batter it Will Make My Batter Bitter
 \end{tabular}

Но LaTeX не выполняет никаких переносов строк или форматирования внутри ячейки. Полагаю, мне нужно сказать ему об этом ... Но как?


person lexu    schedule 24.05.2010    source источник
comment
Повторяющийся вопрос: stackoverflow .com / questions / 2687033 / (этот вопрос носит более общий характер).   -  person Charles Stewart    schedule 24.05.2010


Ответы (4)


Используйте дескриптор столбца p:

Изменять

\begin{tabular}{lll} 

to

\begin{tabular}{llp{5cm}}

Чтобы явно вставить перенос строки:

CCCCCCCC  & DDDD & \parbox{5cm}{Betty Botter Thought: \\ If I Put This Bitter Butter in My Batter it Will Make My Batter Bitter}
person aioobe    schedule 24.05.2010
comment
Есть ли способ объединить p {} с одним из других дескрипторов столбца? То есть, как сказать, что столбец p {5cm} должен быть выровнен по левому, правому краю или по центру? - person jja; 12.08.2013
comment
@jja в качестве обходного пути для выравнивания по правому краю внутри p {}, я использую \ hfill в начале каждой строки. - person Frizi; 23.10.2013
comment
Для явной вставки разрывов строки можно использовать \newline. - person Aryadegari; 20.09.2018
comment
Для тех, кто спрашивает о центрированной версии: tex.stackexchange.com/a/157400/108304 - person andrew; 07.07.2021

Вот ответ, который я нашел для своих нужд: Ссылка здесь.

Он создает новую команду, которая сделает таблицу внутри таблицы более правильным образом:

\newcommand{\specialcell}[2][c]{%
\begin{tabular}[#1]{@{}c@{}}#2\end{tabular}}

Итак, если вы хотите сделать принудительный разрыв строки внутри ячейки, как здесь:

\begin{tabular}{|c|c|c|}
\hline
Foo bar & Foo <forced line break here> bar & Foo bar \\
\hline
\end{tabular}

В итоге вы получите такой код:

Foo bar & \specialcell{Foo\\bar} & Foo bar \\    % vertically centered
Foo bar & \specialcell[t]{Foo\\bar} & Foo bar \\ % aligned with top rule
Foo bar & \specialcell[b]{Foo\\bar} & Foo bar \\ % aligned with bottom rule

Выравнивание по горизонтали можно контролировать в объявлении новой команды, изменив c @ на l @ или r @

Все кредиты передаются egreg из Tex форум. Проголосуйте за его ответ!

person 3nrique0    schedule 05.01.2016

Как написал @aioobe в своем ответе, в этом случае можно переключиться с выравнивания по левому краю

\begin{tabular}{lll}

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

\begin{tabular}{llp{.5\textwidth}}

После этого редактирования можно использовать команду \par (вместо \newline), чтобы реализовать разрыв строки внутри ячейки.

Этот код:

\documentclass{article}

\begin{document}

\begin{tabular}{llp{.5\textwidth}}
AAAAAAAAAA & BBBBBBBBBBBBBBB & Betty Botter Bought a Bit of Butter \par but the Butter's Bitter\\
CCCCCCCC & DDDD & Betty Botter Thought: \par If I Put This Bitter Butter in My \par Batter it Will Make My Batter Bitter\\
\end{tabular}

\end{document}

производит запрошенный вывод:

снимок экрана с результатами

person MattAllegro    schedule 08.02.2019

Вот ответ без причудливого кодирования. Напишите свои строки в отдельные строки. Пропускайте \ hline для всех, кроме последней строки (строки). Это быстро и грязно, но, эй, это работает и дает мне именно то, что я хочу, в любом случае для простых таблиц. Я делал рекламу для автомобильных стекол. У меня 3 ряда по центру в каждой ячейке

iTutor Grahamstown
Mathematics Tutor
0793296211

Я хотел, чтобы это повторялось в моей таблице. Я просто пропустил \ hline для первых двух строк. Множественные \ hlines и '|' упрощают разрезание распечатки.

\begin{tabular}{||c||c||c||c||}
\hline\hline

iTutor Grahamstown &iTutor Grahamstown&iTutor Grahamstown &iTutor Grahamstown \\ %No \hline

Mathematics Tutor & Mathematics Tutor & Mathematics Tutor&Mathematics Tutor \\  %No \hline

0793296211 & 0793296211 & 0793296211 & 0793296211\\ \hline\hline\hline %\hline now


\end{tabular}  

Я надеюсь, что это помогает.

person Andy Soper    schedule 15.04.2017