Работа в системе LaTeX
de301fb4

Таблицы, простирающиеся на несколько страниц


Как уже отмечалось, окружения {array} и {tabular} рассматриваются LaTeX'ом как одна большая буква, и потому не разбивается по страницам. Можно, однако, создавать таблицы, в которых и разбиение на страницы, и определение ширины колонок происходит автоматически. Для этого надо подключить стилевой пакет {longtable} и использовать окружение {longtable}. Как и окружение {tabular}, оно принимает один обязательный параметр — преамбулу (устроенную точно так же, как у {tabular}); внутри окружения действуют в точности те же правила записи текста, что и в окружении {tabular} (в частности, допустимы команды \hline, \cline и \multicolumn). Разница с окружением {array} в том, что получаемая при этом таблица может занимать несколько страниц и иметь произвольную длину.

Опишем теперь некоторые особенности окружения {longtable}, связанные с разбиением на страницы.

Во-первых, после первого запуска LaTeX'а колонки таблицы, определенной как {longtable}, могут оказаться невыровненными (это связано с тем, что при первом проходе LaTeX читает такую таблицу не целиком, а по кускам, и выравнивает эти куски независимо друг от друга). Чтобы добиться выравнивания, надо запустить LaTeX еще раз-другой (если есть необходимость в повторном запуске, об этом будет выдано предупреждение).

Во-вторых, вы имеете возможность сделать так, чтобы заголовок таблицы повторялся на каждой новой странице, на которой таблица продолжается. Для этого надо оформить заголовок в виде строки или группы строк (и/или команд \hline), и при этом последнюю из этих строк надо завершить не командой \\, а командой \endhead. Обычно, впрочем, повторяющийся заголовок не идентичен тому, который ставят в самом начале таблицы. Отдельный заголовок для начала таблицы также оформляют в виде одной или нескольких строк, последняя из которых завершается командой \endfirsthead. Кроме того, можно предусмотреть специальную группу строк, которая будет ставиться на каждой странице внизу таблицы — для этого надо записать строку или группу строк, завершив последнюю из них не командой \\, как обычно, а командой \endfoot.
Можно также предусмотреть отдельную группу строк, которая ставится внизу таблицы только на последней из занимаемых таблицей страниц. Для этого надо вместо \endfoot написать \endlastfoot. Группы строк, завершающиеся командами \endhead, \endfirsthead, \endfoot или \endlastfoot, должны стоять в начале окружения {longtable}. Вот пример использования этих средств:



Этой таблице соответствовал такой исходный текст:
\begin{longtable}{|l|l|l|l|} \multicolumn{4}{c}{Итоги собачьей выставки}\\ \hline Кличка & Пол & Порода & Оценка\\ \hline 1&2&3&4\\ \hline\endfirsthead \hline 1 amp; 2 & 3 & 4\\ \hline\endhead \hline \multicolumn{4}{c}{\textit{Продолжение на следующей странице}} \endfoot \hline\endlastfoot Алекс & кобель & миттельшнауцер & отл.\\ ... Эмир & кобель & эрдельтерьер & оч. хор.\\ \end{longtable} В таблице, оформленной с помощью {longtable}, можно явно указать место разрыва страницы с помощью \newpage (а также \pagebreak в окружении {longtable} или \nopagebreak). Эти команды должны следовать непосредственно после \\ (можно с новой строки).
При пользовании пакетом {longtable} предусмотрена возможность автоматической нумерации таблиц, созданных окружением {longtable}. Для этого используется та же команда \caption, в окружении {longtable}} что и в окружениях {table} или {picture}, но пользоваться ей надо чуть по-другому: после этой команды необходимо поставить \\, \endhead или \endfirsthead (или \endfoot,\ldots).
При этом автоматически нумеруемые таблицы можно обычным образом метить с помощью \label (и потом ссылаться на эти места с помощью \ref), но необходимо соблюдать два ограничения:
  • метку нельзя ставить в строки, которые появятся на печати более одного раза (благодаря повторению заголовков на других страницах);
  • с команды \label не должна начинаться ни одна графа таблицы.
На автоматически нумерующийся заголовок выделяется по умолчанию 4 дюйма. Чтобы изменить этот размер, надо присвоить соответствующее значение параметру \LTcapwidth.


В отличие от окружения {tabular}, таблица в окружении {longtable} не рассматривается как одна большая буква, а сразу располагается между абзацами, по умолчанию - по центру. Чтобы таблица была прижата к правому краю, надо указать у окружения {longtable} необязательный аргумент r (в квадратных скобках, между \begin{longtable} и преамбулой); необязательный аргумент l даст таблицу, прижатую влево.
  1)   Мы выбрали для него такое название, поскольку официально символ @ называется " коммерческое at"; неофициально этот символ называют самыми разными именами, от "собаки" до "блямбы".


Содержание раздела