ЛаТеХ
48 коммент.
"Как оформить диплом в LaTeX?",
которую написал virens,
ведущий блога "Записки дебианщика".
При наборе таблиц в LaTeX, как нигде, нужна правильная организация кода - таблицы это то, что в ТеХе делать сложнее всего. И если вы свалите в кучу все управляющие метки ЛаТеХа, то потом будете проклинать всё на свете. Здесь каждый выбирает свой стиль по своему вкусу, однако надо постараться отличать управляющие символы от собственно текста таблицы.
Кое-кто из комментаторов ниже распалялся по поводу того, что, дескать, ``всё уже давно написано, читайте книжки''. Я ещё раз уточню свою позицию по этому поводу: время тыкания людей в пудовые талмуды и дурно написанные мануалы прошло. Документация, как и программы, должны быть повёрнуты к пользователю лицом. Методические пособия типа этого помогут людям начать разбираться с предметом, подталкивая к изучению книг и делая кривую обучения более пологой.Так как вёрстка таблиц в ЛаТеХ - дело не для слабонервных, лучше предварительно набросать на листке бумаги или графическом редакторе примерную схему таблицы. Делать наброски карандашом всегда проще, чем с воем и рыданиями переделывать код таблицы.
Небольшое введение в ЛаТеХнические таблицы
Таблица в LaTeX в идеологическом смысле очень похожа на рисунок: есть окружение \begin{table}... \end{table}, которое собственно и содержит все ``опознавательные знаки'' вроде подписи и ссылки, и собственно сама таблица \begin{tabular}{|rlc|} ... \end{tabular}.Поэтому окружений для создания таблиц в LaTeX два: \begin{tabular}{|rlc|} ... \end{tabular}, которое управляет тем, как выглядит таблица, и \begin{table}... \end{table}, которое даёт вам возможность оформить заголовок таблицы с помощью команды \caption{} и поставить на таблицу ссылку с помощью привычной команды \label{}.
Набор простой таблицы в LaTeX
Например, если нам не требуется ссылка на таблицу или подпись под ней, тогда достаточно только окружения \begin{tabular}... \end{tabular}. Окружение tabular создаст простую таблицу, без подписи и ссылки. Вот пример кода простой таблицы в ЛаТеХе.\begin{center} \begin{tabular}{ccc} Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\ Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\ Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\ \end{tabular} \end{center}
Колонки отделяются символом &, строки в таблице заканчиваются двойным слешем \ после крайней колонки. А вот как таблица выглядит в документе:Здесь есть партизанская засада: если вы внутрь окружения tabular поставите метку командой \label{}, а потом сошлётесь на неё, то получите совсем не то, что ждёте. Ссылка в тексте укажет на номер раздела, а вовсе не таблицы.
Тут-то мы и вспоминаем про замечательное окружение table, которое позволяет оформить таблицу с подписью и ссылкой. Вот как наша таблица будет выглядеть с этим окружением:
\begin{table}[H] \caption{Исправьте это на подпись к таблице} \label{tabular:timesandtenses} \begin{center} \begin{tabular}{ccc} Расширение краёв: & \textbf{1,0-1,4} & размер ФРТ \\ Аподизация: & \textbf{0,25-0,30} & размер ФРТ \\ Сглаживания краёв: & \textbf{0,25-0,50}& размер ФРТ \\ \end{tabular} \end{center} \end{table}
Вот как это выглядит в документе:Вроде как то же самое, только номер теперь стал 1.1. Простановка ссылок осуществляется так же, как и всегда, то есть: поставить ссылку в LaTeX можно командой \label{tabl:Textssylki} а сослаться на неё командой \ref{tabl:Textssylki}. Не забываем ставить тильду между словом и ссылкой слово~\ref{tabl:Textssylki} чтобы ваша ссылка не уехала на другую строчку.
Управление видом таблицы в LaTeX
Сама таблица, то есть текст, набранный строго по столбцам и колонкам, делается с помощью окружения tabular. Важно помнить, что tabular есть просто текст-как-таблица и не содержит заголовка или ссылки - это делает окружение table.Точное размещение таблиц
Окружение table позволит вам указывать LaTeX, где вы хотите видеть таблицу:- оставить определение места таблицы в тексте на усмотрение ЛаТеХа - \begin{table}[h] "хотелось бы таблицу здесь";
- настойчиво просить разместить таблицу после текста \begin{table}[h!] "очень хочу таблицу здесь", или
- ударить кулаком по столу - таблицу тут \begin{table}[H], то есть "хочу таблицу именно здесь и баста"
- с прибавлением буквы p мы заставляем поместить ЛаТеХ таблицу отдельно на страницу так: \begin{table}[pH].
- добавление букв t или b заставляют LaTeX поместить таблицу \begin{table}[tb!] вверху или внизу, соответственно.
Размеры колонок в таблице LaTeX
Сама по себе таблица находится в окружении \begin{tabular}{|rlc|} ... \end{tabular}. Здесь вертикальная линия обозначает отделение линией столбцов, а R L и С выравнивание соответственно по правому / левому краю и по центру.Если столбец слишком широкий, можно задать его ширину с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70\% от ширины линии, например так: \begin{tabular}{|p{0.4\linewidth}p{0.4\linewidth}} сделает таблицу с двумя колонками по 40\% от ширины линии и отчеркнёт вертикальными линиями по бокам.
Строки отделяются друг от друга при помощи команды \hline а каждая строка таблицы завершается двойным слешем \\ или командой \linebreak.
Подписи и ссылки на таблицы
Вставка подписи к таблице \caption{Исправьте это на подпись к таблице} и ссылки на таблицу \label{tabular:timesandtenses} делается так же, как и для рисунков. То есть сначала \caption{Исправьте это на подпись к таблице} а после этого вставляем \label{tabular:timesandtenses} для того, чтобы потом сослаться на таблицу \ref{tabular:timesandtenses} в тексте.Важное замечание о порядке следования \label и \caption Если поставить \label{tab:some_table} до \caption{...}, то даже при использовании окружения table в ссылке будет выдаваться не номер таблицы, а номер раздела.Напоминаю снова и снова о необходимости ставить понятные и информативные ссылки, чтобы вы сами смогли потом понять, где то место, куда вы ссылаетесь. Ставим длинные и подробные имена ссылок, чтобы потом не искать по Тайге ris21 или tabl43. Никаких оправданий таким именам ссылок нет, и дядя Кнут будет недоволен.
Объединение нескольких колонок в одну
Иногда нужно объединить несколько колонок в одну на какой-то строке и убрать вертикальные линии для этого, например, чтобы сделать пояснения. В визуальных табличных редакторах типа OpenOffice.Calc это просто, но так как ЛаТеХе - это вообще говоря язык программирования, то здесь придётся немного сложнее. Для этого нужно воспользоваться командой \multicolumn.Синтаксис у команды простой: \multicolumn{2}{|c|}{Результаты измерений} означает, что мы объединяем 2 (два) столбца в таблице, получившаяся ячейка будет центрирована и нарисованы вертикальные линии. В объединённой колонке на той строке, где мы поместим команду \multicolumn, будет текст Результаты измерений. Вот как это выглядит в коде:
\begin{table}[H] \caption{\label{tab:canonsummary}Измерительные характеристики цифровой камеры Canon EOS 400D.} \begin{center} \begin{tabular}{|c|c|} \hline Параметр & Значение \\ \hline Разрешение & $3888 \times 2592$ \\ Размер сенсора & $22.2 \times 14.8$ мм \\ АЦП & 12~bit\\ \hline \multicolumn{2}{|c|}{Результаты измерений} \\ \hline Темновое смещение (BLO) & 256 \\ Максимальный линейный сигнал & 3070~DN \\ Значение насыщения & 3470~DN \\ \hline \end{tabular} \end{center} \end{table}
А вот как эта таблица будет выглядеть в документе:
Это может пригодиться особенно в длинных таблицах, которые простираются на несколько страниц и которые нужно переносить со страницы на страницу.
Многостраничные таблицы
Время от времени таблицы становятся длинными до неприличия и не влезают в одну страницу. Чтобы сделать многостраничную таблицу в LaTeX, используем пакет расширений \usepackage{longtable}, который подключаем в преамбуле документа (там, где остальные команды типа \usepackage). В остальном всё то же самое, как и раньше, только используем окружение longtable вместо table. Вот пример:\begin{longtable}[H]{lp{0.7\linewidth}} $A$ & area of the (geometrical) pixel [m\textsuperscript2] \\ $c$ & Speed of light $\approx 3 \cdot 10^8$ m/s \\ $DYN_{in}$ & Input dynamic range [1] \\ $DYN_{out}$ & Output dynamic range~[1] \\ $E$ & irradiance on the sensor surface~[W/m\textsuperscript2] \\ $F$ & Non-whiteness coefficient \\ $h$ & Planck's constant h $\approx6.63 \cdot 10^{-34} Js$ \\ $K$ & overall system gain~[DN/e-] \\ $k_d$ & Doubling temperature of the dark current~[$^\circ$C] \\ $N_d$ & dark current~[e-/s] \\ $N_{d30}$ & dark current for a housing temperature of $30^\circ C$~[e-/s]\textsuperscript2 \\ $S_g^2$ & variance coefficient of the spatial gain noise~[\%] \\ \end{longtable}
Вот как это выглядит в документе:
Стоит упомянуть, что если столбец слишком широкий, можно задать его ширину вот так: \begin{longtable}[h]{lp{0.7\linewidth}} с помощью выражения p{0.7\linewidth}, которое сделает столбец шириной в 70% от ширины линии.
Поворот таблицы в LaTeX
Ну и под занавес приведу пример достаточно сложной таблицы, которая повёрнута на 90 градусов (таблица в ландшафтной ориентации в ЛаТеХе). Поворот сделан при помощи команды \rotatebox{90}{я - объект} что обеспечивает поворот любого объекта на 90 градусов. Так как данные структурированы и код организован достаточно логично, редактировать таблицу относительно просто.\rotatebox{90}{ %это обеспечивает поворот любого объекта \begin{minipage}{1.5\linewidth} \begin{table}[H] \caption{Сравнение количественных данных по влиянию искажений на результат декодирования} \begin{center} \begin{tabular}{|p{5cm}c|c|} \hline \multicolumn{3}{|c|}{\textbf{Графические изображения}}\\ \hline \textbf{Характеристика} & \textbf{8-битные} & \textbf{16-битные}\\ \hline \multicolumn{3}{|c|}{Влияние шумов квантования}\\ \hline Шумы квантования & $6.3 \div 22.6\%$ & $0.2 \div 0.5\%$ \\ \hline \multicolumn{3}{|c|}{Влияние шумов фотоприёмника}\\ \hline Шумы фотоприёмника & $8.8 \div 87.5\%$ & $7.1 \div 87.6\%$ \\ \hline \multicolumn{3}{|c|}{Влияние особенностей ФРТ}\\ \hline декодирование ФРТ той же реализацией шума & $6 \div 13\%$ & $0.5 \div 15\%$ \\ \hline декодирование ФРТ с другой реализацией шума & $6 \div 14\%$ & $0.3 \div 12\%$ \\ \hline декодирование идеальным ФРТ & $6 \div 6.5\%$ & $0.2 \div 6.4\%$ \\ \hline \end{tabular} \end{center} \end{table} \end{minipage}}
Вот как таблица выглядит в документе:
Есть и другие команды для поворота объектов в LaTeX, например turn из пакета rotating. Преимущество команды \rotatebox в том, что она содержится в пакете \usepackage{rotating} и обычно graphicx уже подключён для отображения иллюстраций в LaTeX.
Заключение
В этом разделе я собрал все примеры таблиц, которые использовал в реальных документах. Этого должно хватить для того, чтобы оформить простые таблицы в LaTeX. Более сложные таблицы описаны в постах:Главное - не лениться структурировать код таблицы, и тогда таблицы в ЛаТеХе не превратятся для вас в камеру пыток.






