Таблицы: окружение tabular
Урок учит строить таблицы окружением tabular: колонки, выравнивание и линии.
tabular — окружение таблицы; в его аргументе строкой задаётся формат колонок:
l(влево),c(по центру),r(вправо),|(вертикальная линия).
Таблица в LaTeX строится из спецификации колонок и строк, разделённых & и \\. Сначала вы описываете, сколько колонок и как они выровнены, потом наполняете данными.
Простая таблица
\begin{tabular}{|l|c|r|}
\hline
Слева & Центр & Справа \\
\hline
яблоко & 5 & 120 \\
груша & 3 & 95 \\
\hline
\end{tabular}+--------+-------+-------+ | Слева | Центр | Справа| +--------+-------+-------+ | яблоко | 5 | 120| | груша | 3 | 95| +--------+-------+-------+
Аргумент {|l|c|r|} читается так: вертикальная линия, колонка влево, линия, колонка по центру, линия, колонка вправо, линия. Команда \hline рисует горизонтальную линию, & разделяет ячейки, \\ завершает строку.
Спецификаторы колонок
| Символ | Что задаёт |
l / c / r | выравнивание: влево / центр / вправо |
p{3cm} | колонка фиксированной ширины с переносом текста |
| | вертикальная разделительная линия |
Колонка p{ширина} нужна для длинного текста, который должен переноситься; без неё длинная ячейка вылезет за край страницы.
Объединение ячеек
Команда \multicolumn{N}{формат}{текст} объединяет N колонок в одну:
\begin{tabular}{|c|c|}
\hline
\multicolumn{2}{|c|}{Заголовок на всю ширину} \\
\hline
A & B \\
\hline
\end{tabular}Здесь две колонки объединены в одну общую шапку. Аналогично пакет multirow объединяет ячейки по вертикали.
Как работает под капотом
Движок сначала читает всю таблицу, измеряет естественную ширину каждой колонки по самому широкому содержимому, затем верстает её как единый «бокс». Колонки l/c/r подгоняются под содержимое, p{} имеет заданную ширину и переносит текст внутри. Линии \hline и | рисуются поверх сетки. Поскольку таблица — это один бокс, очень широкая таблица не переносится на следующую страницу автоматически (для длинных таблиц есть пакет longtable).
Три семейства окружений: tabular, tabularx, longtable
Базовый tabular подгоняет ширину колонок под содержимое и не умеет ни растягиваться на всю строку, ни разрываться между страницами. Когда таблица должна занимать ровно ширину текста, подключают tabularx: его первый аргумент — целевая ширина (обычно \textwidth), а колонки типа X делят между собой остаток места и переносят текст автоматически. Если же строк столько, что они не помещаются на одну страницу, нужен пакет longtable: он верстает таблицу построчно и корректно разрывает её между страницами, повторяя при этом шапку (блоки \endhead и \endfirsthead). Выбор окружения — это первое проектное решение: сначала определитесь, нужна ли фиксированная ширина и разрыв страниц, и только потом наполняйте таблицу данными.
Тонкая настройка колонок и высоты строк
Спецификатор колонок понимает больше, чем простые буквы. Выражение @{} убирает межколоночный отступ — например, @{}l...r@{} прижимает крайние колонки вплотную к рамке таблицы, а @{\,} вставляет тонкий пробел вместо обычного. Конструкция *{3}{c} разворачивается в три центрированных колонки и экономит набор для однотипных таблиц. Вертикальную плотность строк регулирует параметр \arraystretch: командой \renewcommand{\arraystretch}{1.3} вы увеличиваете высоту каждой строки на тридцать процентов, и таблица перестаёт выглядеть тесной. Этот приём особенно уместен в таблицах с booktabs, где воздух между строками важнее любых линий.
Когда вертикальные линии оправданны
Хотя tabular позволяет ставить | сколько угодно, опытные авторы используют их крайне скупо. Густая сетка из вертикальных линий дробит таблицу на клетки и мешает глазу скользить вдоль строки, а на стыках с \hline линии нередко не сходятся идеально. Поэтому даже в обычном tabular разумно ограничиться горизонтальными чертами, а колонки разделять не линиями, а выравниванием и небольшим воздухом. Если же требование оформления всё же предписывает рамку, держите её минимальной: внешний контур плюс одна черта под шапкой обычно достаточны, чтобы таблица читалась как единое целое, а не как набор разрозненных ячеек.
Частые ошибки
- Число ячеек в строке не совпадает с числом колонок — ошибка «Extra alignment tab» или «Misplaced \noalign».
- Длинный текст в
l-колонке вылезает за поля; нужнаp{}. - Забыть
\\в конце строки — строки слипнутся.
Итоги
tabular+ спецификатор колонок (l/c/r/p{}/|) задаёт каркас таблицы.&разделяет ячейки,\\— строки,\hlineрисует линии.\multicolumnобъединяет колонки; для широкого текста —p{ширина}.