Красивые таблицы с booktabs

Урок показывает, как делать таблицы «как в научных журналах» с помощью пакета booktabs.

booktabs — пакет профессиональных таблиц: вместо сетки из линий он даёт три аккуратные горизонтальные черты разной толщины и принципиально отказывается от вертикальных линий.

Таблицы из предыдущего урока с обилием линий выглядят «как в Excel». В научной типографике принят другой стиль — минимум линий, только горизонтальные. Его задаёт пакет booktabs.

Три команды вместо hline

booktabs предлагает \toprule (верхняя черта), \midrule (под шапкой) и \bottomrule (нижняя). Вертикальных линий нет вовсе:

\usepackage{booktabs}  % в преамбуле
...
\begin{tabular}{lcr}
  \toprule
  Фрукт & Кол-во & Цена \\
  \midrule
  яблоко & 5 & 120 \\
  груша  & 3 & 95  \\
  \bottomrule
\end{tabular}
========================
 Фрукт   Кол-во   Цена
------------------------
 яблоко    5      120
 груша     3       95
========================

Обратите внимание: в спецификаторе {lcr} нет ни одного |. Результат — воздушная таблица с тремя тонкими линиями, которая выглядит профессионально и читается легче, чем «клетчатая».

Почему вертикальные линии — плохо

Создатели booktabs (и типографы в целом) считают, что вертикальные линии и густая сетка перегружают таблицу и мешают глазу скользить по строкам. Воздух и выравнивание справляются лучше любых линий. Поэтому правило простое: горизонтальные черты — изредка и тонкие, вертикальных нет.

Частичная черта

Команда \cmidrule{2-3} рисует черту только под частью колонок (со 2-й по 3-ю) — удобно под объединённым подзаголовком:

\toprule
& \multicolumn{2}{c}{Результаты} \\
\cmidrule{2-3}
Метод & Точность & Время \\
\midrule

Как работает под капотом

booktabs переопределяет толщину линий и, главное, добавляет правильные вертикальные отступы вокруг них: у \toprule и \bottomrule линия чуть толще и с воздухом сверху/снизу, у \midrule — тоньше. Эти отступы (\abovetopsep и т.п.) — то, чего не хватает обычному \hline, из-за чего строки у него «прилипают» к линиям. Сама структура остаётся обычным tabular — booktabs меняет только оформление линий.

Толщина черт и тонкая настройка

Толщину линий booktabs задаёт не наугад: у внешних черт она равна \heavyrulewidth, у внутренних — \lightrulewidth, и обе можно переопределить в преамбуле, если издатель требует иной толщины. Команда \addlinespace добавляет немного воздуха между строками там, где таблица логически распадается на группы, и делает это аккуратнее, чем пустая строка или лишний \midrule. Для частичных черт у \cmidrule есть необязательный «обрезной» аргумент: запись вида \cmidrule(lr){2-3} чуть укорачивает черту слева и справа, чтобы соседние частичные линии не сливались в одну сплошную. Эти мелочи и отличают таблицу, свёрстанную с пониманием, от формально правильной.

Подпись над таблицей

У таблиц подпись по типографской традиции ставят сверху, а не снизу, как у рисунков: читатель сначала видит, что за таблица перед ним, и лишь потом разбирает цифры. Поэтому \caption у таблицы пишут перед окружением tabular, обернув всё в плавающее окружение table. booktabs не управляет подписями, но прекрасно сочетается с пакетом caption, которым настраивают шрифт и отступы подписи. Важно не путать table (плавающий контейнер с подписью и номером) и tabular (собственно сетка ячеек): первый отвечает за размещение и нумерацию, второй — за содержимое.

Чисел больше, линий меньше

Философию booktabs удобно держать в голове как правило бритвы: каждая черта должна что-то разделять, иначе её быть не должно. Три горизонтальные линии задают понятную структуру — шапка, тело, конец, — и большего почти никогда не нужно. Числовые колонки при этом выигрывают от выравнивания по разрядам: пакет siunitx с колонкой типа S ставит числа точка под точкой, и тогда даже без единой вертикальной линии столбец читается как ровная колонка цифр. Так booktabs и smart-выравнивание вместе дают тот самый «журнальный» вид, ради которого и затевается отказ от сетки.

Частые ошибки

  • Смешивать \hline и booktabs-черты — разная толщина и отступы, выглядит неряшливо.
  • Оставлять | в спецификаторе — противоречит стилю booktabs.
  • Забыть \usepackage{booktabs} — команды \toprule и др. не определены.

Итоги

  • booktabs даёт \toprule, \midrule, \bottomrule вместо россыпи \hline.
  • Стиль научных таблиц: только горизонтальные тонкие линии, без вертикальных.
  • \cmidrule{a-b} — частичная черта под группой колонок.
Проверьте себя
1. Какие команды booktabs заменяют обычный \hline?
A\topline, \midline, \botline
B\toprule, \midrule, \bottomrule
C\hline только толще
D\rule сверху и снизу
2. Какого типа линий избегает стиль booktabs?
AГоризонтальных
BВертикальных линий между колонками
CЛюбых линий
DТолько верхней
3. Что нужно сделать, чтобы команды booktabs работали?
AНичего, они встроены
BПодключить \usepackage{booktabs} в преамбуле
CСменить класс на book
DВключить amsmath