Журнал LinuxFormat - перейти на главную

LXF93:LaTeX

Материал из Linuxformat
Перейти к: навигация, поиск


LaTeX

Листинги и текст на сайте автора

Компьютерные TeXнологии Учимся использовать культовую систему вёрстки

Содержание

Всё о таблицах

ЧАСТЬ 10 Таблица – один из самых сложных текстовых элементов. Почему? Давайте спросим у Евгения Балдина!
Классификация химических элементов, позволяющая выявить зависимость их различных свойств от атомной массы.
Таблица Менделеева — пожалуй, самая полезная из таблиц.

Таблица – это особая форма передачи информации: далеко не всякое содержание следует облекать в такую форму. Но для малых объёмов однородных значимых данных таблицы зачастую оказываются наилучшим способом представления. Давайте разберемся, что предлагает в этой области LaTeX.

Немного теории

Содержимое таблицы организуется в колонки (графы) и горизонтальные строки таким образом, что каждый элемент является составной частью и строки, и колонки. Таблица состоит из следующих основных элементов: нумерационного и тематического заголовков (номера таблицы и её названия), головки [В «издательском словаре-справочнике» А.Э. Мильчина утверждается, что попытка заменить этот термин по причине его «жаргонности» не удалась. ] (заголовочной части таблицы), хвоста (всей остальной части, кроме головки), боковика (первой слева графы таблицы) и прографки (хвостовой части таблицы без боковика).

Рис. 1

Рис. 1. Структура таблицы.

Заполняя таблицу текстовыми или цифровыми данными, полезно следовать некоторым правилам:

  • Выносить общие для каждого элемента графы данные в её заголовок, а общие для строки данные – в заголовок боковика.
  • По возможности, употреблять числа не более чем из четырёх значащих цифр. Более многозначные числа следует округлять. Общий множитель следует выносить в заголовок. То же самое нужно сделать и с единицами измерения.
  • Перед знаком, отделяющим целую часть числа от дробной, всегда должна быть цифра. То есть, 0.1 – это правильно, а .1 – нет.
  • Вместо отсутствующих данных проставлять многоточие …, Нет свед. и т.п. Если данных в принципе быть не может, то лучше отметить это с помощью тире: –.
  • Не следует использовать знаки, означающее «то же, что и предыдущее значение». Лучше повторить число.

Честно говоря, описание таблиц с помощью LaTeX-разметки может показаться не очень удобным. Действительно, когда данные идут в перемешку с управляющими структурами, результат может выглядеть не очень красиво. Спасает только то, что большие таблицы с однородной структурой можно создавать с помощью скрипта, а маленькие таблицы не представляют особой проблемы. Как правило, поиск и проверка данных отнимает куда больше времени, чем их оформление.

tаbbing

Если точно известны ширина столбцов, а таблица относительно простая, то можно воспользоваться окружением tаbbing.

Рис. 2

Рис. 2

Первая строчка устанавливает положение табуляторов с помощью команды \=. Команда \kill, завершающая управляющую строку, даёт понять текстовому процессору, что её не надо печатать. Далее идёт обычный текст, где переход к следующей табуляции осуществляется с помощью команды \>, а перевод строки завершается комбинацией \\. Всё просто – точно так же таблицы печатали с помощью обычной печатной машинки, только табуляция задавалась «железным», а не программным способом.

К использованию окружения tabbing следует подходить с известной долей осторожности. Окружение формирует абзац, состоящий из отдельных строк, в котором нет места переносам и многострочным элементам. Зато это позволяет LaTeX легко переносить часть таблицы на следующую страницу. Абсолютно всё приходится делать своими руками, но в этом есть своеобразная прелесть. Зачастую tabbing становится базой для определения других, более специализированных окружений.

