Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 62
Текст из файла (страница 62)
Если один разделитель не нужен, егозаменяют точкой.\newcolumntype{L}{>{$}l<{$}}\[ f(x)=\begin{array}\{{lL}.1,& если $x=0$\\\sin(x)/x & иначе\end{array}\]f (x) =D1,если x = 0sin(x)/x иначеПакет delarray автоматически загружает пакет array и использует заложенныев нём возможности (в частности, \newcolumntype). Однако не нужно боятьсязаказать один и тот же пакет дважды, так как компилятор загружает любойпакет только однажды.Следующий пример показывает, что между традиционным способом генерации больших скобок при помощи \left(.
. . \right) и тем, который вводит пакетdelarray, есть некоторые различия. Они проявляются, если процедура array вызвана с опцией t или b: 77 8 8 44 5 9 5 91:= 1 2 2 6633Левая часть этого выражения набрана при помощи круглых скобок вокруг аргумента процедуры array:298Глава 12. Таблицы\begin{array}[t]({c}) 1\\2\\3 \end{array}\begin{array}[c]({c}) 4\\5\\6 \end{array}\begin{array}[b]({c}) 7\\8\\9 \end{array}В правой части использованы большие разделители \left( и \right):\left(\begin{array}[t]{c} 1\\2\\3 \end{array}\right)\left(\begin{array}[c]{c} 4\\5\\6 \end{array}\right)\left(\begin{array}[b]{c} 7\\8\\9 \end{array}\right)Выбор решения зависит от желаемого результата.12.4.Пакет tabularxПакет tabularx вводит процедуру tabularx:\begin{tabularx}{width}[vpos]{cols}lines\end{tabularx}(tabularx)Она аналогична процедуре tabular* и имеет те же аргументы.
Напомним, чтоtabular* создаёт таблицу заданной ширины width, раздвигая при необходимости колонки. Процедура tabularx достигает той же цели, увеличивая ширину колонок. Колонки, подлежащие расширению, маркируются в аргументе colsспециальным указателем X. Процедура конвертирует этот указатель в p{wd},вычисляя при этом ширину колонки wd. Например, \begin{tabularx}{100mm}{|X|X|X|} задаёт таблицу шириной 100 миллиметров с тремя колонками одинаковой ширины.Как и в пакете array, способ форматирования колонки X можно модифицировать при помощи указателя >{decl}.
Например, в колонке >{\small}X будет использован шрифт уменьшенного размера. Другой формат, часто используемыйв узких колонках, есть выравнивание текста по левому краю. Однако очевидное,казалось бы, решение >{\raggedright}X не достигает цели, так как команда \\не может одновременно разделять строки в колонке и строки в таблице. Поэтомупакет tabularx вводит команду\arraybackslash(tabularx)для разделения строк в узких колонках. Именно её следует использовать последеклараций \raggedright, \raggedleft и \centering в колонке X.
Например, автоматическое выравнивание влево достигается, если растяжимую колонку описать как >{\raggedright\arraybackslash}X. Для таких колонок можно ввестиновый указатель, например\newcolumntype{Y}{>{\small\raggedright\arraybackslash}X}и затем использовать наравне с X.29912.4. Пакет tabularx\setlength{\extratabsurround}{1pt}\begin{tabularx}{160pt}{|c|Y|X|}\hline\multicolumn{2}{|c|}{1 и 2} & 3 \\ \hline1 & Ширина колонки зависит отширины таблицы& Колонки 2 и 3 имеютодинаковую ширину\\ \hline\end{tabularx}1и21Ширинаколонкизависит отширинытаблицы3Колонки 2 и3 имеют одинаковую ширинуЭлементы таблицы в колонке X позиционируются по верхней строке (поскольку это колонка типа p). Чтобы изменить способ позиционирования (сделать Xколонкой типа m или b), необходимо переопределить команду\tabularxcolumn{wd}(tabularx)Значение аргумента wd будет вычислено процедурой tabularx.
Указанная команда используется для построения колонок X. Её начальное определение эквивалентно\newcommand{\tabularxcolumn}[1]{p{#1}}где p — упомянутый выше указатель колонки. Возможно альтернативное переопределение\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}Тогда элементы колонки X будут центрироваться по высоте, а размер шрифтабудет уменьшен.Все колонки X в таблице имеют одинаковую ширину. Чтобы сформироватьколонки разной ширины, следует переопределить командную длину\hsize(tabularx)Например, описание>{\setlength{\hsize}{.8\hsize}}X>{\setlength{\hsize}{1.2\hsize}}Xв аргументе cols процедуры tabularx задаёт две колонки, причём вторая в полтора раза шире первой. Формируя колонки разной ширины, следует сохранятьнеизменной суммарную ширину колонок (в приведённом выше примере она равна2\hsize); кроме того, нельзя использовать команду \multicolumn для объединения колонок X неравной ширины.
Если процедура tabularx используется внутридругой процедуры из семейства tabular, она должна быть окружена фигурными скобками (для других процедур построения таблиц такие предосторожностиизлишни).При вычислении ширины колонок процедура tabularx делает несколько итераций, пытаясь выбрать наиболее оптимальные размеры. Понаблюдать за результатами её промежуточных вычислений можно, вставив во входной файл (например, в его преамбулу) декларацию300Глава 12. Таблицы\tracingtabularx(tabularx)Результат вычислений выводится на экран и в файл протокола.
Тот же эффектдостигается, если пакет tabularx загрузить с опцией debugshow или infoshow (в\usepackage или \documentclass).12.5.Пакет longtableПакет longtable вводит одноимённую процедуру\begin{longtable}[hpos]{cols}lines\end{longtable}(longtable)Сохраняя все свойства процедуры tabular (в её расширенном варианте, еслизагружен ещё пакет array), она предназначена, главным образом, для печатиочень больших таблиц, не умещающихся на одной странице.
Обязательный аргумент cols имеет тот же смысл, что и в процедуре tabular. Напротив, опцияhpos определяет позиционирование длинной таблицы по горизонтали, тогда какнеобязательный аргумент vpos в процедуре tabular определяет позиционирование таблицы по вертикали в текущей строке. Соответственно этому hpos можетпринимать значения l, c, r, но не t или b. Опция l означает, что таблица будетприжата к левому краю страницы, r — к правому, а c означает, что таблица будетрасположена по центру страницы.
Правило позиционирования длинной таблицыпо умолчанию (когда [hpos] отсутствует) соответствует опции c, но его можносущественно модифицировать. Например, легко сделать так, чтобы таблица отстояла от левого или правого края страницы на заданное расстояние (см. ниже).Поскольку процедура longtable сама заботится о том, куда лучше всего поместить таблицу, она обладает также некоторыми свойствами процедуры table,описанной в главе 11 и используемой для размещения таблиц, умещающихсяна одной странице. В частности, в процедуре longtable, как и в table, можноформировать подписи к таблице при помощи команды \caption, которая одновременно используется для нумерации таблиц. При этом и длинные (longtable),и обычные (table) таблицы будут пронумерованы при помощи единого счётчикаtable.
Список всех таблиц печатает команда \listoftables (раздел 3.10).Алгоритм работы процедуры longtable основывается на двух принципах.Первый: чтобы не перегружать память компьютера, процедура строит большую таблицу, разбивая её на небольшие части. Их размер определяется значением счётчикаLTchunksize(longtable)и по умолчанию составляет двадцать строк.Второй принцип является следствием первого. При первом проходе компилятор выбирает ширину колонок в пределах каждой части независимо от ширины колонок в пределах последующих частей.
Поэтому входной файл, вообще30112.5. Пакет longtableговоря, необходимо обработать несколько раз, чтобы выровнять ширины колонок во всей таблице. При каждом проходе процедура вычисляет ширину колонок во всех частях и записывает необходимую информацию во вспомогательныйфайл (с расширением aux). Алгоритм сходится тем быстрее, чем больше величина LTchunksize, поэтому при наличии резерва памяти у компьютера значениесчётчика полезно увеличить. В сложных случаях для получения окончательного результата необходимо обработать входной файл несколько раз.
Компиляторвыдаёт предупреждение о необходимости повторить обработку, выводя на экран(и в файл протокола) предупреждениеPackage longtable Warning: Table widths have changed. Rerun LaTeX3 .Таблица, изображённая на рис. 12.2, обработана со значением LTchunksize в двараза меньше принятого по умолчанию, но алгоритм построения таблицы сошелся за два прохода.
При наличии нескольких команд \multicolumn меньше двухпроходов и не бывает.Текст соответствующего входного файла приведён ниже:\documentclass{article}\usepackage[cp1251]{inputenc}\usepackage[english,russian]{babel}\usepackage{array,longtable}\setcounter{LTchunksize}{10}...\begin{document}\begin{longtable}[c]{|*{3}{>{\ttfamily}cl}|}\caption{Коды языков народов мира}\label{t:LongTable}\\\multicolumn{6}{|c|}{Коды языков (ISO 639:1988)}\\\textrm{код}&язык&\textrm{код}&язык&\textrm{код}&язык\\\endfirsthead\multicolumn{6}{|c|}{\small\slshape (продолжение)}\\\textrm{код}&язык&\textrm{код}&язык&\textrm{код}&язык\\\endhead\multicolumn{6}{|r|}{\small\slshape продолжение следует}\\\endfoot\endlastfootaa & Afar& ab & Abhaszian& af & Afrikaans\\am & Amharic& ar & Arabic& as & Assamese\\.
. . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .lt & Lithuanian& lv & Latvian, Lettish & &\\\newpagemg & Malagasy& mi & Maori& mk & Macedonian \\. . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .zh & Chinese& zu & Zulu&&\\3\hline\hline\hline\hline\hline\hline\hline\hlineПредупреждение пакета longtable: Ширина таблицы изменилась. Запустите LATEX ещё раз.302кодaaamaybabhbocacydaelesfafogagnhahuiainiwjakakmkslaltязыкAfarAmharicAymaraBashkirBihariTibetanCatalanWelchDanishGreekSpanishPersianFaeroeseIrishGuaraniHausaHungarianInterlinguaIndonesianHebrewJapaneseGeorgianCambodianKashmiriLatinLithuanianКоды языков (ISO 639:1988)код языккодab Abkhaszianafar Arabicasaz Azerbaijanbe Byelorussianbgbi Bislamabnbr Bretonco CorsicancsdeenetfifrgdguhihyieisGermanEnglishEstonianFinnishFrenchScots GaelicGujaratiHindiArmenianInterlingueIcelandicjikkknkulnlvYiddishKazakhKannadaKurdishLindalaLatvian, Lettish(продолжение)языкAfrikaansAssameseBulgarianBengsli, BanglaCzechdzsoeufjfyglBhutaniEsperantoBasqueFijiFrisianGalicianhrCroatianikitInupiakItalianjwklkokyloJavaneseGrenlandicKoreanKirghizLaothianпродолжение следуеткодmgmlmrmynanoocpaptqurmrusashslsosssvtathtltrtwukviwoxhyozhязыкMalagasyMalayalamMarathiBurmeseNauruNorwegianOccitanPunjabiPortugueseQuechuaRhaeto-RomanseRussianSanskritSerbo-CroatianSlovenianSomaliSiswatiSwedishTamilThaiTagalogTurkishTwiUkrainianVietnameseWolofXhosaYorubaChineseкодmimnmsязыкMaoriMongolianMalayкодmkmomtязыкMacedonianMoldavianMalteseneNepalinlDutchompl(Afan) OromoPolishorpsOriyaPashto, PushtornrwsdsismsqstswtetitntsKirundiKinyarwandaSindhiSinghaleseSamoanAlbanianSesothoSwahiliTeguluTigrinyaSetswanaTsongaroRomaniansqsksnsrsuSangroSlovakShonaSerbianSudanesetgtktottTajikTurkmenTongaTatarurvoUrduVolapukuzUzbekzuZuluГлава 12.
ТаблицыРис. 12.2. Пример длинной таблицы, размещённой на двух страницах. Изображениеуменьшено и повёрнуто на 90◦ . Формат заголовка таблицы установлен классом articleи поэтому отличается от рекомендованного отечественными типографскими правиламиТаблица 1: Коды языков народов мира30312.5. Пакет longtable\end{longtable}\end{document}Помимо longtable здесь загружен также пакет array, чтобы можно было использовать расширенный синтаксис указателей колонок, и в частности >{\ttfamily}c.Таблица начинается с главного заголовка. В нашем примере он состоит изтрёх строк и заканчивается командой\endfirsthead(longtable)Она завершает текущую строку так же, как и команда \\, но ещё обозначаетконец заголовка.