При работе на пишущей машинке печать таблиц, состоящих из нескольких колонок, не вызывала особых проблем: все литеры имели одинаковую ширину. Однако полиграфические шрифты (в частности, используемые TeX'ом) являются, как правило, "пропорциональными" (каждая буква имеет свою ширину), и в этом случае добиться выравнивания в колонках сложнее.
В настоящей лекции мы рассмотрим два основных способа, предоставляемых TeX'ом для печати текста с выровненными колонками (например, таблиц). Начнем с менее мощного, но более простого — имитации табулятора.
Табулятор имитируется в LaTeX'е с помощью окружения {tabbing}. При печати таблиц с помощью этого окружения
пользователь сам задает места, в которых должна начаться
очередная колонка. Конкретно это выглядит так. При наборе первой
строки этого окружения можно в любой момент поставить
команду \= в окружении {tabbing} - она отмечает
очередное место, с которого начинается новая колонка ("позицию
табуляции"). Это место
(расстояние от начала строки) запоминается, и в дальнейшем можно с
помощью команды \>
"перескочить" к очередной позиции табуляции — текст,
следующий после этой команды, будет набираться, начиная с позиции
табуляции. Строки разделяются
командой \\. Рассмотрим это
на примере:
\begin{tabbing}
начало\quad\=середина
\quad\=конец\\
раз\>два\>три\\
раз\> два\> три\\
начинаем\>
продолжаем\>
заканчиваем\\
\end{tabbing}
В первой строке мы задали две позиции табуляции двумя
командами \= (на всякий случай мы разделили дополнительными
пробелами слова в первой строке и, тем самым, наши позиции
табуляции; отсюда команды \quad ). Первая строка завершается
командой \\, а во второй строке мы начинаем установленными
позициями табуляции пользоваться. Слово "раз" напечаталось
с начала строки (каждая строка начинается с крайней левой
позиции, если отсутствует команда вроде \>, задающая
переход к новой позиции). Далее идет команда \> — "
перейти на следующую позицию табуляции". И действительно,
следующее после нее слово "два" начинается со второй
позиции — как раз там же, где начиналось слово "середина".
Перед словом "три" стоит еще одна команда \> —
оно печатается с третьей позиции, как раз под словом "
конец", с начала которого мы эту позицию и определили. Третья
строка ничем не отличается от четвертой, хотя в исходном тексте
между командами \> и словами стоят пробелы. Дело в том,
что пробелы после команд \> игнорируются. Наконец, в
четвертой строке слова при печати наложились друг на друга. Это и
не удивительно: окружение {tabbing} исправно начинает
очередную порцию текста с той позиции, которую мы ему указали, но
при этом не проверяет, сколько места этот текст реально займет и
не будут ли перекрываться колонки — за это целиком отвечает
тот, кто текст готовит. Видимо, в данном случае следовало
оставить побольше места при определении позиций табуляции
(например, написать в первой строке \qquad вместо \quad ).
Кроме установки дополнительных интервалов экспериментальным путем,
есть и другой способ правильно проставить позиции табуляции. Именно,
если закончить строку не командой \\, а командой с суровым
названием \kill, то эта строка не будет напечатана, но все позиции табуляции,
установленные в ней, будут запомнены LaTeX'ом, и их можно будет
использовать в последующих строках. В приведенном выше примере можно
было бы написать так:
\begin{tabbing}
начинаем \=продолжаем \=
заканчиваем\kill
начало\>середина\>конец\\
\bfseries раз\>
\itshape два\>три\\
начинаем\>продолжаем\>
заканчиваем\\
\end{tabbing}
Обратите внимание, что при установке позиций табуляции в первой
(не печатающейся) строке мы сделали пробелы между концом слова и
командой \= (иначе в последней строке слова бы опять слились:
нам нужно, чтобы первая позиция табуляции не была впритык к
концу слова "начинаем"). Заметьте также, что во второй
строке мы убрали команды \quad ; можно было бы их и
оставить — на внешний вид таблицы это бы никак не повлияло,
поскольку позиции табуляции уже установлены и лишние пробелы
перед очередной командой \> никого не волнуют. По этой же
причине мы не потрудились оставить пробелы между словами
и \> в строке "
начинаем, продолжаем, заканчиваем". Наконец, обратите внимание
и на то, как мы меняли шрифт в строке "раз, два, три": слово
"три" переключилось на обычный шрифт само собой. Это
объясняется тем, что часть текста окружения {tabbing}, расположенная между двумя командами \> или \=, образует группу.
Внутри окружения {tabbing} используется команда \=,
которая, как мог заметить читатель, обычно имеет совсем другой
смысл — постановка диакритического знака над буквой. Команды \' и \` также
имеют внутри этого окружения особый смысл, о котором пойдет речь
ниже. Поэтому, если внутри {tabbing} нам понадобился
диакритический знак (скажем, над буквой e), то надо
руководствоваться такой таблицей:
| вместо | надо набирать |
|---|---|
\=e |
\a=e |
\'e |
\a'e |
\`e |
\a`e |
Интервалы и разрыв между строками.
Команда \\ внутри окружения {tabbing} может иметь
необязательный аргумент, действующий формально так же, как для этой
команды, употребляемой внутри абзаца: если в квадратных скобках
поставить длину (измеренную в воспринимаемых TeX'ом единицах, или же какой-либо LaTeX'овский параметр,
значением которого является длина, например, \medskipamount ), то
после этой строки будет сделан дополнительный интервал, величина
которого равна указанной длине. Имеет команда \\ и "вариант
со звездочкой", если
написать \\*
вместо \\, то после строки, завершаемой этой командой, начинать
новую страницу будет запрещено. Команда \\* также может
принимать необязательный аргумент. Он имеет тот же смысл, что и для
соответствующей команды без звездочки.
Переустановка позиций табуляции.
Команды \=, устанавливающие позиции табуляции, можно давать не
только в первой строке. Сначала
пример:
\begin{tabbing}
парочка \=позиций
\=табуляции\\
\>плюс\>еще
одна здесь:\=\\
теперь\>их\>
уже\>три\\
Вторую \>мы\quad
\=сменим \>
и посмотрим:\\
где\>эти\>
позиции\>теперь\\
\end{tabbing}
Опишем точно, как команда \= взаимодействует с \>.
Внутри окружения {tabbing} в каждый момент LaTeX'у известно
некоторое количество позиций табуляции, занумерованных подряд, от
нуля до какого-то целого числа (не более двенадцати). При входе в
окружение известна только позиция с номером нуль (это всегда
начало строки). Увеличиваться число известных позиций может за
счет команды \=, используются позиции табуляции
командой \>. Если команда \= встречается в строке после того, как использованы все известные позиции табуляции,
то количество известных позиций табуляции увеличивается на 1 и
очередная позиция табуляции устанавливается в месте, куда
попала команда \=. Если же \= встречается в строке до
того, как все известные позиции табуляции израсходованы, то новых
известных позиций не прибавляется, просто очередная по счету
позиция табуляции заменяется на ту, которую задает
команда \=.
Иногда бывает необходимо в пределах одной и той же таблицы временно
перейти на новое расположение позиций табуляции, а затем вернуться к
прежнему. Для этого используются команды \pushtabs
и \poptabs.
Первая из них запоминает расположение позиций табуляции; после этой
команды можно позиции переустановить, пользоваться этими новыми
переустановленными позициями... — после команды \poptabs
значения старых позиций табуляции будут восстановлены.
Пример:
\begin{tabbing}
раз\quad\=два\quad\=три\quad\=четыре\\
\pushtabs гиппопотам\quad\=аллигатор\\
раз\>два\\ три\>четыре\\
\poptabs
one\>two\>three\>four\\
viens\>divi\>tr\a=\i s\>\v{c}etri\\
\end{tabbing}
Команды \pushtabs и \poptabs должны быть "сбалансированы": каждой команде \pushtabs, запоминающей позиции
табуляции, должна соответствовать вспоминающая их команда \poptabs. Если
это условие не выполнено, вы получите сообщение об ошибке. Обратите
также внимание, что знак долготы над буквой i в слове tr
("три" по-латышски) мы
поставили с помощью команды \a. \looseness 1
Экзотика.
Для полноты картины опишем некоторые изысканные возможности
окружения {tabbing}.
Команда \' (внутри
окружения {tabbing} ) размещает текст таким образом, чтобы он не
начинался, а заканчивался у позиции табуляции. Сама эта
команда позиций табуляции "не тратит"; просто весь текст,
размещенный между \> или \= и \', размещается левее
позиции табуляции, определяемой командой \> или \=. Таким
способом можно верстать таблицы, в которых колонки выровнены по
правому краю, а не по левому, как получается при обычном
использовании {tabbing}. Вот пример:
\begin{tabbing}
\hspace{3.5cm}\=\kill
слева\>справа\'\\
\a`a gauche\>\a`a droite\'\\
links\>rechts\'\\
pa kreisi\>pa labi\'
\end{tabbing}
Еще раз обратите внимание, что для постановки диакритического знака
над буквой a нам пришлось писать "\a`" вместо \`.
Команда \` внутри
окружения {tabbing} прижимает весь текст строки, идущий после нее,
к правому краю; между этой командой и командой, завершающей строку, не
должно быть команд, использующих или устанавливающих позиции
табуляции. Например, таблицу, у которой первая колонка выровнена по
левому краю, а вторая — по правому (как в предыдущем примере), можно
было бы задать так:
\begin{tabbing}
слева\`справа\\
\a`a gauche\`\a`a droite\\
links\`rechts\\
pa kreisi\`pa labi\\
\end{tabbing}
Кстати, здесь нам вообще не понадобилось устанавливать позиции табуляции. Впрочем, смотрится эта таблица неважно.
Как мы уже отмечали, при начале новой строки текст начинается с
нулевой позиции табуляции, т. е. с начала строки.
Команда \+
позволяет изменить такое положение вещей: после этой команды при
начале каждой новой строки текст будет начинаться не с нулевой, а с
первой позиции табуляции (как если бы каждая последующая строка
начиналась с команды \> ). Если дать еще одну команду \+,
то текст в последующих строках будет начинаться уже и не с первой, а
со второй позиции, и т. д. Команда \- в
окружении {tabbing} внутри окружения {tabbing} означает вовсе
не место, где можно перенести слово (впрочем, команда с таким
действием в этом окружении и не нужна): она действует противоположно
команде \+. Наконец, команда \<, будучи
употребленной в начале строки (в других местах ее употреблять нельзя),
действует аналогично \-, но в пределах только этой строки (а не
всех последующих, как \+ и \- ). Следующий пример
иллюстрирует все эти изыски:
\begin{tabbing}
раз \=два \=три \=\kill
раз\>два\>три\>четыре\+\\
два\+\\ три\+\\ четыре\\
\<три\\ четыре\-\-\\
два\-\\
раз\>два\>три\>четыре\\
\end{tabbing}
Описанные в этом разделе возможности окружения {tabbing} на
практике используются редко, поскольку для печати сложных таблиц
в LaTeX'е есть более удобное средство —
окружение {tabular}. Перейдем к его описанию.
При пользовании окружением {tabbing} вы должны самостоятельно
следить, чтобы разные колонки не накладывались друг на друга.
Можно, однако, передать эти заботы программе: TeX
предоставляет возможности для печати таблиц, в которых ширина
колонок выбирается автоматически (по максимальной ширине их
содержимого). В LaTeX'е для этих целей используются
окружения {tabular} (для набора таблиц с текстом) и {array} (для
набора таблиц из формул). Помимо автоматизированного определения
ширины колонки, эти окружения дают возможность печатать
разлинованные таблицы, таблицы, в которых некоторые записи
охватывают несколько колонок, и т.д. В лекции 2 уже шла
речь про окружение {array} ; здесь мы подробно разберем, как
работает {tabular} ; все возможности этого окружения, о
которых идет речь в этой лекции, доступны и для {array}, и
ниже мы дадим примеры их использования.
Окружение {tabular} задает таблицу. Окружению необходимо задать
обязательный аргумент — преамбулу
таблицы. Преамбула, помещаемая в фигурных
скобках непосредственно после \begin{tabular}, представляет
собой, в простейшем случае, последовательность букв, описывающих
структуру колонок таблицы (по букве на колонку). Буквы эти могут быть
такими:
Между \begin{tabular} (с преамбулой) и закрывающей
окружение командой \end{tabular} располагается собственно
текст таблицы. В нем
команда \\ разделяет строки таблицы, а знак "", называемый "
амперсендом", разделяет колонки таблицы внутри
одной строки (так что текст между двумя ближайшими амперсендами
описывает "одну графу" таблицы). Пробелы в начале или
конце "графы" таблицы игнорируются. Если вы прочли
мелкий шрифт в разд. 2.4.2, то могли заметить
буквальное совпадение с тем, что там написано про
окружение {array}. Разница лишь в том, что содержимое граф
таблицы обрабатывается в окружении {tabular} как текст, а в
окружении {array} — как формулы. Вот первый пример:
\begin{tabular}{lc}
Тип перечня нумерация \\[5pt]
\ttfamily itemize нет\\
\ttfamily enumerate есть\\
\ttfamily description нет\\
\end{tabular}
Обратите внимание на две вещи. Во-первых, команда \\,
завершающая первую строку, дана с необязательным аргументом. Он
задается так же и имеет тот же смысл, как если бы эта команда
была внутри абзаца или
окружения {tabbing}: после строки
вставляется дополнительный вертикальный промежуток (кстати, между
строками таблицы, определенной с помощью окружения {tabular},
разрыва страницы никогда не происходит, так что в этом
окружении у команды "\\" варианта "со звездочкой"
нет). Во-вторых, команда \ttfamily всякий раз меняла шрифт только в
одной графе таблицы, не действуя на соседние. Это объясняется
тем, что графа таблицы образует группу, так что любые
изменения параметров (в том числе текущего шрифта), проведенные в
одной графе, не влияют на остальные.
Прежде чем мы начнем говорить о более сложных вещах, скажем о
том, как окружение {tabular} взаимодействует с текстом вне
его. Подобно окружению {picture}, оно не начинает печать с
новой строки и не завершает текущего абзаца. Вся таблица,
порождаемая этим окружением, рассматривается TeX'ом как одна
большая буква; если окружение {tabular} встретилось в
середине абзаца, эта "буква" будет помещена в строку
(соседние строки раздвинутся, чтобы она поместилась), и результат
будет выглядеть некрасиво. Если такое размещение текста не входит
в ваши планы, начинайте окружение {tabular} между абзацами
(после пустой строки или команды \par ). Удобно также бывает
поместить окружение {tabular} внутрь окружения {center} или подобного ему: тогда
LaTeX сам позаботится о пробелах между таблицей и окружающим
текстом.
Иногда бывает полезно знать, как расположена "большая буква",
представляющая собой окружение {tabular}, по отношению к строке,
в которой она оказалась. Ответ: ее середина идет вровень с низом
строки (точнее, с "базисной линией" — см. лекции 8);
соответственно, на половинной высоте находится и точка отсчета этой
"буквы". Пример:
слово
\begin{tabular}{rr}
А Б\\В Г
\end{tabular}
слово
Можно также использовать
окружение {tabular} с необязательным
аргументом b : тогда "буква", созданная
окружением {tabular}, будет выровнена по нижней строке;
необязательный аргумент t дает выравнивание по верхней
строке:
слово
\begin{tabular}{rr}
А Б\\В Г
\end{tabular}
\begin{tabular}[t]{rr}
А Б\\В Г
\end{tabular}
\begin{tabular}[b]{rr}
А Б\\В Г
\end{tabular}
Как мог заметить читатель, необязательный аргумент в данном случае ставится перед обязательным.
Можно напечатать и разлинованную таблицу. Для этого
применяются команды, создающие
горизонтальные и вертикальные отрезки ("линейки" на
полиграфическом жаргоне).
Горизонтальные отрезки задаются с помощью
команды \hline. Эта
команда может следовать либо непосредственно после \\
(тогда отрезок печатается после строки, завершенной
этим \\ ), либо непосредственно
после \begin{tabular} и преамбулы (тогда отрезок
печатается перед началом таблицы). Задаваемый командой \hline
горизонтальный отрезок имеет ширину, равную общей ширине таблицы.
Что касается вертикальных отрезков, то давайте для начала также
ограничимся случаем, когда эти отрезки, разделяющие колонки
таблицы, простираются на всю ее высоту, сверху донизу. Такие
отрезки проще всего предусмотреть в преамбуле таблицы. До сих пор
мы говорили, что преамбула таблицы - это последовательность из
букв l, c или r, характеризующих колонки. На
самом деле в преамбуле может присутствовать и информация,
описывающая то, что должно быть между колонками таблицы. В
частности, символ |, помещенный в преамбулу таблицы
между буквами, описывающими колонки, задает вертикальную линейку,
разделяющую эти колонки. Можно поставить символ | перед первой
из этих букв или после последней — тогда вертикальная линейка будет
ограничивать таблицу слева или справа. Несколько таких символов могут
стоять подряд — тогда колонки будут разделяться не одинарной, а
двойной (тройной и т.д.) вертикальной линейкой. Вот пример
разлинованной таблицы:
\begin{tabular}{||l|l||}
\hline
слон zilonis\\
бегемот nilzirgs\\
лев lauva\\
\hline
\end{tabular}
Две команды \hline могут следовать одна непосредственно
за другой; в этом случае на печати получатся две
горизонтальные линейки, одна под другой, разделенные по вертикали
небольшим интервалом. Если слева и справа таблица ограничена
вертикальными линейками, то на пересечении крайних вертикальных
линеек с горизонтальными на печати получится
разрыв:
\begin{tabular}{|c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
Позже мы расскажем, как от этого разрыва можно избавиться.
Надписи, охватывающие несколько колонок.
Чтобы создать такую надпись, нужно на месте соответствующей графы
таблицы записать команду \multicolumn.
У этой команды три
обязательных аргумента:
Пример — в таблице (1)
$$\begin{tabular}{|l|l|l|l|} \hline \multicolumn{4}{|c|}{\textbf{Популярные напитки}}\\ \hline Название Старый мельник Бочкарев Очаковское\\ \hline Атрибут Душевное Правильное Живительное\\ \hline Цена \multicolumn{2}{c|}{15} \multicolumn{1}{c|}{14}\\ \hline \end{tabular}$$Получается эта таблица таким образом (обратите внимание, что в
строке с ценами в командах \multicolumn вертикальная черта стоит справа от
c, но не стоит слева):
\begin{tabular}{|l|l|l|l|}
\hline
\multicolumn{4}{|c|}{\textbf{Популярные напитки}}\\
\hline
Название Старый мельник Бочкарев Очаковское\\
\hline
АтрибутДушевное Правильное Живительное\\
\hline
Цена \multicolumn{2}{c|}{15} \multicolumn{1}{c|}{14}\\
\hline
\end{tabular}
Если таблица, в которой вы используете \multicolumn,
является к тому же еще и линованной, то возможностей
команды \hline для рисования горизонтальных отрезков может не
хватить: иногда бывает нужен горизонтальный отрезок,
простирающийся не на всю ширину таблицы, а охватывающий только
часть ее колонок. Для рисования таких отрезков предусмотрена
команда \cline.
Как и \hline, ее нужно давать сразу
после \\, но она имеет обязательный аргумент - номера
первой и последней из колонок, охватываемых горизонтальной
чертой, разделенные знаком "минус". Примеры использования
команды \cline будут даны ниже .
Абзацы в графах таблицы.
Иногда требуется, чтобы в графе таблицы стояла не строка, а абзац
текста, переносы и разрывы строк в котором находятся автоматически.
Чтобы этого добиться, надо в преамбуле вместо буквы l, c
или r, описывающей структуру колонки,
написать p{...}, где вместо
многоточия должна быть указана ширина колонки
(в TeX'овских единицах ).
Вот как можно представить в виде
таблицы известную шутку М.М.Жванецкого:
\begin{tabular}{|p{5cm}|p{5cm}|}
\hline
\multicolumn{2}{|c|}{\large\textbf{Я видел раков}}\\
\hline
Вчера: Сегодня: \\
Маленькие, но по три рубля, но очень
маленькие, но по три, но очень маленькие. Большие, но по пять рублей, но
большие,
по пять рублей, но очень большие,
но по пять.\\
\hline
\end{tabular}
По умолчанию абзацы в графах таблицы печатаются выровненными, но
без абзацного отступа; если абзацный отступ нужен, начните абзац
с установки необходимого значения параметра \parindent ; если
выравнивание не нужно, дайте команду \raggedright ; одним
словом, вы можете проделывать с этими абзацами все манипуляции,
описанные в разд.3.6 .
Из этого правила есть одно важное исключение: для принудительного
разрыва строки в абзацах, являющихся графами таблицы, вместо
команды \\ надо использовать
команду \tabularnewline
(команда \\ в окружениях {tabular} и {array}
означает "перейти к новой строке таблицы").
Что такое колонка? При работе с линованными таблицами возникает вопрос, как LaTeX понимает слова "одна колонка"? Пусть, например, преамбула таблицы имеет вид ||c|ll||r|l|l, и мы в одной из строк написали, скажем,
Что-то\multicolumn{1}{r}{Что-то еще}И ещеЕще\\"
Напечатается ли в этой графе вертикальный отрезок между первой и второй колонками? Другой пример: пусть в таблице с той же преамбулой какая-то из строк имеет вид
Слово Еще слово Еще одно\\
(стало быть, заканчивается эта строка преждевременно); сколько
вертикальных отрезков будет напечатано в конце этой строки? Ответ
таков. Преамбула
делится на части, соответствующие колонкам. Если в
преамбуле присутствуют только буквы l, c, r
или p, то каждая такая часть — это просто соответствующая
буква (p — вместе с выражением после нее: p{...} ). Если
же, кроме этого, в преамбуле присутствуют вертикальные черточки
между буквами или так называемые at-выражения (о них речь пойдет
ниже), разделение преамбулы на колонки происходит по таким
правилам:
В нашем примере, в частности, колонки устроены так:
$${\samepage \begin{tabbing} Четвертая колонка\quad\=\kill Преамбула \>\ttfamily\obeyspaces{}||c|ll||r|l|l\\ Первая колонка \>\ttfamily\obeyspaces{}||c|\\ Вторая колонка \>\ttfamily\obeyspaces{} l\\ Третья колонка \>\ttfamily\obeyspaces{} l||\\ Четвертая колонка\>\ttfamily\obeyspaces{} r|\\ Пятая колонка \>\ttfamily\obeyspaces{} l|\\ Шестая колонка \>\ttfamily\obeyspaces{} l\\ \end{tabbing} }$$Поэтому в конце графы таблицы с такой преамбулой, оборванной после
третьей колонки, будут напечатаны два вертикальных отрезка, поскольку
они принадлежат третьей колонке. А если на месте второй графы такой
таблицы написано "Что-то\multicolumn{1}{r}{Что-то еще}", то
вертикальный отрезок между первой и второй колонками также будет
напечатан: этот отрезок является принадлежностью первой колонки, и
команда \multicolumn, меняющая оформление второй колонки,
отменить его не может.
В этом разделе мы приведем различные примеры верстки сложных таблиц с
помощью LaTeX'а. По ходу дела будет рассказано и о некоторых
изысканных возможностях окружений {tabular} и {array}, о
которых до сих пор речи не было. Кое-где в этом разделе мы будем
предполагать, что читатель знаком со средствами математического
набора, описанными в лекции 2.
Наш первый пример — таблица французских притяжательных местоимений, взятая из русско-французского словаря акад. Л.В.Щербы (табл. 2),
$${\small \begin{tabular}{cll} \multicolumn{2}{c}{существительные формы} прилагательные формы\\[\smallskipamount] мой $\left\{ \begin{tabular}{l} le mien, la mienne\\les miens, les miennes\\ \end{tabular} \right.$ mon, ma, mes\\[\bigskipamount] твой $\left\{ \begin{tabular}{l} le tien, la tienne\\les tiens, les tiennes\\ \end{tabular}\right.$ ton, ta, tes\\[\bigskipamount] его, ее, свой $\left\{ \begin{tabular}{l} le sien, la sienne\\les siens, les siennes\\ \end{tabular}\right.$ son, sa, ses\\[\bigskipamount] наш le n\^otre, la n\^otre, les n\^otres notre, nos\\ ваш le v\^otre, la v\^otre, les v\^otres votre, vos\\ их, свой$^1$ le leur, la leur, les leurs leur, leurs\\ \cline{1-1} \multicolumn{3}{l}{$^1$\rule{0pt}{11pt}\footnotesize Лишь в значении принадлежности 3-му лицу.}\\ \end{tabular} }$${\small
\begin{tabular}{cll}
\multicolumn{2}{c}{существительные формы}
прилагательные формы\\[\smallskipamount]
мой $\left\{ \begin{tabular}{l}
le mien, la mienne\\les miens, les miennes\\
\end{tabular} \right.$
mon, ma, mes\\[\bigskipamount]
твой $\left\{ \begin{tabular}{l}
le tien, la tienne\\les tiens, les tiennes\\
\end{tabular}\right.$
ton, ta, tes\\[\bigskipamount]
его, ее, свой $left\{ \begin{tabular}{l}
le sien, la sienne\\les siens, les siennes\\
\end{tabular}\right.$
son, sa, ses\\[\bigskipamount]
наш le n\^otre, la n\^otre, les n\^otres notre, nos\\
ваш le v\^otre, la v\^otre, les v\^otres votre, vos\\
их, свой$^1$ le leur, la leur, les leurs
leur, leurs\\ \cline{1-1}
\multicolumn{3}{l}{$^1$\rule{0pt}{11pt}\footnotesize
Лишь в значении принадлежности 3-му лицу.}\\
\end{tabular}
}
Разберем, как устроена эта таблица. Как явствует из ее
преамбулы cll, она состоит из трех колонок,
из которых левая центрирована, а
две другие прижаты влево. Соответственно, три последние графы набраны
совершенно бесхитростно. Заголовок таблицы сделан с помощью
команды \multicolumn ; команда \\, завершающая первую строку
таблицы, имеет необязательный аргумент; это сделано, чтобы отодвинуть
заголовок по вертикали от остальной части таблицы.
Рассмотрим теперь, как устроена вторая графа (начинающаяся с местоимения "мой"). Текст
$$\left\{ \begin{tabular}{l} le mien, la mienne\\ les miens, les miennes\\ \end{tabular} \rightю$$образует в нашей таблице одну "запись" (часть таблицы,
расположенную на пересечении графы и колонки). Чтобы
получить фигурную скобку требуемого (и неизвестного нам заранее)
размера, мы воспользовались командами \left и \right,
применяемыми при наборе формул . Так как
эти команды вне формул использовать нельзя, нам пришлось оформить
этот фрагмент текста как формулу. Между \left\{
и \right. стоит, как водится, та формула, по размеру
которой получается фигурная скобка, заданная
командой \left\{ — в нашем случае эта "формула"
является фрагментом текста, задаваемым с помощью еще одного
окружения {tabular} (с преамбулой l).
Команды \\, завершающие первые три графы основной части
таблицы, имеют необязательные аргументы, задающие дополнительные
вертикальные пробелы после этих граф (иначе фигурные скобки будут
упираться друг в друга и портить вид таблицы).
К местоимению "свой" в последней строке таблицы дана сноска.
Знак сноски реализован нами опять же как математическая формула —
верхний индекс 1 к "пустой формуле"; текст сноски реализован как
графа таблицы, охватывающая все три колонки (с помощью
команды \multicolumn. Команда \footnotesize задает размер
шрифта, используемый в обычных сносках.
Линия, отделяющая сноску от остальной части таблицы, реализована с
помощью команды \cline. Наконец, посмотрим, как задана цифра 1 в
самом тексте сноски. Вместо ожидаемого $$^1$$ написано вот что:
$^1$\rule{0pt}{11pt}|
Как объясняется в разд. 3.10, команда \rule задает в данном
случае
Вся таблица в целом набрана мелким шрифтом (иначе она не помещалась на страницу).
Следующий пример (табл. 3 ) — расписание работы одной химчистки.
$$\begin{tabular}{lr@{--}l@{\qquad Обед\quad}r@{--}l} Понедельник $8^{30}$ 15 11 12 \\ Вторник 12 19 15 16 \\ Среда 10 17 $12^{30}$ $13^{15}$ \\ Четверг 9 17 12 13 \\ Пятница 11 16 \\ Суббота 8 14 11 12\\ \end{tabular}$$Для него исходный текст выглядит так:
\begin{tabular}{lr@{--}l@{\qquad Обед\quad}r@{--}l}
Понедельник $8^{30}$ 15 11 12 \\
Вторник 12 19 15 16 \\
Среда 10 17 $12^{30}$ $13^{15}$ \\
Четверг 9 17 12 13 \\
Пятница 11 16 \\
Суббота 8 14 11 12\\
\end{tabular}
В преамбуле тут используется конструкция, с которой мы пока не встречались. Объясним, что она делает.
До сих пор мы говорили, что в преамбуле каждая колонка таблицы может
обозначаться символом l, c,
r или "p{...}" , а
по краям или между колонками могут еще стоять вертикальные
черточки \|, обозначающие разделительные вертикальные линейки.
Это, однако, не вся правда. В качестве разделителя колонок (а
также с краев) в преамбуле может быть использовано еще и так
называемое "at- \multicolumn ). Мы использовали at-выражение трижды: два
раза для вставки тире и один раз - для слова "Обед".
А зачем же нам понадобились команды \qquad и \quad вокруг
этого слова? Дело в том, что между колонками, разделенными
at-выражением, не вставляется дополнительный интервал, которым
LaTeX разделяет колонки в таблицах, созданных с помощью
окружений {tabular} или {array}: именно поэтому тире
между часом открытия химчистки и часом ее закрытия плотно
прилегает к обоим числам. Слово "Обед", однако же, совсем не
должно вплотную прилегать к началу обеденного перерыва, поэтому
промежуток нужно создать самому, и проще это сделать один раз
внутри все того же at-выражения, чем писать \quad для каждого
рабочего дня.
Иногда at-выражение имеет смысл применять даже в виде @{}:
между колонками при этом ничего не вставится, но зато дополнительный
интервал между колонками, разделенными этим выражением, будет
подавлен. Если написать @{} в преамбуле перед символом,
обозначающим первую колонку, или после символа, обозначающего последнюю
колонку, то будет подавлен дополнительный интервал, вставляемый перед
первой или после последней колонки (это может помочь, если таблица
немного не помещается на страницу по ширине).
Иногда интервал между колонками, автоматически устанавливаемый
окружением {tabular} или {array}, является неудачным (ниже мы
разберем соответствующий пример). В этом случае можно самостоятельно
установить для него подходящее значение. Для этого надо присвоить
новое значение параметру \tabcolsep для окружения {tabular} или \arraycolsep для
окружения {array} (см.выше по поводу
параметров). По обе стороны от каждой колонки таблицы добавляется
пробел размером \tabcolsep (соответственно \arraycolsep ).
Стало быть, значение этих параметров — половина расстояния
между соседними колонками.
Наряду с расстоянием между колонками можно менять толщину линеек в
линованных таблицах
(обозначается \arrayrulewidth ;
относится этот параметр как к {array}, так и к {tabular} ), а
также расстояние между соседними линейками - это расстояние
обозначается \doublerulesep, и оно также относится в равной мере
к {array} и к {tabular}.
Теперь разберем обещанный пример, в котором приходится менять заданное по умолчанию расстояние между колонками. Посмотрите на такую формулу:
$$\arraycolsep=0.05em \begin{array}{rrr@{\,}r|r} x^2{}+2x{}-12\,x+5\\ \cline{5-5} x^2{}+5x\,x-3\\ \cline{1-2} {}-3x{}-12\\ {}-3x{}-15\\ \cline{2-3} 3 \end{array}$$Она была создана с помощью следующих LaTeX'овских команд:
$$
\arraycolsep=0.05em
\begin{array}{rrr@{\,}r|r}
x^2{}+2x,{}-12\,x+5\\
\cline{5-5}
x^2{}+5x\,x-3\\
\cline{1-2}
{}-3x{}-12\\
{}-3x{}-15\\
\cline{2-3}
3
\end{array}
$$
Сразу же скажем, зачем нам понадобилось менять \arraycolsep: без
этого интервалы между слагаемыми в каждой строке выходили непомерно
большими. А теперь разберем исходный текст подробнее. Начнем с
преамбулы rrr@{\,}r|r. В ней первые три колонки отведены под
слагаемые, наподобие $$x^2$$, $${}+2x$$
или $${}-12$$ ; пятая колонка
предназначена для делителя и частного ( $$x+5$$ и $$x-3$$ ), а
вертикальная
черточка в преамбуле перед буквой r, задающей пятую колонку —
для вертикального отрезка, входящего в состав "уголка". С другой
стороны, в четвертой колонке нет вообще никакого текста: между третьим
и четвертым знаками ни в одной строке ничего не написано. Эту
пустую колонку мы создали для того, чтобы вертикальный отрезок не
пошел ниже, чем нужно: без нее с преамбулой rrr|r
вертикальный отрезок относился бы к четвертой колонке, и в результате третья строка
закончилась бы вертикальным отрезком, что нам совсем ни к чему.
Осталось заметить, что пары долларов, ограничивающие выключную
формулу, заодно ограничивают и группу, так что по окончании
формулы закончится и группа, и старое значение \arraycolsep
восстановится автоматически.
Наш последний пример использования окружения {tabular} связан
с проблемой, с которой мы столкнулись на ранее: как
ликвидировать разрыв в вертикальных линейках, получающийся, если
в линованной таблице написать две команды \hline подряд?
Первое, что приходит в голову, — создать еще одну графу в
таблице, в которой поместить только невидимую линейку высотой,
скажем, 2 пункта; казалось бы, тогда горизонтальные линейки будут
на расстоянии 2 пункта друг от дружки, а вертикальные линейки не
будут прерываться. Результат, однако, получается совершенно
неудовлетворительный:
\begin{tabular}{|c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline \rule{0pt}{2pt}\\
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
Чтобы понять, в чем тут дело, нам придется обсудить, каким образом LaTeX собирает таблицу из отдельных строк.
Таблицы, созданные с помощью окружения {tabular}
или {array}, собираются из строк, которые вплотную
приставляются друг к другу. При этом, чтобы расстояния между
строками были одинаковыми, в каждую строку предварительно
вставляется невидимая линейка (именно, линейка, создаваемая
командой \ ). Из-за этой линейки расстояние между
горизонтальными отрезками оказалось слишком большим, а наша
линейка высотой в 2 пункта LaTeX'у не помогла: ведь \
все равно выше! Чтобы обойти эту трудность, в LaTeX'е
предусмотрен способ отменить автоматическую
постановку \ 'ов во всех строках таблицы. Именно, для
этого надо написать ( не внутри окружения {tabular}
или {array}!)
так:
\renewcommand{\arraystretch}{0}
Что такое \renewcommand, мы будем обсуждать в
лекции 7 , а пока давайте воспринимать
этот рецепт
догматически. Скажем только, что, во-первых, если эта команда
была дана внутри группы, то по выходе из группы ее действие
отменяется, и, во-вторых, в явном виде восстановление режима,
когда в каждую строку таблицы вставляется \,
достигается с помощью команды
\renewcommand{\arraystretch}{1}
Теперь уже легко добиться желаемого эффекта; надо только не
забыть поставить в нужные строки команду \ в явном виде,
коль скоро автоматически это теперь не делается. Итак,
таблица
набирается следующим образом:
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|c|c|}
\hline \strut Северо-Запад Северо-Восток\\
\hline \rule{0pt}{2pt}\\
\hline \strut Юго-Запад Юго-Восток\\
\hline
\end{tabular}%
}
Знаки процента в конце некоторых строк мы поставили, чтобы концы
этих строк не воспринимались как пробелы (на самом деле в данной
ситуации вреда от пробелов не было бы). Закрывающая фигурная
скобка в последней строке закрывает группу, из которой была дана
команда \renewcommand.
Если граф в таблице много, то, возможно, вам не захочется много
раз писать \. В этом случае можно включить эту команду
в преамбулу с помощью at-выражения. Возможный вариант такой:
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|@{\strut\hspace{\tabcolsep}}c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline
\multicolumn{1}{|c|}{\rule{0pt}{2pt}}\\
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
}
Если бы в аргументе at-выражения не был указан горизонтальный
пробел размером \tabcolsep, то левая вертикальная линейка была
бы напечатана вплотную к тексту (потому что at-выражение
подавляет автоматически вставляемый горизонтальный пробел);
заметим также, что теперь, когда \ включен в
at-выражение, нам пришлось воспользоваться
командой \multicolumn, чтобы этот \ не попал и в ту
строку, где мы так старались от него избавиться.
Описанный способ набрать таблицу с удвоенной горизонтальной
линейкой — не единственный. Если подключить описываемый в
следующем разделе стилевой пакет hhline, то можно это
сделать, и не играя с командой \arraystretch.
Можно не только отменять автоматическое добавление \ 'а в
строки таблицы, но и изменять его высоту. Например, если мы
хотим, чтобы размер этой линейки увеличился (во всех строках)
в $$3.7$$ раза, можно написать:
\renewcommand{\arraystretch}{3.7}
(вместо десятичной точки можно поставить и десятичную запятую).
Выше мы описывали возможности печати таблиц, доступные " чистому" LaTeX'у (без подключения дополнительных стилевых пакетов). Ряд стилевых пакетов, входящих в комплект поставки LaTeX'а, позволяет добиться дополнительных интересных эффектов.
В этом разделе мы рассказываем о различных мелких (но нередко полезных) дополнительных возможностях, открывающихся при подключении стилевого пакета array.
Итак, предположим, что этот пакет подключен. Что нового вы сможете сделать?
При пользовании командой \hline
горизонтальные линейки иногда слишком плотно примыкают к тексту
(особенно если текст содержит прописные буквы). В "
чистом" LaTeX'е для борьбы с этим надо либо писать
\renewcommand{\arraystretch}...
либо вставлять в каждую строку по дополнительной распорке. При
подключении пакета {array} появляется и более простой способ: надо
присвоить ненулевое значение параметру \extrarowheight. Это —
величина, которая добавляется к высоте каждой строки таблицы. Этому
параметру можно присваивать значения так же, как и любому другому
параметру со значением длины; по умолчанию его
величина равна нулю, для лучшего отделения линеек от текста хорошо
присвоить ему значение 2-3 пункта.
Если вы пользовались окружением {tabular} с необязательным
аргументом t, задающим выравнивание таблицы как "
буквы" по верхней строке, то могли обратить внимание, что это
выравнивание нарушается, если таблица начинается с горизонтальной
линейки:
\begin{tabular}[t]{rr}
а б \\в г
\end{tabular}
\begin{tabular}[t]{|rr|}
\hline а б \\в г\\
\hline
\end{tabular}
Чтобы выравнивание происходило не по линейке, а по первой строке
текста, надо задать верхнюю линейку командой \firsthline,
а не \hline. $$\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\hline а б в г \\
д е ж з\\ \hline
\end{tabular}\\[1in]
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\firsthline а б в г \\
д е ж з\\ \hline
\end{tabular}$$
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\hline а б в г \\
д е ж з\\ \hline
\end{tabular}\\[1in]
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\firsthline а б в г \\
д е ж з\\ \hline
\end{tabular}
Аналогично, чтобы при пользовании {tabular} с необязательным
аргументом b выравнивание таблицы как целого шло по нижней
строке текста, а не по нижней линейке, надо нижнюю горизонтальную
линейку задать командой \lasthline, а не \hline.
Как мы знаем, в преамбуле окружения {tabular} (а
также {array} ) могли стоять буквы l, r,
c или выражение p{...}, обозначающие тип колонки, а
между ними — вертикальные черточки или at-выражения.
Пакет {array} добавляет кое-что к этому списку.
Во-первых, при подключении этого пакета в преамбуле, наряду с
выражением p{...}, можно пользоваться
выражениями m{...} и b{...}. Как и p{...}, они указывают,
что в колонке стоит абзац текста ширины, заданной в фигурных
скобках. Однако в графах абзац, заданный с помощью b{...},
выравнивается по своей нижней строке, абзац, заданный с
помощью m{...} - по середине своей высоты, а абзац,
заданный с помощью p{...}, всегда выравнивался по своей
верхней строке.
\begin{tabular}{p{.9in}m{.9in}b{.9in}}
Все выше, и выше, и выше! Все выше, и выше, и выше! Все выше, и
выше, и выше!\\
\end{tabular}
Наряду с at-выражениями, пакет {array} позволяет использовать в
преамбуле еще и !-выражения. Именно, между буквами,
обозначающими колонки, можно, наряду с вертикальными черточками и
at-выражениями,
написать !{...},
где на месте точек стоят
какие-то TeX'овские команды и/или текст. Эта конструкция оказывает
то же действие, что и at-выражение, но при этом, в отличие от
at-выражения, не подавляет интервал между колонками. Поэтому
!-выражение удобно использовать для увеличения интервала между
колонками: в таблице с преамбулой
{rc!{\hspace{2pt}}cl}
интервал между двумя центрированными колонками будет увеличен на два пункта.
Другое возможное применение !-выражений — печать линованных
таблиц, в которых вертикальные линейки, разделяющие колонки, имеют
разную ширину. Если, например, мы хотим, чтобы какая-то из
вертикальных линеек имела ширину 1pt, а
не \arrayrulewidth, надо в преамбуле вместо вертикальной
черточки |, обозначающей эту линейку,
написать !{\vrule width 1pt\relax}.
Наконец, еще одна интересная возможность, предоставляемая
пакетом {array}, — это автоматическая вставка TeX'овских
команд в начале и/или конце колонки. Именно, если в преамбуле
непосредственно перед любой из букв l, c,
r, t, m или b, обозначающих тип
колонки, вставить выражение
>{команды}
то команды будут автоматически добавляться в начало соответствующей колонки. Это может пригодиться, если вам нужно сменить шрифт в одной из колонок:
$$\begin{tabular}{|>{Генрих }l|>{\slshape}l|} \hline II 1519--1559\\III 1551--1589\\ IV 1553--1610\\ \hline \end{tabular}$$\begin{tabular}{|>{Генрих }l|>{\slshape}l|}
\hline
II 1519--1559\\III 1551--1589\\
IV 1553--1610\\ \hline
\end{tabular}
Можно также после буквы, обозначающей тип колонки, или после конца p-, m-, или b-выражения, написать
<{команды}
чтобы команды были добавлены в конец колонки.
Эта конструкция полезна, если какие-то из колонок в таблице,
оформленной как {tabular}, должны набираться в математическом
режиме — достаточно поставить в начале и конце этой колонки по знаку
доллара. Пример:
\begin{tabular}{l>{$}l<{$}}
квадрат суммы (x+y)^2\\
квадрат разности (x-y)^2\\
сумма кубов x^3+y^3
\end{tabular}
Возможностей окружения {array} вполне хватает для печати
простейших линованных таблиц, но в более сложных случаях
возникают проблемы. Если
подключить стилевой пакет {hhline}, работа с линованными
таблицами облегчается.
Итак, предположим, что этот пакет подключен. Тогда для задания
горизонтальных линеек становится доступной, наряду с уже
известными \hline и \cline, новая команда \hhline, в
аргументе которой описывается как сама линейка, так и ее пересечения с
вертикальными линейками. Вот первый пример ее использования:
\begin{tabular}{|c|cc|c|}
\hline А Б В Г\\
\hhline{|=|~~|-|}
Д Е Ж З\\ \hline
\end{tabular}
Аргумент команды \hhline устроен следующим образом.
Во-первых, в нем сказано, что на территории первой колонки
линейка должна быть двойной (символ =), на территории
второй и третьей колонок линейки не должно быть вовсе
(символ ~ - "тильда"), а на территории четвертой
колонки линейка должна быть одинарной (символ -). Если в
таблице $$n$$ колонок, то в аргументе \hhline должны
присутствовать $$n$$ символов -, = или ~,
имеющих тот же смысл, что и выше.
Между этими символами, описывающими поведение линейки внутри колонок, расположены символы, описывающие пересечения горизонтальной линейки с вертикальными. В нашем примере это были вертикальные черточки |; кроме них, для задания информации о пересечениях линеек можно использовать символы :, #, а также буквы t и b. Какие именно пересечения линеек можно получить с их помощью, видно из следующей таблицы:
$$\begin{center} \begin{tabular}{@{}lcccccc@{}} На печати \TT \TTa \TTT, \TTTu, \TTTl \XX \XXa\XXX, \XXXu, \XXXl \\ В аргументе \cs(hhline) \ttfamily |- \ttfamily -| \ttfamily -|- \ttfamily |= \ttfamily =| \ttfamily =|=\\[4pt] На печати \YY \YYa \YYY, \YYYu, \YYYl \LL \LLa \LLL\\ В аргументе \cs(hhline) \ttfamily := \ttfamily =: \ttfamily =:= \ttfamily ||- \ttfamily -|| \ttfamily -||- \\[4pt] На печати \ZZ \ZZa \ZZZ \UU \UUa \UUU, \UUUu, \UUUl\\ В аргументе \cs(hhline) \ttfamily |:= \ttfamily =:| \ttfamily =::= \ttfamily \char`\#= \ttfamily =\char`\# \ttfamily =\char`\#=\\[4pt] На печати \WW \RR \QQ \PP \ZZZu \ZZZl \\ В аргументе \cs(hhline) \ttfamily|t:= \ttfamily |b:= \ttfamily =:t| \ttfamily =:b| \ttfamily =:t:= \ttfamily =:b:= \end{tabular} \end{center}$$Вот пример таблицы, в которой используются эти возможности
команды \hhline:
\begin{tabular}{||cc||cc||}
\hhline{|t:==:t:==:t|}
1 2 3 4\\5 6 7 8\\
\hhline{#==::==||}
А Б В Г\\
\hhline{||--||~~}
Д Е Ж З\\
\hhline{|b:==:b:==:b|}
\end{tabular}
Подчеркнем, что команда \hhline обрабатывает пересечения
линеек независимо от того, какие вертикальные линейки заданы в
преамбуле. Забота о том, чтобы аргумент \hhline был согласован с
преамбулой, лежит на вас.
Как уже отмечалось, окружения {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
1234\\
\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 даст таблицу, прижатую влево.
При работе на пишущей машинке печать таблиц, состоящих из нескольких колонок, не вызывала особых проблем: все литеры имели одинаковую ширину. Однако полиграфические шрифты (в частности, используемые TeX'ом) являются, как правило, "пропорциональными" (каждая буква имеет свою ширину), и в этом случае добиться выравнивания в колонках сложнее.
В настоящей лекции мы рассмотрим два основных способа, предоставляемых TeX'ом для печати текста с выровненными колонками (например, таблиц). Начнем с менее мощного, но более простого — имитации табулятора.
Табулятор имитируется в LaTeX'е с помощью окружения {tabbing}. При печати таблиц с помощью этого окружения
пользователь сам задает места, в которых должна начаться
очередная колонка. Конкретно это выглядит так. При наборе первой
строки этого окружения можно в любой момент поставить
команду \= в окружении {tabbing} - она отмечает
очередное место, с которого начинается новая колонка ("позицию
табуляции"). Это место
(расстояние от начала строки) запоминается, и в дальнейшем можно с
помощью команды \>
"перескочить" к очередной позиции табуляции — текст,
следующий после этой команды, будет набираться, начиная с позиции
табуляции. Строки разделяются
командой \\. Рассмотрим это
на примере:
\begin{tabbing}
начало\quad\=середина
\quad\=конец\\
раз\>два\>три\\
раз\> два\> три\\
начинаем\>
продолжаем\>
заканчиваем\\
\end{tabbing}
В первой строке мы задали две позиции табуляции двумя
командами \= (на всякий случай мы разделили дополнительными
пробелами слова в первой строке и, тем самым, наши позиции
табуляции; отсюда команды \quad ). Первая строка завершается
командой \\, а во второй строке мы начинаем установленными
позициями табуляции пользоваться. Слово "раз" напечаталось
с начала строки (каждая строка начинается с крайней левой
позиции, если отсутствует команда вроде \>, задающая
переход к новой позиции). Далее идет команда \> — "
перейти на следующую позицию табуляции". И действительно,
следующее после нее слово "два" начинается со второй
позиции — как раз там же, где начиналось слово "середина".
Перед словом "три" стоит еще одна команда \> —
оно печатается с третьей позиции, как раз под словом "
конец", с начала которого мы эту позицию и определили. Третья
строка ничем не отличается от четвертой, хотя в исходном тексте
между командами \> и словами стоят пробелы. Дело в том,
что пробелы после команд \> игнорируются. Наконец, в
четвертой строке слова при печати наложились друг на друга. Это и
не удивительно: окружение {tabbing} исправно начинает
очередную порцию текста с той позиции, которую мы ему указали, но
при этом не проверяет, сколько места этот текст реально займет и
не будут ли перекрываться колонки — за это целиком отвечает
тот, кто текст готовит. Видимо, в данном случае следовало
оставить побольше места при определении позиций табуляции
(например, написать в первой строке \qquad вместо \quad ).
Кроме установки дополнительных интервалов экспериментальным путем,
есть и другой способ правильно проставить позиции табуляции. Именно,
если закончить строку не командой \\, а командой с суровым
названием \kill, то эта строка не будет напечатана, но все позиции табуляции,
установленные в ней, будут запомнены LaTeX'ом, и их можно будет
использовать в последующих строках. В приведенном выше примере можно
было бы написать так:
\begin{tabbing}
начинаем \=продолжаем \=
заканчиваем\kill
начало\>середина\>конец\\
\bfseries раз\>
\itshape два\>три\\
начинаем\>продолжаем\>
заканчиваем\\
\end{tabbing}
Обратите внимание, что при установке позиций табуляции в первой
(не печатающейся) строке мы сделали пробелы между концом слова и
командой \= (иначе в последней строке слова бы опять слились:
нам нужно, чтобы первая позиция табуляции не была впритык к
концу слова "начинаем"). Заметьте также, что во второй
строке мы убрали команды \quad ; можно было бы их и
оставить — на внешний вид таблицы это бы никак не повлияло,
поскольку позиции табуляции уже установлены и лишние пробелы
перед очередной командой \> никого не волнуют. По этой же
причине мы не потрудились оставить пробелы между словами
и \> в строке "
начинаем, продолжаем, заканчиваем". Наконец, обратите внимание
и на то, как мы меняли шрифт в строке "раз, два, три": слово
"три" переключилось на обычный шрифт само собой. Это
объясняется тем, что часть текста окружения {tabbing}, расположенная между двумя командами \> или \=, образует группу.
Внутри окружения {tabbing} используется команда \=,
которая, как мог заметить читатель, обычно имеет совсем другой
смысл — постановка диакритического знака над буквой. Команды \' и \` также
имеют внутри этого окружения особый смысл, о котором пойдет речь
ниже. Поэтому, если внутри {tabbing} нам понадобился
диакритический знак (скажем, над буквой e), то надо
руководствоваться такой таблицей:
| вместо | надо набирать |
|---|---|
\=e |
\a=e |
\'e |
\a'e |
\`e |
\a`e |
Интервалы и разрыв между строками.
Команда \\ внутри окружения {tabbing} может иметь
необязательный аргумент, действующий формально так же, как для этой
команды, употребляемой внутри абзаца: если в квадратных скобках
поставить длину (измеренную в воспринимаемых TeX'ом единицах, или же какой-либо LaTeX'овский параметр,
значением которого является длина, например, \medskipamount ), то
после этой строки будет сделан дополнительный интервал, величина
которого равна указанной длине. Имеет команда \\ и "вариант
со звездочкой", если
написать \\*
вместо \\, то после строки, завершаемой этой командой, начинать
новую страницу будет запрещено. Команда \\* также может
принимать необязательный аргумент. Он имеет тот же смысл, что и для
соответствующей команды без звездочки.
Переустановка позиций табуляции.
Команды \=, устанавливающие позиции табуляции, можно давать не
только в первой строке. Сначала
пример:
\begin{tabbing}
парочка \=позиций
\=табуляции\\
\>плюс\>еще
одна здесь:\=\\
теперь\>их\>
уже\>три\\
Вторую \>мы\quad
\=сменим \>
и посмотрим:\\
где\>эти\>
позиции\>теперь\\
\end{tabbing}
Опишем точно, как команда \= взаимодействует с \>.
Внутри окружения {tabbing} в каждый момент LaTeX'у известно
некоторое количество позиций табуляции, занумерованных подряд, от
нуля до какого-то целого числа (не более двенадцати). При входе в
окружение известна только позиция с номером нуль (это всегда
начало строки). Увеличиваться число известных позиций может за
счет команды \=, используются позиции табуляции
командой \>. Если команда \= встречается в строке после того, как использованы все известные позиции табуляции,
то количество известных позиций табуляции увеличивается на 1 и
очередная позиция табуляции устанавливается в месте, куда
попала команда \=. Если же \= встречается в строке до
того, как все известные позиции табуляции израсходованы, то новых
известных позиций не прибавляется, просто очередная по счету
позиция табуляции заменяется на ту, которую задает
команда \=.
Иногда бывает необходимо в пределах одной и той же таблицы временно
перейти на новое расположение позиций табуляции, а затем вернуться к
прежнему. Для этого используются команды \pushtabs
и \poptabs.
Первая из них запоминает расположение позиций табуляции; после этой
команды можно позиции переустановить, пользоваться этими новыми
переустановленными позициями... — после команды \poptabs
значения старых позиций табуляции будут восстановлены.
Пример:
\begin{tabbing}
раз\quad\=два\quad\=три\quad\=четыре\\
\pushtabs гиппопотам\quad\=аллигатор\\
раз\>два\\ три\>четыре\\
\poptabs
one\>two\>three\>four\\
viens\>divi\>tr\a=\i s\>\v{c}etri\\
\end{tabbing}
Команды \pushtabs и \poptabs должны быть "сбалансированы": каждой команде \pushtabs, запоминающей позиции
табуляции, должна соответствовать вспоминающая их команда \poptabs. Если
это условие не выполнено, вы получите сообщение об ошибке. Обратите
также внимание, что знак долготы над буквой i в слове tr
("три" по-латышски) мы
поставили с помощью команды \a. \looseness 1
Экзотика.
Для полноты картины опишем некоторые изысканные возможности
окружения {tabbing}.
Команда \' (внутри
окружения {tabbing} ) размещает текст таким образом, чтобы он не
начинался, а заканчивался у позиции табуляции. Сама эта
команда позиций табуляции "не тратит"; просто весь текст,
размещенный между \> или \= и \', размещается левее
позиции табуляции, определяемой командой \> или \=. Таким
способом можно верстать таблицы, в которых колонки выровнены по
правому краю, а не по левому, как получается при обычном
использовании {tabbing}. Вот пример:
\begin{tabbing}
\hspace{3.5cm}\=\kill
слева\>справа\'\\
\a`a gauche\>\a`a droite\'\\
links\>rechts\'\\
pa kreisi\>pa labi\'
\end{tabbing}
Еще раз обратите внимание, что для постановки диакритического знака
над буквой a нам пришлось писать "\a`" вместо \`.
Команда \` внутри
окружения {tabbing} прижимает весь текст строки, идущий после нее,
к правому краю; между этой командой и командой, завершающей строку, не
должно быть команд, использующих или устанавливающих позиции
табуляции. Например, таблицу, у которой первая колонка выровнена по
левому краю, а вторая — по правому (как в предыдущем примере), можно
было бы задать так:
\begin{tabbing}
слева\`справа\\
\a`a gauche\`\a`a droite\\
links\`rechts\\
pa kreisi\`pa labi\\
\end{tabbing}
Кстати, здесь нам вообще не понадобилось устанавливать позиции табуляции. Впрочем, смотрится эта таблица неважно.
Как мы уже отмечали, при начале новой строки текст начинается с
нулевой позиции табуляции, т. е. с начала строки.
Команда \+
позволяет изменить такое положение вещей: после этой команды при
начале каждой новой строки текст будет начинаться не с нулевой, а с
первой позиции табуляции (как если бы каждая последующая строка
начиналась с команды \> ). Если дать еще одну команду \+,
то текст в последующих строках будет начинаться уже и не с первой, а
со второй позиции, и т. д. Команда \- в
окружении {tabbing} внутри окружения {tabbing} означает вовсе
не место, где можно перенести слово (впрочем, команда с таким
действием в этом окружении и не нужна): она действует противоположно
команде \+. Наконец, команда \<, будучи
употребленной в начале строки (в других местах ее употреблять нельзя),
действует аналогично \-, но в пределах только этой строки (а не
всех последующих, как \+ и \- ). Следующий пример
иллюстрирует все эти изыски:
\begin{tabbing}
раз \=два \=три \=\kill
раз\>два\>три\>четыре\+\\
два\+\\ три\+\\ четыре\\
\<три\\ четыре\-\-\\
два\-\\
раз\>два\>три\>четыре\\
\end{tabbing}
Описанные в этом разделе возможности окружения {tabbing} на
практике используются редко, поскольку для печати сложных таблиц
в LaTeX'е есть более удобное средство —
окружение {tabular}. Перейдем к его описанию.
При пользовании окружением {tabbing} вы должны самостоятельно
следить, чтобы разные колонки не накладывались друг на друга.
Можно, однако, передать эти заботы программе: TeX
предоставляет возможности для печати таблиц, в которых ширина
колонок выбирается автоматически (по максимальной ширине их
содержимого). В LaTeX'е для этих целей используются
окружения {tabular} (для набора таблиц с текстом) и {array} (для
набора таблиц из формул). Помимо автоматизированного определения
ширины колонки, эти окружения дают возможность печатать
разлинованные таблицы, таблицы, в которых некоторые записи
охватывают несколько колонок, и т.д. В лекции 2 уже шла
речь про окружение {array} ; здесь мы подробно разберем, как
работает {tabular} ; все возможности этого окружения, о
которых идет речь в этой лекции, доступны и для {array}, и
ниже мы дадим примеры их использования.
Окружение {tabular} задает таблицу. Окружению необходимо задать
обязательный аргумент — преамбулу
таблицы. Преамбула, помещаемая в фигурных
скобках непосредственно после \begin{tabular}, представляет
собой, в простейшем случае, последовательность букв, описывающих
структуру колонок таблицы (по букве на колонку). Буквы эти могут быть
такими:
Между \begin{tabular} (с преамбулой) и закрывающей
окружение командой \end{tabular} располагается собственно
текст таблицы. В нем
команда \\ разделяет строки таблицы, а знак "", называемый "
амперсендом", разделяет колонки таблицы внутри
одной строки (так что текст между двумя ближайшими амперсендами
описывает "одну графу" таблицы). Пробелы в начале или
конце "графы" таблицы игнорируются. Если вы прочли
мелкий шрифт в разд. 2.4.2, то могли заметить
буквальное совпадение с тем, что там написано про
окружение {array}. Разница лишь в том, что содержимое граф
таблицы обрабатывается в окружении {tabular} как текст, а в
окружении {array} — как формулы. Вот первый пример:
\begin{tabular}{lc}
Тип перечня нумерация \\[5pt]
\ttfamily itemize нет\\
\ttfamily enumerate есть\\
\ttfamily description нет\\
\end{tabular}
Обратите внимание на две вещи. Во-первых, команда \\,
завершающая первую строку, дана с необязательным аргументом. Он
задается так же и имеет тот же смысл, как если бы эта команда
была внутри абзаца или
окружения {tabbing}: после строки
вставляется дополнительный вертикальный промежуток (кстати, между
строками таблицы, определенной с помощью окружения {tabular},
разрыва страницы никогда не происходит, так что в этом
окружении у команды "\\" варианта "со звездочкой"
нет). Во-вторых, команда \ttfamily всякий раз меняла шрифт только в
одной графе таблицы, не действуя на соседние. Это объясняется
тем, что графа таблицы образует группу, так что любые
изменения параметров (в том числе текущего шрифта), проведенные в
одной графе, не влияют на остальные.
Прежде чем мы начнем говорить о более сложных вещах, скажем о
том, как окружение {tabular} взаимодействует с текстом вне
его. Подобно окружению {picture}, оно не начинает печать с
новой строки и не завершает текущего абзаца. Вся таблица,
порождаемая этим окружением, рассматривается TeX'ом как одна
большая буква; если окружение {tabular} встретилось в
середине абзаца, эта "буква" будет помещена в строку
(соседние строки раздвинутся, чтобы она поместилась), и результат
будет выглядеть некрасиво. Если такое размещение текста не входит
в ваши планы, начинайте окружение {tabular} между абзацами
(после пустой строки или команды \par ). Удобно также бывает
поместить окружение {tabular} внутрь окружения {center} или подобного ему: тогда
LaTeX сам позаботится о пробелах между таблицей и окружающим
текстом.
Иногда бывает полезно знать, как расположена "большая буква",
представляющая собой окружение {tabular}, по отношению к строке,
в которой она оказалась. Ответ: ее середина идет вровень с низом
строки (точнее, с "базисной линией" — см. лекции 8);
соответственно, на половинной высоте находится и точка отсчета этой
"буквы". Пример:
слово
\begin{tabular}{rr}
А Б\\В Г
\end{tabular}
слово
Можно также использовать
окружение {tabular} с необязательным
аргументом b : тогда "буква", созданная
окружением {tabular}, будет выровнена по нижней строке;
необязательный аргумент t дает выравнивание по верхней
строке:
слово
\begin{tabular}{rr}
А Б\\В Г
\end{tabular}
\begin{tabular}[t]{rr}
А Б\\В Г
\end{tabular}
\begin{tabular}[b]{rr}
А Б\\В Г
\end{tabular}
Как мог заметить читатель, необязательный аргумент в данном случае ставится перед обязательным.
Можно напечатать и разлинованную таблицу. Для этого
применяются команды, создающие
горизонтальные и вертикальные отрезки ("линейки" на
полиграфическом жаргоне).
Горизонтальные отрезки задаются с помощью
команды \hline. Эта
команда может следовать либо непосредственно после \\
(тогда отрезок печатается после строки, завершенной
этим \\ ), либо непосредственно
после \begin{tabular} и преамбулы (тогда отрезок
печатается перед началом таблицы). Задаваемый командой \hline
горизонтальный отрезок имеет ширину, равную общей ширине таблицы.
Что касается вертикальных отрезков, то давайте для начала также
ограничимся случаем, когда эти отрезки, разделяющие колонки
таблицы, простираются на всю ее высоту, сверху донизу. Такие
отрезки проще всего предусмотреть в преамбуле таблицы. До сих пор
мы говорили, что преамбула таблицы - это последовательность из
букв l, c или r, характеризующих колонки. На
самом деле в преамбуле может присутствовать и информация,
описывающая то, что должно быть между колонками таблицы. В
частности, символ |, помещенный в преамбулу таблицы
между буквами, описывающими колонки, задает вертикальную линейку,
разделяющую эти колонки. Можно поставить символ | перед первой
из этих букв или после последней — тогда вертикальная линейка будет
ограничивать таблицу слева или справа. Несколько таких символов могут
стоять подряд — тогда колонки будут разделяться не одинарной, а
двойной (тройной и т.д.) вертикальной линейкой. Вот пример
разлинованной таблицы:
\begin{tabular}{||l|l||}
\hline
слон zilonis\\
бегемот nilzirgs\\
лев lauva\\
\hline
\end{tabular}
Две команды \hline могут следовать одна непосредственно
за другой; в этом случае на печати получатся две
горизонтальные линейки, одна под другой, разделенные по вертикали
небольшим интервалом. Если слева и справа таблица ограничена
вертикальными линейками, то на пересечении крайних вертикальных
линеек с горизонтальными на печати получится
разрыв:
\begin{tabular}{|c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
Позже мы расскажем, как от этого разрыва можно избавиться.
Надписи, охватывающие несколько колонок.
Чтобы создать такую надпись, нужно на месте соответствующей графы
таблицы записать команду \multicolumn.
У этой команды три
обязательных аргумента:
Пример — в таблице (1)
$$\begin{tabular}{|l|l|l|l|} \hline \multicolumn{4}{|c|}{\textbf{Популярные напитки}}\\ \hline Название Старый мельник Бочкарев Очаковское\\ \hline Атрибут Душевное Правильное Живительное\\ \hline Цена \multicolumn{2}{c|}{15} \multicolumn{1}{c|}{14}\\ \hline \end{tabular}$$Получается эта таблица таким образом (обратите внимание, что в
строке с ценами в командах \multicolumn вертикальная черта стоит справа от
c, но не стоит слева):
\begin{tabular}{|l|l|l|l|}
\hline
\multicolumn{4}{|c|}{\textbf{Популярные напитки}}\\
\hline
Название Старый мельник Бочкарев Очаковское\\
\hline
АтрибутДушевное Правильное Живительное\\
\hline
Цена \multicolumn{2}{c|}{15} \multicolumn{1}{c|}{14}\\
\hline
\end{tabular}
Если таблица, в которой вы используете \multicolumn,
является к тому же еще и линованной, то возможностей
команды \hline для рисования горизонтальных отрезков может не
хватить: иногда бывает нужен горизонтальный отрезок,
простирающийся не на всю ширину таблицы, а охватывающий только
часть ее колонок. Для рисования таких отрезков предусмотрена
команда \cline.
Как и \hline, ее нужно давать сразу
после \\, но она имеет обязательный аргумент - номера
первой и последней из колонок, охватываемых горизонтальной
чертой, разделенные знаком "минус". Примеры использования
команды \cline будут даны ниже .
Абзацы в графах таблицы.
Иногда требуется, чтобы в графе таблицы стояла не строка, а абзац
текста, переносы и разрывы строк в котором находятся автоматически.
Чтобы этого добиться, надо в преамбуле вместо буквы l, c
или r, описывающей структуру колонки,
написать p{...}, где вместо
многоточия должна быть указана ширина колонки
(в TeX'овских единицах ).
Вот как можно представить в виде
таблицы известную шутку М.М.Жванецкого:
\begin{tabular}{|p{5cm}|p{5cm}|}
\hline
\multicolumn{2}{|c|}{\large\textbf{Я видел раков}}\\
\hline
Вчера: Сегодня: \\
Маленькие, но по три рубля, но очень
маленькие, но по три, но очень маленькие. Большие, но по пять рублей, но
большие,
по пять рублей, но очень большие,
но по пять.\\
\hline
\end{tabular}
По умолчанию абзацы в графах таблицы печатаются выровненными, но
без абзацного отступа; если абзацный отступ нужен, начните абзац
с установки необходимого значения параметра \parindent ; если
выравнивание не нужно, дайте команду \raggedright ; одним
словом, вы можете проделывать с этими абзацами все манипуляции,
описанные в разд.3.6 .
Из этого правила есть одно важное исключение: для принудительного
разрыва строки в абзацах, являющихся графами таблицы, вместо
команды \\ надо использовать
команду \tabularnewline
(команда \\ в окружениях {tabular} и {array}
означает "перейти к новой строке таблицы").
Что такое колонка? При работе с линованными таблицами возникает вопрос, как LaTeX понимает слова "одна колонка"? Пусть, например, преамбула таблицы имеет вид ||c|ll||r|l|l, и мы в одной из строк написали, скажем,
Что-то\multicolumn{1}{r}{Что-то еще}И ещеЕще\\"
Напечатается ли в этой графе вертикальный отрезок между первой и второй колонками? Другой пример: пусть в таблице с той же преамбулой какая-то из строк имеет вид
Слово Еще слово Еще одно\\
(стало быть, заканчивается эта строка преждевременно); сколько
вертикальных отрезков будет напечатано в конце этой строки? Ответ
таков. Преамбула
делится на части, соответствующие колонкам. Если в
преамбуле присутствуют только буквы l, c, r
или p, то каждая такая часть — это просто соответствующая
буква (p — вместе с выражением после нее: p{...} ). Если
же, кроме этого, в преамбуле присутствуют вертикальные черточки
между буквами или так называемые at-выражения (о них речь пойдет
ниже), разделение преамбулы на колонки происходит по таким
правилам:
В нашем примере, в частности, колонки устроены так:
$${\samepage \begin{tabbing} Четвертая колонка\quad\=\kill Преамбула \>\ttfamily\obeyspaces{}||c|ll||r|l|l\\ Первая колонка \>\ttfamily\obeyspaces{}||c|\\ Вторая колонка \>\ttfamily\obeyspaces{} l\\ Третья колонка \>\ttfamily\obeyspaces{} l||\\ Четвертая колонка\>\ttfamily\obeyspaces{} r|\\ Пятая колонка \>\ttfamily\obeyspaces{} l|\\ Шестая колонка \>\ttfamily\obeyspaces{} l\\ \end{tabbing} }$$Поэтому в конце графы таблицы с такой преамбулой, оборванной после
третьей колонки, будут напечатаны два вертикальных отрезка, поскольку
они принадлежат третьей колонке. А если на месте второй графы такой
таблицы написано "Что-то\multicolumn{1}{r}{Что-то еще}", то
вертикальный отрезок между первой и второй колонками также будет
напечатан: этот отрезок является принадлежностью первой колонки, и
команда \multicolumn, меняющая оформление второй колонки,
отменить его не может.
В этом разделе мы приведем различные примеры верстки сложных таблиц с
помощью LaTeX'а. По ходу дела будет рассказано и о некоторых
изысканных возможностях окружений {tabular} и {array}, о
которых до сих пор речи не было. Кое-где в этом разделе мы будем
предполагать, что читатель знаком со средствами математического
набора, описанными в лекции 2.
Наш первый пример — таблица французских притяжательных местоимений, взятая из русско-французского словаря акад. Л.В.Щербы (табл. 2),
$${\small \begin{tabular}{cll} \multicolumn{2}{c}{существительные формы} прилагательные формы\\[\smallskipamount] мой $\left\{ \begin{tabular}{l} le mien, la mienne\\les miens, les miennes\\ \end{tabular} \right.$ mon, ma, mes\\[\bigskipamount] твой $\left\{ \begin{tabular}{l} le tien, la tienne\\les tiens, les tiennes\\ \end{tabular}\right.$ ton, ta, tes\\[\bigskipamount] его, ее, свой $\left\{ \begin{tabular}{l} le sien, la sienne\\les siens, les siennes\\ \end{tabular}\right.$ son, sa, ses\\[\bigskipamount] наш le n\^otre, la n\^otre, les n\^otres notre, nos\\ ваш le v\^otre, la v\^otre, les v\^otres votre, vos\\ их, свой$^1$ le leur, la leur, les leurs leur, leurs\\ \cline{1-1} \multicolumn{3}{l}{$^1$\rule{0pt}{11pt}\footnotesize Лишь в значении принадлежности 3-му лицу.}\\ \end{tabular} }$${\small
\begin{tabular}{cll}
\multicolumn{2}{c}{существительные формы}
прилагательные формы\\[\smallskipamount]
мой $\left\{ \begin{tabular}{l}
le mien, la mienne\\les miens, les miennes\\
\end{tabular} \right.$
mon, ma, mes\\[\bigskipamount]
твой $\left\{ \begin{tabular}{l}
le tien, la tienne\\les tiens, les tiennes\\
\end{tabular}\right.$
ton, ta, tes\\[\bigskipamount]
его, ее, свой $left\{ \begin{tabular}{l}
le sien, la sienne\\les siens, les siennes\\
\end{tabular}\right.$
son, sa, ses\\[\bigskipamount]
наш le n\^otre, la n\^otre, les n\^otres notre, nos\\
ваш le v\^otre, la v\^otre, les v\^otres votre, vos\\
их, свой$^1$ le leur, la leur, les leurs
leur, leurs\\ \cline{1-1}
\multicolumn{3}{l}{$^1$\rule{0pt}{11pt}\footnotesize
Лишь в значении принадлежности 3-му лицу.}\\
\end{tabular}
}
Разберем, как устроена эта таблица. Как явствует из ее
преамбулы cll, она состоит из трех колонок,
из которых левая центрирована, а
две другие прижаты влево. Соответственно, три последние графы набраны
совершенно бесхитростно. Заголовок таблицы сделан с помощью
команды \multicolumn ; команда \\, завершающая первую строку
таблицы, имеет необязательный аргумент; это сделано, чтобы отодвинуть
заголовок по вертикали от остальной части таблицы.
Рассмотрим теперь, как устроена вторая графа (начинающаяся с местоимения "мой"). Текст
$$\left\{ \begin{tabular}{l} le mien, la mienne\\ les miens, les miennes\\ \end{tabular} \rightю$$образует в нашей таблице одну "запись" (часть таблицы,
расположенную на пересечении графы и колонки). Чтобы
получить фигурную скобку требуемого (и неизвестного нам заранее)
размера, мы воспользовались командами \left и \right,
применяемыми при наборе формул . Так как
эти команды вне формул использовать нельзя, нам пришлось оформить
этот фрагмент текста как формулу. Между \left\{
и \right. стоит, как водится, та формула, по размеру
которой получается фигурная скобка, заданная
командой \left\{ — в нашем случае эта "формула"
является фрагментом текста, задаваемым с помощью еще одного
окружения {tabular} (с преамбулой l).
Команды \\, завершающие первые три графы основной части
таблицы, имеют необязательные аргументы, задающие дополнительные
вертикальные пробелы после этих граф (иначе фигурные скобки будут
упираться друг в друга и портить вид таблицы).
К местоимению "свой" в последней строке таблицы дана сноска.
Знак сноски реализован нами опять же как математическая формула —
верхний индекс 1 к "пустой формуле"; текст сноски реализован как
графа таблицы, охватывающая все три колонки (с помощью
команды \multicolumn. Команда \footnotesize задает размер
шрифта, используемый в обычных сносках.
Линия, отделяющая сноску от остальной части таблицы, реализована с
помощью команды \cline. Наконец, посмотрим, как задана цифра 1 в
самом тексте сноски. Вместо ожидаемого $$^1$$ написано вот что:
$^1$\rule{0pt}{11pt}|
Как объясняется в разд. 3.10, команда \rule задает в данном
случае
Вся таблица в целом набрана мелким шрифтом (иначе она не помещалась на страницу).
Следующий пример (табл. 3 ) — расписание работы одной химчистки.
$$\begin{tabular}{lr@{--}l@{\qquad Обед\quad}r@{--}l} Понедельник $8^{30}$ 15 11 12 \\ Вторник 12 19 15 16 \\ Среда 10 17 $12^{30}$ $13^{15}$ \\ Четверг 9 17 12 13 \\ Пятница 11 16 \\ Суббота 8 14 11 12\\ \end{tabular}$$Для него исходный текст выглядит так:
\begin{tabular}{lr@{--}l@{\qquad Обед\quad}r@{--}l}
Понедельник $8^{30}$ 15 11 12 \\
Вторник 12 19 15 16 \\
Среда 10 17 $12^{30}$ $13^{15}$ \\
Четверг 9 17 12 13 \\
Пятница 11 16 \\
Суббота 8 14 11 12\\
\end{tabular}
В преамбуле тут используется конструкция, с которой мы пока не встречались. Объясним, что она делает.
До сих пор мы говорили, что в преамбуле каждая колонка таблицы может
обозначаться символом l, c,
r или "p{...}" , а
по краям или между колонками могут еще стоять вертикальные
черточки \|, обозначающие разделительные вертикальные линейки.
Это, однако, не вся правда. В качестве разделителя колонок (а
также с краев) в преамбуле может быть использовано еще и так
называемое "at- \multicolumn ). Мы использовали at-выражение трижды: два
раза для вставки тире и один раз - для слова "Обед".
А зачем же нам понадобились команды \qquad и \quad вокруг
этого слова? Дело в том, что между колонками, разделенными
at-выражением, не вставляется дополнительный интервал, которым
LaTeX разделяет колонки в таблицах, созданных с помощью
окружений {tabular} или {array}: именно поэтому тире
между часом открытия химчистки и часом ее закрытия плотно
прилегает к обоим числам. Слово "Обед", однако же, совсем не
должно вплотную прилегать к началу обеденного перерыва, поэтому
промежуток нужно создать самому, и проще это сделать один раз
внутри все того же at-выражения, чем писать \quad для каждого
рабочего дня.
Иногда at-выражение имеет смысл применять даже в виде @{}:
между колонками при этом ничего не вставится, но зато дополнительный
интервал между колонками, разделенными этим выражением, будет
подавлен. Если написать @{} в преамбуле перед символом,
обозначающим первую колонку, или после символа, обозначающего последнюю
колонку, то будет подавлен дополнительный интервал, вставляемый перед
первой или после последней колонки (это может помочь, если таблица
немного не помещается на страницу по ширине).
Иногда интервал между колонками, автоматически устанавливаемый
окружением {tabular} или {array}, является неудачным (ниже мы
разберем соответствующий пример). В этом случае можно самостоятельно
установить для него подходящее значение. Для этого надо присвоить
новое значение параметру \tabcolsep для окружения {tabular} или \arraycolsep для
окружения {array} (см.выше по поводу
параметров). По обе стороны от каждой колонки таблицы добавляется
пробел размером \tabcolsep (соответственно \arraycolsep ).
Стало быть, значение этих параметров — половина расстояния
между соседними колонками.
Наряду с расстоянием между колонками можно менять толщину линеек в
линованных таблицах
(обозначается \arrayrulewidth ;
относится этот параметр как к {array}, так и к {tabular} ), а
также расстояние между соседними линейками - это расстояние
обозначается \doublerulesep, и оно также относится в равной мере
к {array} и к {tabular}.
Теперь разберем обещанный пример, в котором приходится менять заданное по умолчанию расстояние между колонками. Посмотрите на такую формулу:
$$\arraycolsep=0.05em \begin{array}{rrr@{\,}r|r} x^2{}+2x{}-12\,x+5\\ \cline{5-5} x^2{}+5x\,x-3\\ \cline{1-2} {}-3x{}-12\\ {}-3x{}-15\\ \cline{2-3} 3 \end{array}$$Она была создана с помощью следующих LaTeX'овских команд:
$$
\arraycolsep=0.05em
\begin{array}{rrr@{\,}r|r}
x^2{}+2x,{}-12\,x+5\\
\cline{5-5}
x^2{}+5x\,x-3\\
\cline{1-2}
{}-3x{}-12\\
{}-3x{}-15\\
\cline{2-3}
3
\end{array}
$$
Сразу же скажем, зачем нам понадобилось менять \arraycolsep: без
этого интервалы между слагаемыми в каждой строке выходили непомерно
большими. А теперь разберем исходный текст подробнее. Начнем с
преамбулы rrr@{\,}r|r. В ней первые три колонки отведены под
слагаемые, наподобие $$x^2$$, $${}+2x$$
или $${}-12$$ ; пятая колонка
предназначена для делителя и частного ( $$x+5$$ и $$x-3$$ ), а
вертикальная
черточка в преамбуле перед буквой r, задающей пятую колонку —
для вертикального отрезка, входящего в состав "уголка". С другой
стороны, в четвертой колонке нет вообще никакого текста: между третьим
и четвертым знаками ни в одной строке ничего не написано. Эту
пустую колонку мы создали для того, чтобы вертикальный отрезок не
пошел ниже, чем нужно: без нее с преамбулой rrr|r
вертикальный отрезок относился бы к четвертой колонке, и в результате третья строка
закончилась бы вертикальным отрезком, что нам совсем ни к чему.
Осталось заметить, что пары долларов, ограничивающие выключную
формулу, заодно ограничивают и группу, так что по окончании
формулы закончится и группа, и старое значение \arraycolsep
восстановится автоматически.
Наш последний пример использования окружения {tabular} связан
с проблемой, с которой мы столкнулись на ранее: как
ликвидировать разрыв в вертикальных линейках, получающийся, если
в линованной таблице написать две команды \hline подряд?
Первое, что приходит в голову, — создать еще одну графу в
таблице, в которой поместить только невидимую линейку высотой,
скажем, 2 пункта; казалось бы, тогда горизонтальные линейки будут
на расстоянии 2 пункта друг от дружки, а вертикальные линейки не
будут прерываться. Результат, однако, получается совершенно
неудовлетворительный:
\begin{tabular}{|c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline \rule{0pt}{2pt}\\
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
Чтобы понять, в чем тут дело, нам придется обсудить, каким образом LaTeX собирает таблицу из отдельных строк.
Таблицы, созданные с помощью окружения {tabular}
или {array}, собираются из строк, которые вплотную
приставляются друг к другу. При этом, чтобы расстояния между
строками были одинаковыми, в каждую строку предварительно
вставляется невидимая линейка (именно, линейка, создаваемая
командой \ ). Из-за этой линейки расстояние между
горизонтальными отрезками оказалось слишком большим, а наша
линейка высотой в 2 пункта LaTeX'у не помогла: ведь \
все равно выше! Чтобы обойти эту трудность, в LaTeX'е
предусмотрен способ отменить автоматическую
постановку \ 'ов во всех строках таблицы. Именно, для
этого надо написать ( не внутри окружения {tabular}
или {array}!)
так:
\renewcommand{\arraystretch}{0}
Что такое \renewcommand, мы будем обсуждать в
лекции 7 , а пока давайте воспринимать
этот рецепт
догматически. Скажем только, что, во-первых, если эта команда
была дана внутри группы, то по выходе из группы ее действие
отменяется, и, во-вторых, в явном виде восстановление режима,
когда в каждую строку таблицы вставляется \,
достигается с помощью команды
\renewcommand{\arraystretch}{1}
Теперь уже легко добиться желаемого эффекта; надо только не
забыть поставить в нужные строки команду \ в явном виде,
коль скоро автоматически это теперь не делается. Итак,
таблица
набирается следующим образом:
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|c|c|}
\hline \strut Северо-Запад Северо-Восток\\
\hline \rule{0pt}{2pt}\\
\hline \strut Юго-Запад Юго-Восток\\
\hline
\end{tabular}%
}
Знаки процента в конце некоторых строк мы поставили, чтобы концы
этих строк не воспринимались как пробелы (на самом деле в данной
ситуации вреда от пробелов не было бы). Закрывающая фигурная
скобка в последней строке закрывает группу, из которой была дана
команда \renewcommand.
Если граф в таблице много, то, возможно, вам не захочется много
раз писать \. В этом случае можно включить эту команду
в преамбулу с помощью at-выражения. Возможный вариант такой:
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|@{\strut\hspace{\tabcolsep}}c|c|}
\hline
Северо-Запад Северо-Восток\\
\hline
\multicolumn{1}{|c|}{\rule{0pt}{2pt}}\\
\hline
Юго-Запад Юго-Восток\\
\hline
\end{tabular}
}
Если бы в аргументе at-выражения не был указан горизонтальный
пробел размером \tabcolsep, то левая вертикальная линейка была
бы напечатана вплотную к тексту (потому что at-выражение
подавляет автоматически вставляемый горизонтальный пробел);
заметим также, что теперь, когда \ включен в
at-выражение, нам пришлось воспользоваться
командой \multicolumn, чтобы этот \ не попал и в ту
строку, где мы так старались от него избавиться.
Описанный способ набрать таблицу с удвоенной горизонтальной
линейкой — не единственный. Если подключить описываемый в
следующем разделе стилевой пакет hhline, то можно это
сделать, и не играя с командой \arraystretch.
Можно не только отменять автоматическое добавление \ 'а в
строки таблицы, но и изменять его высоту. Например, если мы
хотим, чтобы размер этой линейки увеличился (во всех строках)
в $$3.7$$ раза, можно написать:
\renewcommand{\arraystretch}{3.7}
(вместо десятичной точки можно поставить и десятичную запятую).
Выше мы описывали возможности печати таблиц, доступные " чистому" LaTeX'у (без подключения дополнительных стилевых пакетов). Ряд стилевых пакетов, входящих в комплект поставки LaTeX'а, позволяет добиться дополнительных интересных эффектов.
В этом разделе мы рассказываем о различных мелких (но нередко полезных) дополнительных возможностях, открывающихся при подключении стилевого пакета array.
Итак, предположим, что этот пакет подключен. Что нового вы сможете сделать?
При пользовании командой \hline
горизонтальные линейки иногда слишком плотно примыкают к тексту
(особенно если текст содержит прописные буквы). В "
чистом" LaTeX'е для борьбы с этим надо либо писать
\renewcommand{\arraystretch}...
либо вставлять в каждую строку по дополнительной распорке. При
подключении пакета {array} появляется и более простой способ: надо
присвоить ненулевое значение параметру \extrarowheight. Это —
величина, которая добавляется к высоте каждой строки таблицы. Этому
параметру можно присваивать значения так же, как и любому другому
параметру со значением длины; по умолчанию его
величина равна нулю, для лучшего отделения линеек от текста хорошо
присвоить ему значение 2-3 пункта.
Если вы пользовались окружением {tabular} с необязательным
аргументом t, задающим выравнивание таблицы как "
буквы" по верхней строке, то могли обратить внимание, что это
выравнивание нарушается, если таблица начинается с горизонтальной
линейки:
\begin{tabular}[t]{rr}
а б \\в г
\end{tabular}
\begin{tabular}[t]{|rr|}
\hline а б \\в г\\
\hline
\end{tabular}
Чтобы выравнивание происходило не по линейке, а по первой строке
текста, надо задать верхнюю линейку командой \firsthline,
а не \hline. $$\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\hline а б в г \\
д е ж з\\ \hline
\end{tabular}\\[1in]
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\firsthline а б в г \\
д е ж з\\ \hline
\end{tabular}$$
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\hline а б в г \\
д е ж з\\ \hline
\end{tabular}\\[1in]
\begin{tabular}[t]{rrrr}
а б в г \\
д е ж з
\end{tabular}
\begin{tabular}[t]{|rrrr|}
\firsthline а б в г \\
д е ж з\\ \hline
\end{tabular}
Аналогично, чтобы при пользовании {tabular} с необязательным
аргументом b выравнивание таблицы как целого шло по нижней
строке текста, а не по нижней линейке, надо нижнюю горизонтальную
линейку задать командой \lasthline, а не \hline.
Как мы знаем, в преамбуле окружения {tabular} (а
также {array} ) могли стоять буквы l, r,
c или выражение p{...}, обозначающие тип колонки, а
между ними — вертикальные черточки или at-выражения.
Пакет {array} добавляет кое-что к этому списку.
Во-первых, при подключении этого пакета в преамбуле, наряду с
выражением p{...}, можно пользоваться
выражениями m{...} и b{...}. Как и p{...}, они указывают,
что в колонке стоит абзац текста ширины, заданной в фигурных
скобках. Однако в графах абзац, заданный с помощью b{...},
выравнивается по своей нижней строке, абзац, заданный с
помощью m{...} - по середине своей высоты, а абзац,
заданный с помощью p{...}, всегда выравнивался по своей
верхней строке.
\begin{tabular}{p{.9in}m{.9in}b{.9in}}
Все выше, и выше, и выше! Все выше, и выше, и выше! Все выше, и
выше, и выше!\\
\end{tabular}
Наряду с at-выражениями, пакет {array} позволяет использовать в
преамбуле еще и !-выражения. Именно, между буквами,
обозначающими колонки, можно, наряду с вертикальными черточками и
at-выражениями,
написать !{...},
где на месте точек стоят
какие-то TeX'овские команды и/или текст. Эта конструкция оказывает
то же действие, что и at-выражение, но при этом, в отличие от
at-выражения, не подавляет интервал между колонками. Поэтому
!-выражение удобно использовать для увеличения интервала между
колонками: в таблице с преамбулой
{rc!{\hspace{2pt}}cl}
интервал между двумя центрированными колонками будет увеличен на два пункта.
Другое возможное применение !-выражений — печать линованных
таблиц, в которых вертикальные линейки, разделяющие колонки, имеют
разную ширину. Если, например, мы хотим, чтобы какая-то из
вертикальных линеек имела ширину 1pt, а
не \arrayrulewidth, надо в преамбуле вместо вертикальной
черточки |, обозначающей эту линейку,
написать !{\vrule width 1pt\relax}.
Наконец, еще одна интересная возможность, предоставляемая
пакетом {array}, — это автоматическая вставка TeX'овских
команд в начале и/или конце колонки. Именно, если в преамбуле
непосредственно перед любой из букв l, c,
r, t, m или b, обозначающих тип
колонки, вставить выражение
>{команды}
то команды будут автоматически добавляться в начало соответствующей колонки. Это может пригодиться, если вам нужно сменить шрифт в одной из колонок:
$$\begin{tabular}{|>{Генрих }l|>{\slshape}l|} \hline II 1519--1559\\III 1551--1589\\ IV 1553--1610\\ \hline \end{tabular}$$\begin{tabular}{|>{Генрих }l|>{\slshape}l|}
\hline
II 1519--1559\\III 1551--1589\\
IV 1553--1610\\ \hline
\end{tabular}
Можно также после буквы, обозначающей тип колонки, или после конца p-, m-, или b-выражения, написать
<{команды}
чтобы команды были добавлены в конец колонки.
Эта конструкция полезна, если какие-то из колонок в таблице,
оформленной как {tabular}, должны набираться в математическом
режиме — достаточно поставить в начале и конце этой колонки по знаку
доллара. Пример:
\begin{tabular}{l>{$}l<{$}}
квадрат суммы (x+y)^2\\
квадрат разности (x-y)^2\\
сумма кубов x^3+y^3
\end{tabular}
Возможностей окружения {array} вполне хватает для печати
простейших линованных таблиц, но в более сложных случаях
возникают проблемы. Если
подключить стилевой пакет {hhline}, работа с линованными
таблицами облегчается.
Итак, предположим, что этот пакет подключен. Тогда для задания
горизонтальных линеек становится доступной, наряду с уже
известными \hline и \cline, новая команда \hhline, в
аргументе которой описывается как сама линейка, так и ее пересечения с
вертикальными линейками. Вот первый пример ее использования:
\begin{tabular}{|c|cc|c|}
\hline А Б В Г\\
\hhline{|=|~~|-|}
Д Е Ж З\\ \hline
\end{tabular}
Аргумент команды \hhline устроен следующим образом.
Во-первых, в нем сказано, что на территории первой колонки
линейка должна быть двойной (символ =), на территории
второй и третьей колонок линейки не должно быть вовсе
(символ ~ - "тильда"), а на территории четвертой
колонки линейка должна быть одинарной (символ -). Если в
таблице $$n$$ колонок, то в аргументе \hhline должны
присутствовать $$n$$ символов -, = или ~,
имеющих тот же смысл, что и выше.
Между этими символами, описывающими поведение линейки внутри колонок, расположены символы, описывающие пересечения горизонтальной линейки с вертикальными. В нашем примере это были вертикальные черточки |; кроме них, для задания информации о пересечениях линеек можно использовать символы :, #, а также буквы t и b. Какие именно пересечения линеек можно получить с их помощью, видно из следующей таблицы:
$$\begin{center} \begin{tabular}{@{}lcccccc@{}} На печати \TT \TTa \TTT, \TTTu, \TTTl \XX \XXa\XXX, \XXXu, \XXXl \\ В аргументе \cs(hhline) \ttfamily |- \ttfamily -| \ttfamily -|- \ttfamily |= \ttfamily =| \ttfamily =|=\\[4pt] На печати \YY \YYa \YYY, \YYYu, \YYYl \LL \LLa \LLL\\ В аргументе \cs(hhline) \ttfamily := \ttfamily =: \ttfamily =:= \ttfamily ||- \ttfamily -|| \ttfamily -||- \\[4pt] На печати \ZZ \ZZa \ZZZ \UU \UUa \UUU, \UUUu, \UUUl\\ В аргументе \cs(hhline) \ttfamily |:= \ttfamily =:| \ttfamily =::= \ttfamily \char`\#= \ttfamily =\char`\# \ttfamily =\char`\#=\\[4pt] На печати \WW \RR \QQ \PP \ZZZu \ZZZl \\ В аргументе \cs(hhline) \ttfamily|t:= \ttfamily |b:= \ttfamily =:t| \ttfamily =:b| \ttfamily =:t:= \ttfamily =:b:= \end{tabular} \end{center}$$Вот пример таблицы, в которой используются эти возможности
команды \hhline:
\begin{tabular}{||cc||cc||}
\hhline{|t:==:t:==:t|}
1 2 3 4\\5 6 7 8\\
\hhline{#==::==||}
А Б В Г\\
\hhline{||--||~~}
Д Е Ж З\\
\hhline{|b:==:b:==:b|}
\end{tabular}
Подчеркнем, что команда \hhline обрабатывает пересечения
линеек независимо от того, какие вертикальные линейки заданы в
преамбуле. Забота о том, чтобы аргумент \hhline был согласован с
преамбулой, лежит на вас.
Как уже отмечалось, окружения {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
1234\\
\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 даст таблицу, прижатую влево.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.