Внутри tabbing переопределяются некоторые стандартные команды LaTeX. Это, в частности, касается команд переноса ('\-) и акцентирования (\’ и \`). Для сохранения/воспроизводства текущей табуляции следует воспользоваться командами \pushtabs и \poptabs.

tabular и array

Самым популярным окружением для создания таблиц в LaTeX является tubular. Окружение array фактически полностью повторяет функционал tubular, но в отличие от последнего работает в математической моде – это полезно для создания матриц, которые, по своей сути, есть обычные таблицы.


Рис. 3

Рис. 3.

Данные делятся на ячейки с помощью символа «амперсанд» – &. Переход на следующую строку осуществляется стандартной командой переноса: \\. В качестве необязательного параметра ей можно указать дополнительный сдвиг по вертикали. Вертикальный размер каждой из строк автоматически выставляется в соответствии с высотой текста.

tabular создаёт единый объект – таблицу. Как и в случае картинок, таблицу удобно заключать в плавающее окружение table:

 \begin{table}[ht]
  \centering %центрируем таблицу
   \begin{tabular}[«позиционирование таблицы»]{«формат столбцов»}
     «тело таблицы»
   \end{tabular}
  \caption{«подпись»}\label{tab:metka}
 \end{table}

Это позволяет автоматически создавать нумерационный заголовок таблицы и добавлять тематический. Необязательный аргумент окружения tabular задает позиционирование всей таблицу по вертикали по отношению к окружающему тексту:

  • t – выравнивание по верхней строке, то есть верхняя строка таблицы будет расположена на одном уровне со строкой, в которой она была размещена,
  • c – выравнивание по центру,
  • b – выравнивание по нижней строке.

Ширина столбцов вычисляется автоматически по формату, который задаётся через обязательный аргумент окружения. Каждому из столбцов должна соответствовать своя буква:

  • l (left) – выравнивание по левому краю,
  • c (center) – выравнивание по центру,
  • r (right) – выравнивание по правому краю,
  • p{«ширина»} – создание колонки определённой ширины. В случае жёстко заданной длины слишком большой текст может разбиваться на несколько строк.

Если формат столбцов повторяется, то для сокращения записи можно воспользоваться следующей спецификацией:

*{n}{«формат столбца или столбцов»}

где n – число повторений. Это своеобразный цикл.

Рис. 4

Рис. 4

Разделительные линии между столбцами создаются с помощь вертикальной черты |. Две вертикальные линии || формируют двойной разграничитель. Горизонтальные линии создаются с помощью команды \hline. По аналогии с двойной вертикальной чертой, две команды формируют двойную горизонтальную линию. Инструкция @{} позволяет вставить между столбцами любой символ, указанный в качестве обязательного аргумента. При этом подавляются околостолбцовые промежутки, добавляемые автоматически. Это можно быть полезно в случае, если один столбец представляет из себя какую-то измеренную величину, а второй её ошибку – тогда вместо разделительной черты между ними лучше поставить знак ±.

Рис. 5

Рис. 5

Для того, чтобы «отчеркнуть» только часть столбцов, можно воспользоваться командой \cline{диапазон столбцов}. В дополнение к стандартным типам столбцов, используемым в tabular, окружение array добавляет два новых:

  • m{«ширина»} – то же, что и p{«ширина»}, но добавляется вертикальное выравнивание содержимого по центру клетки,
  • b{«ширина»} – то же, что и m{«ширина»}, но вертикальное выравнивание содержимого происходит по нижней базовой линии последней строки.

Более подробную информацию об использовании окружения array можно найти в файле документации array.pdf из пакета tools.

Подробнее о том, как должна выглядеть таблица и как этого достичь, можно узнать в статье «Publication quality tables in LaTeX» (booktabs.pdf), написанной Саймоном Фиром (Simon Fear) для пакета booktabs. Этот пакет для тех, кто любит везде наводить лоск.

К вопросу о разделительных линиях

По характеру оформления линейки таблицы бывают закрытые (глухие), полузакрытые, открытые. Пользуясь случаем, настоятельно рекомендую:

  • Никогда не использовать вертикальные линии в таблице;
  • Иметь в виду, что двойные линии в оформлении таблицы также излишни.

Это, конечно, рекомендации, а не технические ограничения пакета, но если данные в таблице настолько разные, что хочется разделить их вертикальной линией, то проще сделать две таблицы.

Стиль hhline из коллекции tools определяет команду \hhline, которая позволяет создавать двойную рамку без ненужных пересечений. Подробности можно найти в документации: hhline.pdf.

Пакет arydshln необходим в случае использования пунктирных разделительных линий. Более чем исчерпывающая документация к этому пакету находится в файле arydshln-man.pdf.

Клетки

Для объединения расположенных рядом (по горизонтали клеток) можно воспользоваться командой \multicolumn{n}{формат колонки}{текст}:

Рис. 6

Рис. 6.

Первый обязательный параметр соответствует числу объединяемых колонок, второй – формату результирующей колонки, третий – это текст.

Для объединения клеток по вертикали можно воспользоваться пакетом multirow, в котором определяется набор одноимённых команд:

Рис. 7

Рис. 7

которые принимают два или три обязательных параметра:

\multirow{«число строк»}{«ширина»}{«текст»}
\multirow{«число строк»}*{«текст»}

В качестве первого аргумента передаётся число строк, которые займёт объединённая клетка, далее можно указать ширину ячейки или включить ее её автоматическое вычисление. Кстати, число строк может быть и отрицательным. В этом случае объединяются клетки, расположенные выше команды. Подобное может потребоваться, чтобы согласовать свою работу с пакетом colortbl:

Рис. 8

Рис. 8

Пакет colortbl предназначен для раскрашивания таблицы в разные цвета. Принципы работы пакета подробно излагаются в файле документации colortbl.pdf.

Команда \backslashbox{текст}{текст}, делящая клетку на две части наклонной чертой, определена в пакете slashbox. Иногда так оформляют клетку на перекрестии боковика и головки. С пакетом идёт пример: slashbox.tex.

Автор кириллических шрифтов lh Ольга Лапко предлагает для более изощрённой работы с таблицами пакет makecell. В нем определена команда \makecell, которая «создаёт окружение одноколоночной таблицы с предопределёнными общими параметрами выключки, интерлиньяжа и вертикальных отбивок вокруг. Её удобно использовать для многострочных ячеек. Дополнительный аргумент команды позволяет изменить выключку таблицы». В пакете содержится документация на английском языке (makecell.pdf), которая дублируется русскоязычной (makecell-rus.tex).

Выравнивание чисел

Часто содержимым таблицы являются некоторые числа, поэтому повышенное внимание к их выравниванию (с целью упрощения восприятия) является вполне оправданным. Пакет dcolumn из коллекции tools добавляет ещё одну спецификацию к формату столбцов таблицы:

Рис. 9

Рис. 9

Новая спецификация имеет формат: D{delim}{output}{nfruc}, где delim – символ или набор символов, по которому происходит выравнивание (обычно это точка или запятая), output – символ, который замещает delim при компиляции (например, иногда бывает нужно заменить точку на запятую), nfrac – максимальное число позиций в дробной части числа (при отрицательном значении число позиций не фиксируется). Дополнительную информацию можно найти в документации: dcolumn.pdf.

Пакет rccol обладает схожей функциональностью, но умеет округлять значения. К сожалению, мне не удалось заставить его нормально работать в случае, когда в качестве разделителя используется точка. Возможно, это просто недоразумение – по крайней мере, документация (rccol.pdf) утверждает, что с точкой все должно быть в порядке.

Пакет warpcol предоставляет общую процедуру форматирования числовых колонок. В его документации (warpcol.pdf) представлены примеры, иллюстрирующие различные эффекты, связанные с выравниванием.

Доступ к данным

CSV (от англ. Comma-Separated Values – значения, разделённые запятыми) – это текстовый формат, предназначенный для представления табличных данных. Для прямого доступа к ним можно воспользоваться пакетом csvtools. Документация (csvtools.pdf) достаточно подробна, но лучше все же написать скрипт, который будет считывать необходимые сведения и генерировать готовый tex-файл.

Клоны tabular

tabularx из коллекции tools – это расширение tabular, позволяющее автоматически вычислять ширину колонок, имеющих форматный определитель X.

Рис. 10

Рис. 10

В качестве первого аргумента окружения tabularx передаётся ширина таблицы. При компиляции X преобразуется в p{ширина}, где вместо ширины подставляется величина, автомататически вычисленная таким образом, чтобы ширина таблицы в целом оставалась неизменной. Если в таблице присутствует более одного столбца, имеющего формат X, то для ее формирования может потребоваться несколько проходов. Все подробности, естественно, можно почерпнуть из документации (tabularx.pdf).

Пакет tabulary также является модификацией стиля tabular, а точнее – array. Он был создан для автоматического расчёта ширины колонок таблицы с целью минимизации ее высоты. Детали можно найти в документации: tabulary.pdf. Пользоваться одноимённым окружением следует с некоторой долей осторожности.

ctable предлагает альтернативный подход к оформлению таблицы. Вместо окружения используется команда \ctable, которая объединяет в себе функциональность tabular и table. В дополнение к этим особенностям в \ctable можно вставлять команды создания подстрочных примечаний для таблицы. Примеры и документацию к пакету можно найти в файле ctable.pdf.

Многополосные таблицы

Окружение tabular и его производные хороши всем, за исключением того, что они не могут занимать больше одной страницы. Для вёрстки на несколько страниц обычно используют одно из двух окружений: supertabular и longtable, которые определённы в одноимённых стилях. Они обладают схожей функциональностью, но разными способами оформления. Как supertabular, так и longtable предоставляют возможность создания стандартной шапки и стандартного окончания, появляющихся в начале (на каждой новой странице) и в конце таблицы. Подробности можно отыскать в документации: 'supertabular.pdf для supertabular и longtable.pdf для longtable из коллекции tools.

В отличии от supertabular, longtable гарантирует неизменность ширины столбцов на протяжении всей таблицы – это достигается несколькими проходами LaTeX. Неизменность ширины столбцов в зависимости от ситуации может рассматриваться и как преимущество, и как недостаток.

Кроме окружения supertabular, в одноименном пакете определено окружение mpsupertabular, которое заключает каждую отдельную страницу («кусок») в окружение minipage, что позволяет использовать подстрочные примечания прямо в таблице.

Более молодым и, возможно, правильным является пакет xtab. По сути дела, это расширение supertabular с некоторыми улучшениями и исправлениями. Подробная документация доступна в файле xtab.pdf.

Вывод

Вывод – таблица без линеек или организованный в колонки и строки материал, который не разделён линейками. Оглавление \tableofcontents, списки иллюстраций \listoffigures и таблиц \listoftables тоже являются таблицами.

Рис. 11

Рис. 11

Команда \dotfill формирует отточия (заполнение пространства точками).

Окружение listliketab из одноимённого пакета специализируется на создании таблиц, оформленных как перечисление. Это окружение будет очень кстати при оформлении вопросников:

 \storestyleof{enumerate}
 \begin{listliketab}
  \newcounter{tabenum}\setcounter{tabenum}{0}
  \newcommand{\nextnum}{\addtocounter{tabenum}{1}\thetabenum.}
  \begin{tabular}{L>{\bf}l@{~~или~~}>{\bf}l@{~~или~~}>{\bf}l}
  \nextnum & Красный & зелёный & голубой \\
  \nextnum & Низкий & средний & высокий \\
  \nextnum & Радостный & грустный & удивлённый \\
  \end{tabular}
 \end{listliketab}

Рис. 12

Рис. 12

Документация с примерами находится в файле listliketab.pdf.

И это тоже таблицы?

Пакеты tableaux и tabvar созданы для исследования области определения и поведения функции. Пригодится при изучении или написании методички по началам матанализа. Молодцы французы!

Рис. 13

Рис. 13

tabvar является более современной версией стиля tableaux. Поэтому подробности и примеры лучше всего искать в его документации: tabvar.pdf и demo.tex.

Пакет pb-diagram пригодится, когда нужно нарисовать простенькую диаграмму (это, конечно, не совсем таблицы, но определенное сходство наличествует):

Рис. 14

Рис. 14

Завершая разговор о таблицах

Таблица – это один из самых сложных текстовых элементов. Сложных не потому, что его трудно оформить – трудно добыть подходящие данные. Сделать бессмысленную таблицу очень легко: обилие информации ненадолго задержится в памяти читателя. Но думать о том, как и что представлять, всегда полезно: хорошая таблица зачастую стоит тысячи слов. LXF

Персональные инструменты
купить
подписаться
Яндекс.Метрика