Tex: подробное описание С. М. Львовский


Download 1.51 Mb.
Pdf ko'rish
bet96/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   92   93   94   95   96   97   98   99   ...   143
Bog'liq
LaTeX-Lvovsky

3. Примеры
В этом разделе мы приведем различные примеры верстки сложных таблиц с помощью L
A
TEXа.
По ходу дела будет рассказано и о некоторых изысканных возможностях окружений tabular
и array , о которых до сих пор речи не было. Кое-где в этом разделе мы будем предполагать,
что читатель знаком со средствами математического набора, описанными в главе
II
.
Наш первый пример
— таблица французских притяжательных местоимений, взятая из
русско-французского словаря акад. Л.В. Щербы:
существительные формы
прилагательные формы
мой
(
le mien, la mienne
les miens, les miennes
mon, ma, mes
твой
(
le tien, la tienne
les tiens, les tiennes
ton, ta, tes
его, ее, свой
(
le sien, la sienne
les siens, les siennes
son, sa, ses
наш
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
1
Лишь в значении принадлежности 3-му лицу.
Вот как мы задали эту таблицу в L
A
TEXе:
{\small
\begin{tabular}{cll}
\multicolumn{2}{c}{SU]ESTWITELXNYE FORMY}
&
PRILAGATELXNYE FORMY\\[5pt]
MOJ & $\left\{
\begin{tabular}{l}


VI.3. ПРИМЕРЫ
131
le mien, la mienne\\
les miens, les miennes\\
\end{tabular}
\right.
$
& mon, ma, mes\\[8pt]
TWOJ & $\left\{
\begin{tabular}{l}
le tien, la tienne\\
les tiens, les tiennes\\
\end{tabular}
\right.
$
& ton, ta, tes\\[8pt]
EGO, EE, SWOJ &
$\left\{
\begin{tabular}{l}
le sien, la sienne\\
les siens, les siennes\\
\end{tabular}
\right.
$
& son, sa, ses\\[8pt]
NA[ & le n\^otre, la n\^otre, les n\^otres
& notre, nos\\
WA[ & le v\^otre, la v\^otre, les v\^otres
& votre, vos\\
IH, SWOJ$^1$
&
le leur, la leur, les leurs
&
leur, leurs\\
\cline{1-1}
\multicolumn{3}{l}{$^1$\rule{0pt}{11pt}\footnotesize
lI[X W ZNAˆENII PRINADLEVNOSTI 3-MU LICU.}
\end{tabular}%
}
Разберем, как устроена эта таблица. Как явствует из ее преамбулы cll, она состоит из трех
колонок, из которых левая центрирована, а две другие прижаты влево. Соответственно, три
строки, начинающиеся со слова
«наш», набраны совершенно бесхитростно. Заголовок та
блицы сделан с помощью команды \multicolumn; от следующей графы в этой строке она
отделена знаком & . Команда \\ , завершающая первую строку таблицы, имеет у нас необя

зательный аргумент; это сделано, чтобы отодвинуть заголовок на 5 пунктов по вертикали от
остальной части таблицы.
Рассмотрим теперь, как устроена вторая строка (начинающаяся с местоимения
«мой»).
Запись
(
le mien, la mienne
les miens, les miennes
образует в нашей таблице одну графу. Для того, чтобы получить фигурную скобку требуемого


VI.3. ПРИМЕРЫ
132
(и неизвестного нам заранее) размера, мы воспользовались командами \left и \right, при

меняемыми при наборе формул (см. раздел II.2.5). Так как эти команды вне формул исполь

зовать нельзя, нам пришлось оформить эту графу таблицы как формулу. Между \left\{
и \right. стоит, как водится, та формула, по размеру которой получается фигурная скобка,
заданная командой \left\{
— в нашем случае эта «формула» является фрагментом текста,
задаваемым с помощью еще одного окружения array (с преамбулой l). Команды \\ , за

вершающие первые три строки основной части таблицы, имеют необязательные аргументы,
задающие дополнительные вертикальные пробелы после этих строк. Если не задавать этих
необязательных аргументов, то фигурные скобки будут упираться друг в дружку и портить
вид таблицы. Конкретные величины дополнительных пробелов были подобраны опытным
путем.
К местоимению
«свой» в последней строке таблицы дана сноска. Знак сноски реализо
ван нами опять же как математическая формула
— верхний индекс 1 к «пустой формуле»;
текст сноски реализован как графа таблицы, охватывающая все три колонки (с помощью
команды \multicolumn). Команда \footnotesize задает размер шрифта, используемый в
обычных сносках (см. раздел III.4). Линия, отделяющая сноску от остальной части таблицы,
реализована с помощью команды \cline. Наконец, посмотрим, как задана цифра 1 в самом
тексте сноски. Вместо ожидаемого $^1$ написано вот что:
$^1$\rule{0pt}{9pt}
Как объясняется в разделе III.9, команда \rule задает в данном случае невидимый символ,
занимающий по вертикали 11 пунктов и не занимающий места по горизонтали. Мы поставили
этот невидимый символ в качестве подпорки: без нее горизонтальная черта соприкасалась
бы с цифрой 1.
Остается заметить, что вся таблица в целом набрана мелким шрифтом, поскольку при
шрифте нормального размера таблица не поместилась бы по ширине на страницу.
Следующий пример таблицы
— расписание работы химчистки (вымышленной):
Понедельник
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
L
A
TEXовский исходный текст для этого расписания выглядит так:
\begin{tabular}{lr@{--}l@{\qquad oBED\quad}r@{--}l}
pONEDELXNIK & $8^{30}$ & 15 & 11 & 12 \\
wTORNIK
& 12 & 19 & 15 & 16 \\
sREDA
& 10 & 17 & $12^{30}$ & $13^{15}$ \\
˜ETWERG
& 9 & 17 & 12 & 13 \\
pQTNICA
& 11 & 16 & &\\
sUBBOTA
& 8 & 14 & 11 & 12
\end{tabular}
В преамбуле тут используется конструкция, с которой мы пока не встречались. Объясним,
чт ´о она делает.


VI.3. ПРИМЕРЫ
133
До сих пор мы говорили, что в преамбуле каждая колонка таблицы может обозначать

ся символом l, c, r или p{...} , а по краям или между колонками могут еще стоять вер

тикальные палочки |, обозначающие разделительные вертикальные линии. Это, однако,

не вся правда. В качестве разделителя колонок (а также с краев) в преамбуле может быть
использовано еще и так называемое
«at-выражение»
1
: символ @, непосредственно после ко

торого в фигурных скобках записан какой-то текст, возможно, с TEXовскими командами. В
таблице этот текст будет вставлен между соответствующими колонками во всех строках (ес

ли, разумеется, формат какой-то графы таблицы не был изменен командой \multicolumn).
Мы использовали at-выражение трижды: два раза для вставки тире и один раз
— для сло
ва
«Обед». Возникает вопрос, зачем нам понадобились команды \qquad и \quad вокруг это
го слова? Дело в том, что между колонками, разделенными at-выражением, не вставляет

ся дополнительный интервал, которым L
A
TEX разделяет колонки в таблицах, созданных с
помощью окружений tabular или array: именно поэтому тире между часом открытия хим

чистки и часом ее закрытия плотно прилегает к обоим числам. Слово
«Обед», однако же,
совсем не должно вплотную прилегать к началу обеденного перерыва, поэтому промежуток
нужно создать самому, и проще это сделать один раз внутри все того же at-выражения, чем
писать \quad шесть раз для каждого рабочего дня.
Иногда at-выражение имеет смысл применять даже в виде @{} : между колонками при
этом ничего не вставится, но зато дополнительный интервал между колонками, разделен

ными этим выражением, будет подавлен. Если написать @{} в преамбуле перед символом,
обозначающим первую колонку или после символа, обозначающего последнюю колонку, то
будет подавлен дополнительный интервал, вставляемый перед первой или после последней
колонки (иногда это помогает, если таблица немного не помещается на страницу по ширине).
Иногда интервал между колонками, автоматически устанавливаемый окружением tabular
или array, является неудачным (ниже мы разберем соответствующий пример). В этом случае
можно самостоятельно установить для него подходящее значение. Для этого надо присвоить
новое значение параметру \tabcolsep для окружения tabular или \arraycolsep для окру

жения array (см. раздел I.2.6 по поводу параметров). По обе стороны от каждой колонки
таблицы добавляется пробел размером \tabcolsep (соответственно, \arraycolsep). Стало
быть, значение этих параметров
— половина расстояния между соседними колонками.
Наряду расстоянием между колонками, можно менять толщину линеек в линованных та

блицах (обозначается \arrayrulewidth; относится этот параметр как к array, так и к tabular),
а также расстояние между соседними линейками
— это расстояние обозначается \doublerulesep,
и оно также относится в равной мере к array и к tabular.
Теперь разберем обещанный пример, в котором приходится менять заданное по умолча

нию расстояние между колонками. Наш пример относится к делению многочленов в столбик.
Посмотрите на такую формулу:
x
2
+ 2x
− 12 x + 5
x
2
+ 5x
x
− 3
− 3x − 12
− 3x − 15
3
Она была создана с помощью следующих L
A
TEXовских команд:
$$
1
Мы выбрали для него такое название, поскольку официально символ @ называется
«коммерческое at»;
неофициально его называют самыми разными именами, от
«собаки» до «блямбы».


VI.3. ПРИМЕРЫ
134
\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 , вертикальная черта
относилась бы к четвертой колонке (в соответствии с правилами на стр.
129
), и в результате
третья строка закончилась бы вертикальной чертой, что нам совсем ни к чему.
Осталось заметить, что пары долларов, ограничивающие выключную формулу, заодно
ограничивают и группу, так что по окончании формулы закончится и группа, и старое значе

ние \arraycolsep восстановится автоматически.
Наш последний пример использования окружения tabular связан с проблемой, с кото

рой мы столкнулись на стр.
127
: как ликвидировать разрыв в вертикальных линейках, полу

чающийся, если в линованной таблице написать две команды \hline подряд? Первое, что
приходит в голову
— создать еще одну строку в таблице, в которой поместить только невиди
мую линейку высотой, скажем, 2 пункта; казалось бы, тогда горизонтальные линейки будут
на расстоянии 2 пункта друг от дружки, а вертикальные линейки не будут прерываться. Ре

зультат, однако, получается совершенно неудовлетворительный:
Северо-Запад
Северо-Восток
Юго-Запад
Юго-Восток
\begin{tabular}{|c|c|}
\hline
sEWERO-zAPAD & sEWERO-wOSTOK\\
\hline
\rule{0pt}{2pt}&\\
\hline
‘GO-zAPAD & ‘GO-wOSTOK\\
\hline
\end{tabular}
Чтобы понять, в чем тут дело, нам придется обсудить, каким образом L
A
TEX собирает таблицу
из отдельных строк.
Таблицы, созданные с помощью окружения tabular или array, собираются из отдельных
строк, которые вплотную приставляются друг к дружке. При этом, чтобы расстояния меж

ду строками были одинаковыми, в каждую строку предварительно вставляется невидимая


VI.3. ПРИМЕРЫ
135
линейка (именно, линейка, создаваемая командой \strut). Из-за этой линейки расстояние
между горизонтальными отрезками оказалось слишком большим, а наша линейка высотой
в 2 пункта L
A
TEXу не помогла: ведь \strut все равно выше! Чтобы обойти эту трудность, в
L
A
TEXе предусмотрен способ отменить автоматическую постановку \strut’ов во всех стро
ках таблицы. Именно, для этого надо написать (не внутри окружения tabular или array!)
так:
\renewcommand{\arraystretch}{0}
Что такое \renewcommand, мы будем обсуждать в главе
VII
, а пока что давайте восприни

мать этот рецепт догматически. Скажем только, что, во-первых, если эта команда была дана
внутри группы, то по выходе из группы ее действие отменяется, и, во-вторых, в явном виде
восстановление режима, когда в каждую строку таблицы вставляется \strut, достигается с
помощью команды
\renewcommand{\arraystretch}{1}
.
Теперь уже легко добиться нужного нам эффекта; надо только не забыть поставить в нужные
строки команду \strut в явном виде, коль скоро автоматически это теперь не делается:
Северо-Запад
Северо-Восток
Юго-Запад
Юго-Восток
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|c|c|}
\hline
\strut sEWERO-zAPAD & sEWERO-wOSTOK\\
\hline
\rule{0pt}{2pt}&\\
\hline
\strut ‘GO-zAPAD & ‘GO-wOSTOK\\
\hline
\end{tabular}%
}
Знаки процента в конце некоторых строк мы поставили, чтобы концы этих строк не воспри

нимались как пробелы (на самом деле в данной ситуации вреда от пробелов не было бы,
но тем не менее). Закрывающая фигурная скобка в последней строке закрывает группу, из
которой была дана команда \renewcommand.
Если строк в таблице много, то, возможно, Вам не захочется много раз писать \strut. В
этом случае можно включить эту команду в преамбулу с помощью at-выражения. Возмож

ный вариант такой:
{\renewcommand{\arraystretch}{0}%
\begin{tabular}{|@{\strut\hspace{\tabcolsep}}c|c|}
\hline
sEWERO-zAPAD & sEWERO-wOSTOK\\
\hline
\multicolumn{1}{|c|}{\rule{0pt}{2pt}}&\\
\hline
‘GO-zAPAD & ‘GO-wOSTOK\\
\hline
\end{tabular}
}


VI.4. ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ
136
Если бы в аргументе at-выражения не был указан горизонтальный пробел размером \tabcolsep,
то левая вертикальная линия была бы напечатана вплотную к тексту (потому что at-вы

ражение подавляет автоматически вставляемый горизонтальный пробел); заметим также,
что теперь, когда \strut включен в at-выражение, нам пришлось воспользоваться коман

дой \multicolumn, чтобы этот \strut не попал и в ту строку, где мы так старались от него
избавиться.
Можно не только отменять автоматическое добавление \strut’а в строки таблицы, но и
изменять его высоту. Например, если мы хотим, чтобы размер этой линейки увеличился (во
всех строках) в 3,7 раза, можно написать:
\renewcommand{\arraystretch}{3,7}
.
Можно также вместо десятичной запятой поставить десятичную точку.

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   92   93   94   95   96   97   98   99   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling