Красивые таблицы с 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}— частичная черта под группой колонок.