Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 61
Текст из файла (страница 61)
И ещё немного экзотики. В следующем примере широкая вертикальная линия между колонками сконструирована с помощью указателя \!,команд \vline и \setlength:\begin{tabular}{|c!{\setlength{\arrayrulewidth}{3pt}\vline}c|c|}\hline A & B & C...12.3.1.A100B10C1Создание новых указателей колонокВместо того чтобы постоянно набирать сложное описание колонки, можно ввестиновый указатель колонки при помощи декларации\newcolumntype{x}[num]{def}(array)где x — имя нового указателя, num — число его аргументов, def — его определение (num и def имеют тот же смысл, что и в \newcommand). Например, длятаблиц, где смешаны текст и математические формулы, будут полезны такиеопределения:\newcolumntype{C}{>{$}c<{$}}\newcolumntype{L}{>{$}l<{$}}\newcolumntype{R}{>{$}r<{$}}292Глава 12.
ТаблицыТогда буква C в аргументе cols процедуры tabular будет предназначена дляформул (которые уже не нужно будет окружать знаками $), размещаемых поцентру колонки.\begin{tabular}[t]{lLlL}если & a>b, & то & |a-b|=a-b \\если & a=b, & то & |a-b|=0\\если & a<b, & то & |a-b|=b-a\end{tabular}еслиеслиеслиa > b,a = b,a < b,тотото|a − b| = a − b|a − b| = 0|a − b| = b − aОпределение def нового указателя x может содержать любые другие указатели,известные на момент использования указателя x.
Выяснить, какие нестандартные указатели определены, поможет команда(array)\showcolsОна выводит их определения на экран компьютера и в файл протокола компиляции jobname.log.Один вновь введённый указатель может замещать несколько колонок одновременно. Например:\newcolumntype{X}{lLlL}\begin{tabular}{X}если & a>b, & то...еслиеслиеслиa > b,a = b,a < b,тотото|a − b| = a − b|a − b| = 0|a − b| = b − aПокажем ещё, как работают указатели с аргументами, повторив с очевиднымиизменениями последний пример из предыдущего раздела:\newcolumntype{V}[1]{!{\setlength{\arrayrulewidth}{#1}\vline}}\begin{tabular}{|cV{3pt}cV{0.4pt}c|}...12.3.2.A100B10C1Пакет dcolumnПакет dcolumn вводит указатель колонки с тремя аргументамиD{sep-tex}{sep-dvi}{int.dec}(dcolumn)который обеспечивает выравнивание чисел в колонке по десятичному знаку (запятой или точке).
Его аргументы имеют следующий смысл:sep-tex — символ, который будет использоваться в качестве десятичной точкиво входном файле. Обычно этим символом является точка или запятая;sep-dvi — символ, который будет использоваться в качестве десятичной точкив печатном документе. Обычно он совпадает с тем, что указан в первом аргументе sep-tex, но может быть также любым математическим выражением,как, например, \cdot;29312.3. Пакет arrayint.dec — десятичное число, определяющее формат колонки, причём int задаётколичество цифр слева, а dec — справа от десятичной точки.
Число с указанным количеством цифр будет размещено по центру колонки, а все числаиного сорта будут выровнены относительного него так, чтобы десятичныезнаки располагались на одной вертикали. Целая часть int. (вместе с точкой)может быть опущена. В этом случае dec указывает максимальное количествоцифр после десятичного знака.
Отрицательное значение dec разрешает любое количество символов в колонке, а все числа в колонке центрируются подесятичному знаку.Разумеется, можно ввести более простой указатель колонки, использующий свойства указателя D. Например, колонка типа d, определённая как\newcolumntype{d}[1]{D{.}{\cdot}{#1}}в качестве единственного аргумента принимает максимальное число цифр последесятичного знака, а колонки типа . и , вообще не имеют аргументов:\newcolumntype{.}{D{.}{.}{-1}}\newcolumntype{,}{D{,}{,}{2}}В колонках d десятичная точка будет расположена выше базисной линии, поскольку её печатает команда \cdot; в двух других колонках десятичная точкабудет иметь соответственно вид точки и запятой, как показывает следующийпример:\begin{tabular}{|d{-1}|d{2}|.|,|}1.2& 1.2&1.2&1,2\\1121.2& 1121.2&861.20 &674,29 \\184& 184&10&69\\.4& .4&.4&,4\end{tabular}1·21121·2184·41·21121·2184·41.2861.2010.41,2674,2969,4Здесь первая колонка, имеющая отрицательное значение dec, шире второй колонки, так как десятичная точка расположена в её центре, а во второй прижатак левому краю.
Возможно, однако, что указание только dec вместо полной спецификации int.dec не приводит к желаемому результату. Такое случается, есликолонки таблицы имеют заголовки, созданные при помощи \multicolumn{1}{c}{...}, чтобы переопределить тип колонки. Следующий пример показывает действие полной спецификации int.dec в том случае, когда заголовки колонок у́жечисловых данных:\begin{tabular}[t]{|d{-1}|d{1}|d{5.1}|}\multicolumn{1}{|c|}{head}&\multicolumn{1}{c|}{head}&\multicolumn{1}{c|}{head}\\[3pt]1.2& 1.2& 1.2\\11212.2 & 11212.2 & 11212.2 \\.4& .4&.4\end{tabular}head1·211212·2·4headhead1·211212·2·41·211212·2·4294Глава 12. ТаблицыЗдесь предполагается, что для указателя d действует определение, данное в начале этого раздела, так что запись d{-1} эквивалентна D{.}{\cdot}{-1}. Колонки,описанные как d{1} и d{5.1} имеют одинаковую ширину, потому что самая длинная целая часть чисел в колонках как раз состоит из пяти цифр, а десятичнаячасть — из одной.
В другом примере заголовки колонок шире чисел:\begin{tabular}[t]{|d{-1}|d{1}|d{1.1}|}\multicolumn{1}{|c|}{heading}&\multicolumn{1}{c|}{heading}&. . .heading1·2·4heading1·2·4heading1·2·4Числа в третьей колонке d{1.1} центрируются по десятичной точке (как и впервой колонке d{-1}), так как значение 1.1 аргумента int.dec означает, чтоцелая и десятичная части чисел имеют равную длину.12.3.3.Таблицы в таблицахЕсли таблица, созданная процедурой типа tabular, размещена в строке текста,то по умолчанию она центрируется по высоте, но может быть позиционированавровень с верхней строкой, если необязательный аргумент vpos имеет значениеt, или нижней, если vpos имеет значение b (см.
стр. 285). Однако если таблица начинается с горизонтальной черты или заканчивается ею, то выравниваниеосуществляется именно по этой линии.Сравните таблицу\begin{tabular}[t]{|l|}без команды \\ \verb|\hline|\end{tabular}и таблицу\begin{tabular}[t]{|l|}\hlineс командой \\ \verb|\hline| \\ \hline\end{tabular} на одной строке.Сравните таблицу без команды и таблицуна одной строке.с командой\hline\hlineЧтобы даже в этом случае выравнивались именно строки, пакет array вводит двеспециальные команды\firsthline\lasthline(array)предназначенные для рисования горизонтальной черты перед первой строкой ипосле последней строки таблицы соответственно.Сравните таблицу\begin{tabular}[t]{|l|}без команды\\ \verb|\firsthline|29512.3. Пакет array\end{tabular}и таблицу\begin{tabular}[t]{|l|}с командой\\ \verb|\firsthline| \\\end{tabular} на одной строке.\firsthline\lasthlineСравните таблицу без команды и таблицу с командойна одной строке.\firsthline\firsthlineЭти две команды вставляют дополнительный вертикальный пробел между горизонтальной чертой и, соответственно, первой и последней строками таблицы.Величина пробела задаётся командной длиной\extratabsurround(array)Регулировка этих пробелов таблицы особенно полезна при создании сложных таблиц при помощи нескольких процедур типа tabular, вложенных одна в другую.Пример такой таблицы приведён на рис.
12.1. Во входном файле она записанаследующим образом:\setlength{\extratabsurround}{2pt}\begin{tabular}{|cc|}\hline\textit{Имя} & \textit{телефон}\\ \hline\hlineДжон &\begin{tabular}[t]{|cc|}\firsthline\textit{день} & \multicolumn{1}{c|}{\textit{телефон}}\\ \hline\hlineсреда& 5554434\\ \hlineпонедельник &\begin{tabular}[t]{|cc|}\firsthline\textit{время}& \textit{телефон}\\ \hline\hline8--10 & 5520104 \\ 1--5 & 2425588\\ \lasthline\end{tabular}\\ \lasthline\end{tabular}\\ \hlineМартин &\begin{tabular}[t]{|cp{4.5cm}|}\firsthline\textit{телефон} & \multicolumn{1}{c|}{\itshape инструкции}\\ \hline\hline3356677 & Маша должна передать сообщение\\ \lasthline\end{tabular}\\ \hlineПетя&\begin{tabular}[t]{|cl|}\firsthline\textit{месяц} & \multicolumn{1}{c|}{\itshape телефон}\\ \hline\hlineсентябрь--май & 5554434 \\ июнь & нет телефона \\июль--август & 2211456\\ \lasthline\end{tabular}\\ \hline\end{tabular}296Глава 12.
ТаблицыИмятелефонДжонМартинденьсредапонедельниктелефон3356677Петятелефон5554434время телефон8–1055201041–52425588инструкцииМаша должна передать сообщениемесяцсентябрь–майиюньиюль–августтелефон5554434нет телефона2211456Рис. 12.1. Пример сложной таблицы12.3.4.Пакет hhlineПакет hhline вводит команду(hhline)\hhline{cross}которая рисует горизонтальные линии в таблицах. Её аргумент cross должен содержать последовательность особых символов, определяющих вид горизонтальной линии в каждой колонке и способ пересечения горизонтальных линий с вертикальными.\begin{tabular}{||cc||c|c||}\hhline{|t:==:==:t|}a & b & c & d \\ \hhline{|:==:|~|~||}1 & 2 & 3 & 4 \\ \hhline{#==#~|=#}i & j & k & l \\ \hhline{||--||--||}w & x & y & z \\ \hhline{|b:==:b:==:b|}\end{tabular}a1iwb2jxc3kyd4lzЭтот пример демонстрирует все возможности команды \hhline, и нам остаётсятолько пояснить значение символов, которые могут присутствовать в её аргументе.-Горизонтальная линия на всю ширину колонки.=Двойная горизонтальная линия на всю ширину колонки.~Колонка без горизонтальной линии.29712.3.
Пакет array|Пересечение вертикальной линии с горизонтальной (одинарной или двойной).#Пересечение двойной вертикальной линии с двойной горизонтальной линией.:Вертикальная линия, которая прерывается двойной горизонтальной линией.tВерхняя половина двойной горизонтальной линии.bНижняя половина двойной горизонтальной линии.*{n}{cross} n-кратное дублирование cross; например, *{3}{==#} эквивалентно==#==#==#.12.3.5.Пакет delarrayПакет delarray расширяет синтаксис процедуры array, позволяя удобным способом указывать, какими скобками нужно окружить матрицу. Например, еслинужно заключить матрицу в круглые скобки, достаточно это проделать с аргументом процедуры (вместе с фигурными скобками!):)(\[ \begin{array}({cc}) a & b \\ c & d \end{array} \]a bc dСкобки (точнее — разделители) всегда должны использоваться парами, как еслибы команды \left и \right, при помощи которых формируются большие разделители (раздел 6.3.6), были указаны явно.