Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 63
Текст из файла (страница 63)
Заголовок таблицы на первой странице обычно отличается отзаголовка на последующих страницах. Описание последнего отделяется от последующего текста командой\endhead(longtable)В нашем примере он состоит из двух строк. Помимо заголовков, таблица можетиметь нижние колонтитулы. Их описание в нашем примере следует за описанием заголовков. Стандартный колонтитул печатается на всех страницах, кромепоследней. Он заканчивается командой\endfoot(longtable)Описание нижнего колонтитула на последней странице завершает команда\endlastfoot(longtable)В нашем примере этот колонтитул пуст, так что команду \endlastfoot можно было опустить.
Вслед за описанием заголовка и нижнего колонтитула идётосновное содержание таблицы, в котором нет ничего необычного. Заметим, чтовеличина счётчика LTchunksize не может быть меньше числа строк в заголовкахили колонтитулах, то есть для рассматриваемого примера она не должна бытьменьше трёх.Возвращаемся к главному заголовку. Его первая строка содержит команду\caption. Она печатает порядковый номер таблицы и первую строку её заголовка.
Вообще говоря, заголовок оформляется так же, как любая другая частьтаблицы, формируемой процедурой longtable, а команда \caption вовсе не является исключительной собственностью заголовка и может появляться в любойдругой части таблицы. Полный синтаксис команды включает два аргумента и*-форму (отсутствующую в формате LATEX):\caption[brief-caption]{full-caption}\caption*{full-caption}(longtable)Здесь full-caption — текст заголовка.
Если необязательный аргумент отсутствует, то full-caption попадёт также в список таблиц, который печатает команда\listoftables, иначе в список направляется brief-caption. Если \caption{...}304Глава 12. Таблицынаходится в повторяющемся заголовке или нижнем колонтитуле, то все эти заголовки и колонтитулы будут пронумерованы (с нарастающим значением порядкового номера) и внесены в список таблиц. Если такой исход нежелателен, следуетиспользовать команду \caption*{...}, которая не печатает номер и ничего невносит в список таблиц, или команду \caption[]{...} (с пустым необязательным аргументом), которая хотя и нумерует таблицу, но не вносит её в список.После команды \caption (или в её аргумент) следует вставить команду \label{key}, чтобы затем иметь возможность сделать ссылку на таблицу при помощикоманд \ref{key} и \pageref{key}. По понятным причинам нельзя вставлять\label в повторяющийся заголовок или колонтитул — компилятор запутается,обнаружив несколько пронумерованных объектов с одной и той же меткой.В длинной таблице можно использовать команды \footnote для подстрочного примечания и \newpage для принудительного перехода на новую страницу.
Последняя может пригодиться в колонках, соответствующих указателям p,m и b, так как процедура longtable ни за что не разорвёт таблицу внутри элемента такой колонки, даже если тот состоит из нескольких строк. Новая страница начинается между строками таблицы. Если строки разделяются горизонтальными линиями \hline, то линии автоматически дублируются при переносена другую страницу. Команду \footnote нельзя использовать в повторяющихся частях таблицы по той же причине, что и команду \label. Чтобы сделатьподстрочное примечание, например, к повторяющемуся заголовку, нужно в неговставить \footnotemark вместо \footnote.
Напомним, что \footnotemark печатает метку подстрочного примечания, а сам текст примечания печатает команда\footnotetext; её нужно поместить куда-нибудь в ту часть таблицы, которая попадает на нужную страницу. Впрочем, эти сложности лишь подтверждают эмпирическое правило: то, что LATEX трудно заставить сделать, обычно есть признакплохого стиля.Теперь вернёмся в начало примера и обратим внимание Читателя на то, чтопроцедура longtable вызвана без опции [hpos].
Это означает, что таблица должна быть расположена в центре страницы (по горизонтали). Однако это правилоне абсолютно и его легко изменить. В том случае, когда опция [hpos] в \begin{longtable} отсутствует, позиционирование таблицы по горизонтали зависит оттого, как определены командные длины\LTleft\LTright(longtable)Слева от таблицы вставляется пробел ширины \LTleft, а справа — пробел ширины \LTright. Первоначально обе команды \LTleft и \LTright определены как\fill, поэтому таблица центрируется. Они могут быть переопределены. Например, определение\setlength{\LTleft}{\parindent}(при исходном значении \LTright) означает, что таблица будет размещена на расстоянии стандартного абзацного отступа от левого края предшествующего таблице текста.
Экспериментируя с длинами \LTleft и \LTright, нужно помнить,12.6. Раскраска таблиц305что по крайней мере одна из них должна быть растяжимой длиной, чтобы можнобыло заполнить всю ширину страницы, если сама таблица не может быть растянута за счёт увеличения межколоночного расстояния при помощи \extracolsep.Чтобы напечатать таблицу из двух колонок в полную ширину страницы, нужноделать примерно так:\setlength{\LTleft}{0pt}\setlength{\LTright}{0pt}\begin{longtable}{l@{\extracolsep{\fill}}l}Расстояние перед таблицей и после неё определяется командами\LTpre\LTpost(longtable)Это растяжимые длины; по умолчанию они равны \bigskipamount.
Ширина подписей к таблице, печатаемых при помощи \caption, определяется команднойдлиной\LTcapwidth(longtable)Первоначально она равна 4 дюймам.Процедура longtable начинает печатать длинную таблицу с новой строки натекущей странице. Чтобы начать таблицу с новой страницы, предоставив компилятору возможность заполнить остаток текущей текстом, нужно воспользоваться командой \afterpage, реализованной в пакете afterpage (раздел 11.3.1).Однако, если поместить процедуру longtable в аргумент команды \afterpage,это может вызвать нехватку памяти. Поэтому рекомендуется всю процедуру переписать в отдельный файл (назовем его ltfile.tex), а затем прочитать его командой \input. Последнюю следует поместить в аргумент команды \afterpageвслед за командой \clearpage:\afterpage{\clearpage\input{ltfile}}Чтобы запретить допечатку текста вслед за длинной таблицей на её последнейстранице, надо добавить ещё одну команду \clearpage:\afterpage{\clearpage\input{ltfile}\clearpage}12.6.Раскраска таблицИзменение цвета ячеек, столбцов или строк таблицы оказывается не очень простой задачей.
Частично её решает пакет color (раздел 10.7), обеспечивая единыйинтерфейс с разнообразными выходными устройствами, но полное решение даёт пакет colortbl Дэвида Карлайла (Carlisle, David), специально написанный дляраскраски таблиц.Пакет colortbl автоматически загружает стандартные пакеты color, array и может использоваться совместно с пакетами longtable, dcolumn, hhline и т. д. Дляизменения цвета фона отельной колонки или ячейки он вводит команду306Глава 12. Таблицы(colortbl)\columncolor[model]{clr}[l-hang][r-hang]Её можно использовать в качестве спецификатора столбцов >{decl}, внутри преамбулы таблицы cols или в описании столбцов команды \multicolumn. Эта команда задаёт цвет фона данного столбца или ячейки.
Аргументы model (модельцвета) и clr (цвет) имеют тот же смысл, что и в командах, определённых в пакетеcolor. Необязательные аргументы l-hang и r-hang определяют, насколько далековлево и вправо от столбца простирается цветной фон. По умолчанию они равнывеличине \tabcolsep (в случае процедуры tabular) или \arraycolsep (в случаепроцедуры array), т. е. цвет полностью заполняет столбец.Для начала раскрасим таблицу из примера на стр. 2914 :\setlength{\extrarowheight}{3pt}\begin{tabular}[t]{|c|%>{\columncolor{yellow}\bfseries}l|%>{\columncolor{green}\itshape}c|}\hline \multicolumn{3}{|>{\columncolor{blue}}c|}{\color{white}{\bfseries Цвет}}\\\hline A & B & C\\\hline 100 & 10 & 1\\\hline\end{tabular}ЦветABC100101Чтобы изменить цвет фона целой строки, предусмотрена команда(colortbl)\rowcolor[model]{clr}[l-hang][r-hang]Её следует помещать в начало строки.
Особенное эффектно выглядит таблица счередованием цвета строк:\begin{tabular}[t]{|c|>{\bfseries}l|>{\itshape}c|}\rowcolor[gray]{0.7} \hline A& B & C \\\hline 100 & 10 & 1 \\\rowcolor[gray]{0.85} \hline 200 & 20 & 2 \\\hline 300 & 30 & 3 \\\rowcolor[gray]{0.85} \hline 400 & 40 & 3 \\\hline\end{tabular}ABC100101200202300303400403На пересечении цветных столбцов и строк преимущество имеют установки команды окрашивания строки \rowcolor, но их действие ограничено текущей строкой.Цвета рамки и разделительных линий между ячейками таблицы, созданныекомандами \hline, \cline, \vline или символом | в преамбуле таблицы cols,изменяет декларация\arrayrulecolor[model]{clr}4Реальные цвета в таблице заменены оттенками серого.(colortbl)30712.6.
Раскраска таблицОна действует на все последующие линии и может располагаться вне таблицы,в начале строки или внутри спецификации >{decl} в преамбуле таблицы cols.Её влияние не ограничивается текущей областью действия деклараций, но неотменяет спецификации, заданные в cols.\setlength{\arrayrulewidth}{2pt}\arrayrulecolor[gray]{0.7}\begin{tabular}[t]{|c|>{\bfseries}l|>{\itshape}c|}\arrayrulecolor[gray]{0.3} \hline A & B & C\\\arrayrulecolor[gray]{0.5} \hline 100 & 10 & 1 \\\hline 200 & 20 & 2 \\\arrayrulecolor[gray]{0.3} \hline\end{tabular}ABC100101200202Промежуток между двойными линиями, созданными двумя символами || впреамбуле таблицы cols или двумя командами \hline в теле таблицы, можноокрасить с помощью декларации\doublerulecolor[model]{clr}(colortbl)Если окраска линий производится одновременно с окрашиванием фона в ячейках,частичные линии, созданные командой \cline, приобретают цвет фона, становясь невидимыми.