Опубликован: 07.02.2007 | Уровень: для всех | Доступ: платный
Лекция 6:

Печать текста с выравниванием

Более сложные случаи

Надписи, охватывающие несколько колонок. Чтобы создать такую надпись, нужно на месте соответствующей графы таблицы записать команду \multicolumn. У этой команды три обязательных аргумента:

  1. Количество колонок, охватываемых нашей " нестандартной" графой.
  2. "Преамбула" нашей графы. В качестве таковой может выступать буква l, r или c (текст в графе был прижат влево, вправо или центрирован), возможно, с символами | слева или справа, если мы хотим, чтобы графа была ограничена вертикальными линейками.
  3. Текст, записываемый в графу.

Пример — в таблице (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} ( 1)

Получается эта таблица таким образом (обратите внимание, что в строке с ценами в командах \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}
\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-выражения (о них речь пойдет ниже), разделение преамбулы на колонки происходит по таким правилам:

  • в каждой из колонок присутствует одна и только одна из букв l, c, r или p (последняя — вместе с выражением "{...}");
  • каждая колонка, кроме, возможно, первой, начинается с буквы.

В нашем примере, в частности, колонки устроены так:

{\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, меняющая оформление второй колонки, отменить его не может.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров
Аквсентий Дарахвелидзе
Аквсентий Дарахвелидзе
Россия, г. Москва
Виталий Улыбин
Виталий Улыбин
Россия, Ульяновск