Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 60
Текст из файла (страница 60)
Команда \extracolsepможет быть использована только в @-выражении в аргументе cols. Обычноеё используют, чтобы вставить пробел \fill между колонками в процедуреtabular*.p{wd} — колонка, каждая txt ячейка которой форматируется в виде парбокса, как если бы он был аргументом команды \parbox[t]{wd}{txt} (раздел 9.2). Однако команда \\ не может использоваться внутри любой такойячейки, за исключением следующих ситуаций:• внутри процедур типа minipage, array или tabular;• внутри парбокса, явно указанного командой \parbox;• в области действия деклараций \centering, \raggedleft, \raggedright,\center, \flushright, \flushleft, которые в этом случае должны находиться внутри фигурных или командных скобок.*{n}{cols} — n ≥ 1 копий колонок, где cols — любой список указателей,который может содержать другое *-выражение.12.2.
Процедура tabular287Дополнительный пробел, равный половине используемого по умолчанию межколоночного расстояния (раздел 12.2.1), вставляется перед первой колонкой (еслиcols не начинается с | или @-выражения) и за последней колонкой. Этот пробелобычно не создаёт проблем, но может быть легко устранён, если вставить @{} вначале и конце cols.Тело процедуры состоит из последовательности строк, разделённых командами \\ или\tabularnewline[len]причём вторая из них введена специально для того, чтобы при желании во входном файле легче было отличить конец строки таблицы от конца строки в ячейке колонки p (см.
выше). В остальном команда \tabularnewline эквивалентна\\[len], но её можно использовать только для завершения строк в процедурахtabular, tabular*, array, а также в процедурах, определённых в пакетах tabularxи longtable из коллекции tools (разделы 12.4 и 12.5).Каждая строка является последовательностью ячеек, разделённых символами &. Число ячеек должно быть не больше числа указателей колонок, специфицированных в преамбуле таблицы, т. е.
в аргументе cols. Текст каждой ячейкиобрабатывается так, как если бы он был заключён в фигурные скобки, поэтомуобласть действия любой декларации, помещённой внутри ячейки, лежит внутринеё. Любая ячейка может включать следующие команды:\multicolumn{n}{col}{text} создаёт ячейку, состоящую из текста text, занимающую n колонок и позиционированную в соответствии с col. При n = 1 этакоманда используется для переопределения способа позиционирования, указанного в аргументе cols процедуры. Аргумент col команды должен содержать в точности один указатель r, c, l и одно или более @-выражение илисимвол(ы) |. Он замещает часть аргумента cols процедуры, соответствующуюn замещаемым колонкам, причём часть, соответствующая отдельной колонке (за исключением первой), начинается с указателя r, c, l или p, так что|c|l@{:}lr имеет части |c|, l@{:}, l и r.
Команда \multicolumn должналибо начинать строку, либо следовать непосредственно за &.\vline проводит вертикальную линию на полную высоту и глубину строки. Команда \hfill (раздел 4.3) позволяет сдвинуть эту линию на границы колонки.Команда \vline может также использоваться в @-выражениях.Следующие команды проводят горизонтальные линии. Они могут располагаться между строками, непосредственно вслед за \\, либо до первой строки,либо вслед за последней строкой, за которой в этом и только в этом случае нужно поставить команду \\:\hline проводит горизонтальную линию на всю ширину бокса. Две последовательные команды \hline проводят две горизонтальные линии на некоторомрасстоянии друг от друга; вертикальные линии, созданные символом | в аргументе cols, не рисуются в этом промежутке.288Глава 12. Таблицы\cline{i–j} проводит горизонтальную линию через колонки с порядковыми номерами от i до j.
Две или более последовательные команды \cline проводятлинии на одной и той же высоте. При определении материала, относящегосяк конкретной колонке, следует помнить, что спецификатор колонки всегданачинается с буквы c, r, l или p (см. описание команды \multicolumn).Следующий пример содержит таблицу с переменным числом колонок:Год197172ЖивотноводствоЦенымин. макс.Примечания97–245Неудачный год дляфермеров на Западе245–245Уменьшение продажиз-за суровой зимыВторая и третья колонки в нижней части таблицы разделены символом –, поэтому числовой интервал 97–245 на самом деле размещён в двух колонках, агоризонтальное положение чисел в двух последних строках выровнено по черточке между ними. Для этого в аргументе процедуры tabular граница междувторой и третьей колонками описана как @{--}:\begin{tabular}{|r||r@{--}l|p{1.5in}|}\multicolumn{4}{|c|}{Животноводство}\\& \multicolumn{2}{c|}{Цены}&\\\multicolumn{1}{|c||}{Год}& \multicolumn{1}{r@{\,\vline\,}}{мин.}& макс.
& \multicolumn{1}{c|}{Примечания}\\1971 & 97& 245& Неудачный год для фермеров на Западе\\72& 245 & 245& {\raggedright Уменьшение продаж\\из-за суровой зимы}\\\end{tabular}\hline\hline\hline\cline{2-3}\hline\hline\hlineЧетвёртая колонка описана как парбокс шириной 1,5 дюйма: p{1.5in}. Поэтомудлинный текст в этой колонке автоматически разбивается на достаточное числострок.
Так как в узких колонках трудно разбивать текст на строки без чрезмерного увеличения пробелов между словами, в последней ячейке последней колонки использована декларация \raggedright, разрешающая перенос слов безвыравнивания правой границы колонки; область её действия явно выделена фигурными скобками.Следующая таблица12345.67891237.5896238.57941Таблицаabcdeabchabch65 ммfghi:initialefh:partialegida:full-28912.2. Процедура tabularимеет заданную ширину 65 мм. Она создана процедурой tabular*:\begin{tabular*}{65mm}{|r@{.}l@{\extracolsep{\fill}}%cr@{\extracolsep{0pt}:}l|}\multicolumn{5}{c}{\underline{Таблица}}\\12345&6789 & abcde& fghi& initial\\1237 & 589 & abch& efh& partial\\6238 &57941 & abch& egida& full\end{tabular}Здесь первая колонка отделена от второй десятичной точкой, а четвертая от пятой — двоеточием.
Для достижения заданной ширины между второй и третьейколонками при помощи @{\extracolsep{\fill}} вставлена бесконечно растяжимая длина \fill. При этом должно бы также увеличиться расстояние междутретьей и четвертой колонками, но ещё одна команда \extracolsep перед последней колонкой отменяет это увеличение.Приведём ещё несколько простых примеров, показывающих, как можно управлять промежутками между текстом и границей колонки. Начнём с варианта,когда величина промежутков устанавливается по умолчанию (она определяетсяпараметром \tabcolsep — см. ниже):\begin{tabular}{|l|l|}\hlineТекст1 & Текст2 \\ Текст3 & Текст4 \\ \hline\end{tabular}Текст1Текст3Текст2Текст4Здесь есть вертикальные линии между колонками, поэтому регулируемый зазорнаходится между текстом и вертикальной линией.
Удалим сначала пробелы свнешних краев таблицы:\begin{tabular}{|@{}l|l@{}|}...Текст1Текст3Текст2Текст4А теперь с обеих сторон первой колонки:\begin{tabular}{|@{}l@{}|l|}12.2.1....Текст1 Текст2Текст3 Текст4Параметры настройкиСледующие параметры могут быть изменены либо вне процедуры tabular, либо внутри отдельной ячейки. В первом случае изменения действуют на всю таблицу, во втором — область действия изменений ограничена имеющимися фигурными или командными скобками.\arraycolsep — половина ширины горизонтального пробела между колонками в процедуреarray; изменяется при помощи \setlength. Например, \setlength{\arraycolsep}{4pt}устанавливает расстояние между колонками равным 4 pt.\tabcolsep — половина ширины горизонтального пробела между колонками в процедурахtabular и tabular*.290Глава 12.
Таблицы\arrayrulewidth — ширина линии, создаваемой | в аргументе cols процедуры, а также командами \hline, \cline, \vline.\doublerulesep — ширина пробела между двойными линиями, создаваемыми двумя последовательными | или командами \hline.\arraystretch — интервал между строками. Стандартное расстояние между строками, определяемое по высоте текста в строке, умножается на значение \arraystretch.Для изменения значения \arraystretch (которое по умолчанию равно 1) следует использовать команду \renewcommand. Например, \renewcommand{\arraystretch}{1.5} увеличиваетинтервал в 1,5 раза.
Другие перечисленные выше параметры имеют смысл длины и изменяютсякомандами \setlength или \addtolength.12.3.Пакет arrayПри подключении пакета array в процедурах tabular, tabular* и array появляются дополнительные инструменты настройки таблицы. Более того, становитсяреальностью создание новых указателей колонок, входящих в аргумент cols этихпроцедур.Прежде всего перечислим новые и измененные указатели колонок.| проводит вертикальную линию между колонками на всю высоту таблицы.В отличие от аналогичных процедур ядра LATEX, расстояние между двумяколонками увеличено на толщину вертикальной линии.
Это отличие особеннозаметно для толстых линий.m{wd} создаёт колонку, каждая ячейка которой text формируется в виде парбокса, как если бы он был аргументом команды \parbox[c]{wd}{text} (раздел 9.2), т. е. m{wd} действует аналогично p{wd}, но текст в элементах колонки будет центрироваться по высоте относительно текста в той же строкев соседних колонках.b{wd} создаёт колонку, каждая ячейка которой text форматируется, как если быон был аргументом команды \parbox[b]{wd}{text}.
Последняя строка в элементах колонки будет расположена на одном уровне с соседними колонками.>{decl} используется перед указателями l, r, c, p, m или b. Вставляет текст decl(чаще всего какую-нибудь декларацию) в начало каждой ячейки колонки.<{decl} используется после указателей l, r, c, p, m, b. Вставляет текст decl точнов конец каждой ячейки колонки.!{text} является аналогом указателя |, но вместо вертикальной линии вставляет между колонками text.
В отличие от другого своего аналога @{text} неподавляет стандартный пробел между колонками.Пакет array также вводит один новый параметр настройки. Это длина\extrarowheight(array)29112.3. Пакет arrayкоторая добавляется к нормальной высоте каждой строки таблицы (при неизменном вертикальном пробеле внизу строки).Перейдём к примерам.Чтобы текст в отдельной колонке был напечатан определённым шрифтом,достаточно поместить >{decl} с нужной декларацией decl перед указателем соответствующей колонки в аргументе cols процедуры tabular:\begin{tabular}[t]{|c|>{\bfseries}l|>{\itshape}c|}\hline A & B & C \\ \hline 100 & 10 & 1 \\ \hline\end{tabular}A100B10C1При этом отпадает необходимость вставлять одни и те же декларации во всеэлементы колонок.
Увеличим теперь высоту всех строк на 3 pt, присвоив этозначение параметру \extrarowheight:\setlength{\extrarowheight}{3pt}\begin{tabular}[t]{|c|>{\bfseries}l|>{\itshape}c|}...ABC100101Если какая-нибудь колонка в процедуре tabular описана как >{$}c<{$}, то онаавтоматически будет форматироваться в математическом режиме. Напротив, этаже колонка в процедуре array будет обрабатываться в строковом (не математическом) режиме.