Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LaTeX

.pdf
Скачиваний:
89
Добавлен:
23.03.2016
Размер:
6.45 Mб
Скачать

LaTeX Учебник

о таблицах

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

\centering

 

 

 

 

 

 

 

 

 

 

 

 

\begin{tabular}[c]{l|ll}

 

ИЛИ

 

Истина

Ложь

 

 

\textbf{\ ИЛИ} & Истина & Ложь \\[2mm]\hline

 

 

 

 

 

 

 

 

Истина

& Истина & Истина \\

 

Истина

 

Истина

Истина

 

Ложь

& Истина & Ложь

 

Ложь

 

Истина

Ложь

\end{tabular}

Рис. 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 число повторений. Это своеобразный цикл.

\centering

 

 

 

 

 

 

 

\begin{tabular}{|*{3}{c|}}

 

ИЛИ

 

Истина

 

Ложь

 

\textbf{ИЛИ} & Истина & Ложь \\[2mm]

 

 

 

 

\hline\hline

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Истина & Истина & Истина \\

 

Истина

 

Истина

 

Истина

 

 

Ложь

 

Истина

 

Ложь

 

Ложь & Истина & Ложь

 

 

 

 

 

 

 

 

 

 

 

\end{tabular}

 

 

 

 

 

 

 

Рис. 4.

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

На DVD

TeX Live 2007

\centering \begin{tabular}{c||p{2cm}@{$\pm$\ }r|} \textbf{ИЛИ} & Истина & Ложь \\[2mm]

\cline{2-3}

Истина & Истина & Истина \\ \cline{1-1}\cline{3-3}

Ложь & Истина & Ложь\\ \cline{2-2} \end{tabular}

ИЛИ

Истина

±

Ложь

Истина

Истина

± Истина

Ложь

Истина

±

Ложь

Рис. 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.

Июнь 2007 Linux Format 87

Выравнивание чисел
Часто содержимым таблицы являются некоторые числа, поэтому повышенное внимание к их выравниванию (с целью упрощения вос-

Учебник LaTeX

 

 

Клетки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

приятия) является вполне оправданным. Пакет dcolumn из коллек-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ции tools добавляет ещё одну спецификацию к формату столбцов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для объединения расположенных рядом (по горизонтали клеток) мож-

таблицы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

но воспользоваться командой \multicolumn{n}{формат колонки}{текст}:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\centering

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\begin{tabular}{|c|l|D{.}{,}{5}|}

 

0.3141

 

0.3141

 

0,3141

 

 

 

 

\centering

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.3141

& 0.3141

& 0.3141 \\

 

 

 

 

 

 

 

 

\begin{tabular}{|*{3}{c|}}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.141

& 3.141

& 3.141 \\

 

 

3.141

 

3.141

 

3,141

 

 

 

 

 

 

\textbf{ИЛИ} & Истина & Ложь \\[2mm]

 

 

 

 

ИЛИ

Истина

Ложь

 

 

 

 

 

 

31.415 & 31.415 & 31.41 \\

 

 

31.415

 

31.415

31,41

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\hline\hline

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\end{tabular}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Истина & \multicolumn{2}{c}{Истина} \\

 

 

 

Истина

 

 

 

Истина

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ложь

Истина

Ложь

 

 

 

 

 

 

Рис. 9.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ложь

& Истина

& Ложь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\end{tabular}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Новая спецификация имеет формат: D{delim}{output}{nfruc}, где

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

delim символ или набор символов, по которому происходит выравни-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вание (обычно это точка или запятая), output символ, который заме-

 

 

 

 

Первый обязательный параметр соответствует числу объединяе-

щает delim при компиляции (например, иногда бывает нужно заменить

 

 

 

 

мых колонок, второй формату результирующей колонки, третий это

точку на запятую), nfrac максимальное число позиций в дробной

 

 

 

 

текст.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

части числа (при отрицательном значении число позиций не фикси-

 

 

 

 

Для объединения клеток по вертикали можно воспользоваться паке-

руется). Дополнительную информацию можно найти в документации:

 

 

 

 

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

dcolumn.pdf.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пакет rccol обладает схожей функциональностью, но умеет округ-

 

\centering

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лять значения.

К сожалению, мне не удалось заставить его нор-

 

\begin{tabular}{|*{3}{p{1.2cm}|}}

 

 

 

 

ИЛИ

 

 

Истина

 

Ложь

 

 

 

 

мально работать в случае, когда в качестве разделителя использу-

 

\textbf{ИЛИ} & Истина & Ложь \\[2mm]

 

 

 

 

 

 

 

 

 

 

 

 

\hline\hline

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ется точка. Возможно, это просто недоразумение – по крайней мере,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Истина

 

 

Истина

 

Истина

 

 

 

 

 

Истина

& \multirow{2}{1.2cm}{Истина} & Истина \\

 

 

 

 

 

 

 

 

документация (rccol.pdf) утверждает, что с точкой все должно быть

 

 

Ложь

 

 

 

Ложь

 

 

 

 

 

Ложь

&

 

& Ложь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в порядке.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\end{tabular}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пакет warpcol предоставляет общую процедуру форматирова-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ния числовых колонок. В его документации (warpcol.pdf) представ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лены примеры, иллюстрирующие различные эффекты, связанные с

 

 

 

 

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

выравниванием.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В качестве первого аргумента передаётся число строк, которые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

займёт объединённая клетка, далее можно указать ширину ячейки или

CSV (от англ. Comma-Separated Values – значения, разделённые запя-

 

 

 

 

включить ее её автоматическое вычисление. Кстати, число строк может

тыми) это текстовый формат, предназначенный для представления

 

 

 

 

быть и отрицательным. В этом случае объединяются клетки, располо-

табличных данных. Для прямого доступа к ним можно воспользоваться

 

 

 

 

женные выше команды. Подобное может потребоваться, чтобы согла-

пакетом csvtools. Документация (csvtools.pdf) достаточно подробна, но

 

 

 

 

совать свою работу с пакетом colortbl:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лучше все же написать скрипт, который будет считывать необходимые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сведения и генерировать готовый tex-файл.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\centering

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\begin{tabular}{c>{\columncolor{yellow}}cc}

 

один

 

 

 

 

 

 

 

 

 

 

 

Клоны tabular

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\backslashbox{два}{один} & Истина & Ложь \\

 

 

два

 

 

Истина

 

Ложь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\rowcolor{yellow}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Истина

 

 

 

 

Истина

 

 

 

tabularx

из коллекции tools

– это расширение tabular, позволяющее

 

Истина &

 

& Истина \\

 

 

 

 

 

Истина

 

 

 

 

 

 

 

 

 

 

Ложь

 

 

 

Ложь

 

 

 

Ложь

& \multirow{-2}*{Истина} & Ложь

 

 

 

 

 

 

 

 

 

 

 

 

автоматически

вычислять

ширину колонок,

имеющих

 

 

форматный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\end{tabular}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

определитель X.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 8.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\centering

 

 

 

 

 

 

0,3141

 

 

очень

 

 

0.3141

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пакет colortbl предназначен для раскрашивания таблицы в разные

\begin{tabularx}{\textwidth}{|D{.}{,}{4}|X|c|}

 

 

 

 

 

 

 

 

длинная

 

 

 

 

 

 

 

 

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

0.3141 & очень длинная строка & 0.3141 \\

 

 

 

3,141a

 

 

строка

 

 

 

 

 

 

 

 

3.141\footnote{В окружение tabularx можно

 

 

 

 

 

3.141

 

 

3.141

 

 

 

 

 

 

ментации colortbl.pdf.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

добавлять подстрочное примечание}

 

 

 

aВ окружение tabularx мож-

 

 

 

 

Команда \backslashbox{текст}{текст}, делящая клетку на две части

& 3.141

& 3.141

 

 

 

 

 

 

 

 

 

 

 

 

 

 

но

 

 

добавлять подстрочное

 

 

 

 

\end{tabularx}

 

 

 

 

 

 

 

 

 

 

 

 

наклонной чертой, определена в пакете slashbox. Иногда так оформля-

 

 

 

 

 

 

примечание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ют клетку на перекрестии боковика и головки. С пакетом идёт пример:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

slashbox.tex.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 10.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Автор кириллических шрифтов lh Ольга Лапко предлагает для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

более изощрённой работы с таблицами пакет makecell. В нем опре-

В качестве первого аргумента окружения tabularx передаётся шири-

 

 

 

 

делена команда \makecell, которая «создаёт окружение одноколоноч-

на таблицы. При компиляции X преобразуется в p{ширина}, где вместо

 

 

 

 

ной таблицы с предопределёнными общими параметрами выключки,

ширины подставляется величина, автомататически вычисленная таким

 

 

 

 

интерлиньяжа и вертикальных отбивок вокруг. Её удобно использовать

образом, чтобы ширина таблицы в целом оставалась неизменной. Если

 

 

 

 

для многострочных ячеек. Дополнительный аргумент команды позво-

в таблице присутствует более одного столбца, имеющего формат X,

 

 

 

 

ляет изменить выключку таблицы». В пакете содержится документация

то для ее формирования может потребоваться несколько проходов.

 

 

 

 

на английском языке (makecell.pdf), которая дублируется русскоязыч-

Все подробности, естественно, можно почерпнуть из документации

 

 

 

 

ной (makecell-rus.tex).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(tabularx.pdf).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пакет tabulary также является модификацией стиля tabular, а точ-

 

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

88 Linux Format Июнь 2007

tabvar является более современной версией стиля tableaux. Поэтому подробности и примеры лучше всего искать в его документации: tabvar. pdf и demo.tex.
Пакет pb-diagram пригодится, когда нужно нарисовать простенькую диаграмму (это, конечно, не совсем таблицы, но определенное сходство наличествует):
Рис. 12.

LaTeX Учебник

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

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

вфайле ctable.pdf.

1.

Красный

или

зелёный

или

голубой

2.

Низкий

или

средний

или

высокий

3.

Радостный или

грустный или

удивлённый

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

 

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

Окружение tabular и его производные хороши всем, за исключением

 

того, что они не могут занимать больше одной страницы. Для вёрстки

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

на несколько страниц обычно используют одно из двух окружений:

supertabular и longtable, которые определённы в одноимённых стилях.

Пакеты tableaux и tabvar созданы для исследования области опреде-

Они обладают схожей функциональностью, но разными способами

ления и поведения функции. Пригодится при изучении или написании

оформления. Как supertabular, так и longtable предоставляют возмож-

методички по началам матанализа. Молодцы французы!

ность создания стандартной шапки и стандартного окончания, появ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

ляющихся в начале (на каждой новой странице) и в конце таблицы.

 

−∞

 

 

 

 

 

 

 

 

+

x

2

 

0

 

1

 

Подробности можно отыскать в документации: supertabular.pdf для

 

 

 

supertabular и longtable.pdf для longtable из коллекции tools.

f (x)

 

 

 

 

 

0

+

 

В отличии от supertabular, longtable гарантирует неизменность

 

 

 

 

 

 

ширины столбцов на протяжении всей таблицы – это достигается

 

 

 

 

 

 

 

 

 

f (x)

+

 

 

 

 

 

 

 

 

 

 

несколькими проходами LaTeX. Неизменность ширины столбцов в

0

 

 

 

 

 

 

 

 

 

зависимости от ситуации может рассматриваться и как преимущество,

 

 

+

 

 

 

+

и как недостаток.

 

 

 

3

Кроме окружения supertabular, в одноименном пакете определе-

 

 

 

 

−∞

2

 

но окружение mpsupertabular, которое заключает каждую отдельную

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

страницу («кусок») в окружение minipage, что позволяет использовать

 

 

 

 

 

 

 

 

 

 

 

 

подстрочные примечания прямо в таблице.

Рис. 13.

 

 

 

 

 

 

 

 

 

 

 

Более молодым и, возможно, правильным является пакет xtab. По

 

 

 

 

 

 

 

 

 

 

 

 

сути дела, это расширение supertabular с некоторыми улучшениями и

 

 

 

 

 

 

 

 

 

 

 

 

исправлениями. Подробная документация доступна в файле xtab.pdf.

 

 

 

 

 

 

 

 

 

 

 

 

Вывод

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

\centering

 

 

\begin{tabular}{p{0.7\textwidth}@{}r}

 

 

 

Глава 1 . . . . . . . . . . . . . . . . . . . .

2

Глава 1\dotfill & 2 \\

 

 

 

Глава 2 . . . . . . . . . . . . . . . . . . . .

10

Глава 2\dotfill & 10 \\

 

 

 

Глава 3 . . . . . . . . . . . . . . . . . . . .

124

Глава 3\dotfill & 124

 

 

\end{tabular}

 

 

Рис. 11.

 

9.3%

 

 

 

 

6 104

 

 

7 105

 

ψ

 

 

χc0γ

·

 

J/ψγγ

·

+ γγ

65 тыс.

420

50

 

 

 

 

 

6.6·103

 

 

12%

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

J/ψγ

 

+

 

 

Рис. 14.

Команда \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}

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

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

Через месяц Завершая этот длинный цикл, мы познакомимся с программированием в LaTeX.

Июнь 2007 Linux Format 89

\begin{outlined}
\newenvironment, например:
\newenvironment{outlined}{\hrule\begin{center}}%
{\end{center}\smallskip\hrule}
Для
Выделенный текст.
определения нового окружения
используется команда
ЧАСТЬ 11 Завершая этот длинный цикл статей, глазами профессионального программиста.

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

Начала

Евгений Балдин посмотрит на LaTeX

 

Когда придумываешь что-то сам,

\newcommand определяет новую команду. Если такая команда уже

 

высок шанс ничего не придумать.

существует, то при компиляции генерируется ошибка. \renewcommand

 

переопределяет уже существующую команду. В свою очередь,

 

Но когда живёшь чужим умом,

 

\providecommand создаёт новую команду, если на момент описания

 

 

 

 

уж точно ничего не придумаешь.

такой команды не было, и ничего не делает в противном случае.

 

Никогда не делай того, что делают другие.

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

 

имя команды и её описание. Если команде необходимо передать пара-

 

Это на 100% обрекает на неудачу.

 

метр/параметры, то первый необязательный аргумент (N) должен при-

 

 

 

нять значение от одного (1) до девяти (9). В LXF85 (см. прилагаемый

 

Герш Ицкович Будкер

диск) обсуждался макрос для дублирования знака в формуле при пере-

 

носе её на следующую строку (\(a+b\hm{=}c\)):

 

 

 

 

 

 

 

 

 

 

 

 

\newcommand*{\hm}[1]{#1\nobreak\discretionary{}%

 

 

 

 

 

 

 

 

 

{\hbox{$\mathsurround=0pt #1$}}{}}

 

 

 

LaTeX не просто даёт возможность набирать текст – он позволяет его

Вместо знака решётки (#) с цифрой после него при компиляции

 

программировать, а следовательно, перекладывать часть своей работы

макроса подставляется соответствующий параметр. В данном случае

 

на компьютер. Привычка думать – одна из самых необычных особен-

параметр был только один, и можно сказать, что его значение сохраня-

 

ностей разумного человека. Она позволяет экономить силы и время.

ется в «переменной» #1.

 

 

 

 

 

Звёздочка (*) в конце макроса \newcommand налагает на пере-

Создаём свои …

даваемый параметр команды \hm дополнительное условие: в нем не

должно быть пустых строк и команды \par. В некоторых случаях это

 

 

 

упрощает отладку кода.

 

 

…команды, окружения и прочее. Возникшая в процессе набора про-

Наличие второго необязательного параметра в макросах определе-

 

стенькая надоедливая проблема наверняка решена, и не один раз. С

ния новых команд позволяет определить первый параметр создавае-

 

другой стороны, при нарастающей квалификации бывает проще изоб-

мой команды как параметр по умолчанию:

 

рести этот велосипед заново в удобной на текущий момент форме,

\newcommand{\exmpl}[1][умолчанию]%

 

 

 

например:

 

 

 

{<<значение по #1>>}

Сравните «значение по умолчанию» и

 

 

 

 

Сравните \exmpl{} и \exmpl[требованию].

«значение по требованию».

 

 

\newcommand{\ee}{\ensuremath{e^{+}e^{-}}\xspace}

 

Новые команды часто создаются для комбинаций, используемых

 

 

 

 

исключительно в математическом окружении. Команда \ensuremath

Рис. 2.

 

 

 

обеспечивает это окружение независимо от текущего режима:

 

 

 

\(J/\psi\to\ee\) является одним из

подвидов \ee-рассеяния.

Рис. 1.

J/ψ → e+eявляется одним из подвидов e+e-рассеяния.

Выделенный текст.

\end{outlined}

Команда \xspace из одноимённого пакета добавляет в конце коман-

 

ды пробел в случае, если за ней не следует знаков препинания, то есть

Рис. 3.

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

 

команды.

Формальное описание этой команды похоже на описание

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

\newcommand:

свои или переименовать уже имеющиеся макросы:

 

\newenvironment{«окружение»}[N][«зн. по ум.»]%

 

 

 

\newcommand{«команда»}[N][«зн. по ум.»]{«определение»}

{«код, открывающий окружение»}%

 

 

 

\renewcommand{«команда»}[N][«зн. по ум.»]{«определение»}

{«код, закрывающий окружение»}

 

 

Точно так же, как и в случае \newcommand, созданному окружению

\providecommand{«команда»}[N][«зн. по ум.»]{«определение»}

Месяц назад Мы разобрались со структурой книжных таблиц и их версткой в LaTeX.

90 Linux Format Июль 2007

LaTeX Учебник

программирования

можно передавать параметры. Подставлять параметры можно только в коде, открывающем окружение. Кроме создания нового окружения, можно также переопределять уже имеющиеся с помощью аналогичной команды \renewenvironment.

В разделе, посвящённом описанию презентационного класса beamer (LXF85), упоминалось ещё об одной возможности создавать новые именованные окружения с помощью команды \newtheorem:

\newtheorem{Texmpl}{Пример}

Пример 1 (Теорема Пифагора).

\begin{Texmpl}[Теорема Пифагора]\label{th:1}

Пифагоровы штаны во все стороны равны.

Пифагоровы штаны во все сторо-

\end{Texmpl}

ны равны.

\begin{Texmpl}\label{th:2}

Пример 2. Мудрость ограниче-

Мудрость ограничена, а глупость бесконечна.

на, а глупость бесконечна.

\end{Texmpl}

 

Можем сослаться первую теорему:~\ref{th:1},

Можем сослаться первую теоре-

му: 1, а можно и на вторую: 2

а можно и на вторую:~\ref{th:2}

 

Рис. 4.

Команда \newtheorem имеет две формы:

\newtheorem{«теорема»}[«существующая теорема»]{«заголовок»}

\newtheorem{«теорема»}{«заголовок»}[«имя счётчика»]

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

Счётчики и другие переменные

определённого бокса, счётчики используются для отображения какойлибо структурной информации. Поэтому особое внимание уделяется представлению значения счётчика в тексте. Чтобы просто отобразить численное значение счётчика с помощью арабских цифр, используется команда \arabic{счётчик}. Для римской числовой нотации необходимо воспользоваться командой \Roman и \roman – заглавные и строчные буквы соответственно. Счётчик может быть также представлен буквой алфавита: \alph – латинская строчная, \asbuk – кириллическая строчная

и\Asbuk – кириллическая заглавная.

Встандартных классах уже определён набор счётчиков, в которых хранятся номера страницы (счётчик page), раздела (соответственно, счётчики part, chapter, section, subsection, subsubsection и т.д.), подстрочного примечания (счётчик footnote), плавающих окружений (счётчики figure и table) и формул (equation). При создании счётчика также автоматически создаётся команда с префиксом \the перед именем счётчика. Вызов такой команды выводит значение счётчика. При выводе номера раздела, плавающего объекта, уравнения и тому подобного используются именно такого рода команды, поэтому, переопределив \the-команду, можно немного изменить стиль, например, следующая команда предписывает в дальнейшем маркировать все страницы в римском стиле:

\renewcommand{\thepage}{\Roman{page}}

На базе счётчиков можно организовывать иерархические структуры, то есть можно указывать зависимости:

\newcounter{Main}\addtocounter{Main}{10}

 

\newcounter{Dep}[Main]\addtocounter{Dep}{10}

Было: 10.10

Было: \theMain.\theDep\par

Стало: 11.0

\stepcounter{Main}

Стало: \theMain.\theDep

 

 

Рис. 6.

«Другие переменные» уже обсуждались в разделе Определённые «размеры» и переменные «длины» (LXF89). Операции с этими переменными выполнялись с помощью команд \newlength, \setlength и \addtolength. Аналогично, в LaTeX представлена и целочисленная арифметика с использованием счётчиков в качестве переменных:

\newcounter{MyCount}\setcounter{MyCount}{5}

 

Значение MyCount равно \arabic{MyCount},

Значение MyCount равно 5,

или~\alph{MyCount}, или \Asbuk{MyCount}.\par

или e, или Д.

\addtocounter{MyCount}{1550}

1555 эквивалентно MDLV.

\arabic{MyCount} эквивалентно \Roman{MyCount}.

 

 

При создании нового счётчика можно создать связь с уже существующим, указав имя существующего счётчика в качестве необязательного параметра. В примере выше счётчик Dep зависит от счётчика Main. Эта связь проявляется в том, что при увеличении значения базового счётчика (Main) на единицу с помощью команды \stepcounter подчинённый счётчик (Dep) обнуляется. Обычно новый счётчик устанавливают в подчинение счётчикам разделов (section).

Команда \refstepcounter{счётчик} отличается от \stepcounter тем, что помимо обнуления всех зависимых счётчиков, \refstepcounter определяет значение, выводимое командой ссылки \ref, как текст, создаваемый \the-командой:

Рис. 5.

% окружение “Задача”

\newcounter{Problem}[section]

Новый счётчик создаётся с помощью команды \newcounter. При создании он инициализируется нулём. Создание счётчика является глобальной операцией, то есть при компиляции информация о нём не исчезнет, даже если новый счётчик был определён внутри окружения. Для присвоения счётчику другого значения используется команда \setnewcounter, а для изменения на какое-то определённое число – \addtocounter.

В отличие от длин, основная роль которых – помнить размеры

\renewcommand{\theProblem}{\thesection.\arabic{Problem}}

\newenvironment{Problem}[0]{%

\par\refstepcounter{Problem}%

\theProblem\,}%

{\par}%

Здесь определено окружение Problem и одноимённый счётчик. Счётчик Problem зависит от счётчика раздела. Вывод счётчика \theProblem переопределён как номер раздела, за которым следует уже

На DVD

Цикл

«Компьютерные TeXнологии» в PDF

Июль 2007 Linux Format 91

Учебник LaTeX

сам счётчик. Внутри окружения счётчик Problem увеличивается на еди-

 

меров [c]skeleton.dtx и [c]skeleton.ins.

 

 

ницу с помощью команды \refstepcounter{счётчик}. Результат использо-

 

За работу с DTX-файлами отвечает пакет doc и сопутствующая ему

вания нового окружения представлен в следующем примере:

 

утилита DOCSTRIP (файл docstrip.pdf). Основная идея пакета doc состо-

\begin{Problem}\label{ex:1}

 

 

 

 

 

ит в совмещении кода с документацией, что облегчает поддержку и

 

 

 

 

 

развитие пакета.

 

 

Задача раз

 

 

 

 

 

 

 

 

11.2.1 Задача раз

 

 

 

 

 

 

\end{Problem}

 

 

Установочный INS-файл

 

 

\begin{Problem}\label{ex:2}

 

11.2.2

Задача два Ссылки на

 

 

 

Задача два

 

 

 

Для извлечения кода и документации из DTX-пакета следует напи-

 

раз 11.2.1 и два 11.2.2.

 

 

\end{Problem}

 

 

 

сать специальный установочный файл. Набор инструкций достаточно

 

 

 

 

 

Ссылки на раз~\ref{ex:1} и два~\ref{ex:2}.

 

 

 

стереотипен:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

%% Стандартный копирайт по выбору (рекомендуется LPPL/GPL)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

%%

 

 

 

Рис. 7.

 

 

 

 

 

 

 

 

 

 

 

 

 

%% Первый шаг - загрузка DOCSTRIP.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\input docstrip.tex

 

 

При работе с переменными LaTeX также могут помочь следующие

 

 

 

 

%% Подробный отчёт о каждом шаге хорош только когда пакет

пакеты:

 

 

 

 

 

 

 

 

 

 

 

 

 

%% отлаживается.

 

 

calc Макропакет из коллекции tools для арифметических вычисле-

 

 

 

 

 

\keepsilent

 

 

ний, уже упоминавшийся в разделе calc (LXF89). Этот пакет перео-

 

 

 

 

 

%% Директория, в которую устанавливается пакет. Имя

 

 

пределяет команды типа \newcounter так, что в них можно использо-

 

 

 

 

%% директории является относительным по отношению к

вать арифметические выражения, хотя и с некоторыми ограничениями.

 

 

 

 

 

%% базовой директории $(TEXMF).

 

 

Подробности в файле calc.pdf.

 

 

 

 

 

 

 

 

 

\usedir{tex/latex/{«имя пакета»}}

 

 

ifthen Макропакет, в котором определены команды условного пере-

 

 

 

 

%% Определение преамбулы, которая вставляется во все

хода \ifthenelse и цикла \whiledo. Подробности в файле ifthen.pdf. Также

 

 

 

 

%% сгенерированные файлы. Обычно это информация об авторе

можно присмотреться к усовершенствованной версии этого пакета

 

 

 

 

 

%% и пожелания пользователям.

 

 

xifthen.

 

 

 

 

 

 

 

 

 

 

 

 

 

\preamble

 

 

fmtcount Представляет различные форматы (двоичный, восьмерич-

 

 

 

 

 

Текст преамбулы

 

 

ный, шестнадцатеричный и т.д.) отображения счётчиков (fmtcount.pdf).

 

 

 

 

 

\endpreamble

 

 

multido Определяет оператор цикла \multido (multido.pdf).

 

 

 

 

 

%% Извлечение файлов пакета из dtx. Основной шаг,

 

 

tokenizer Позволяет

разбивать

текстовые списки на элементы

 

 

 

 

 

%% который может повторяться несколько раз.

 

 

(tokenizer.pdf).

 

 

 

 

 

 

 

 

 

 

 

 

\generate{\file{«извлекаемый файл»}{\from{«dtx-файл»}{метка}}}

totpages Даёт возможность узнать число страниц в документе и

 

 

 

 

 

 

 

 

 

тому подобную информацию (totpages.pdf).

 

 

 

 

 

 

 

 

 

xkeyval Улучшенная версия пакета keyval, который позволяет пере-

 

 

 

 

%% Информация для пользователя. Всегда что-то полезно сказать

давать/принимать в качестве параметров пары значений «key=value»

 

 

 

 

 

%% после установки.

 

 

(xkeyval.pdf).

 

 

 

 

 

 

 

 

 

 

 

 

 

\obeyspaces

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\Msg{******************************************************

Создаём свой пакет

 

**}

 

 

 

 

 

 

 

 

 

\Msg{*

Здорово, что Вы поставили этот пакет.

*}

 

 

 

 

 

 

 

 

 

 

 

 

\Msg{*

Прочитайте документацию перед использованием! *}

 

Предположим, что вы уже владеете искусством программирования в

 

 

 

 

\Msg{******************************************************

среде LaTeX. Чтобы распространить свои наработки, следует органи-

 

**}

 

 

 

зовать исходные тексты в удобном для дальнейшей поддержки, пере-

 

 

 

 

 

%% Метка конца установочного файла.

 

 

даче и установке виде. Можно и не стараться, если вас не интересует

 

 

 

 

 

\endbatchfile

 

 

конечный результат, но знать, как правильно устроен пакет, полезно и

 

Пакетный DTX-файл

 

 

новичку, так как эффективное обучение программированию напрямую

 

 

 

связано с изучением уже существующего кода.

 

Пакетный DTX-файл содержит в себе и код с комментариями, и текст

В LaTeX-сообществе принято распространять свои пакеты и докуописания пакета. Структура DTX-файла позволяет получить печатную

ментацию к ним в виде автономных файлов с расширением dtx

 

документацию после прогона через LaTeX. Код с комментариями тоже

(DTX-файлы). Для автоматической установки пакетов используются

 

может стать частью документации. Это шаг по направлению к «грамот-

инструкции, записанные в файлах с расширением ins (INS-файлы).

 

ному программированию» [literate programming].

 

 

Для более подробной информации следует обратиться к инструкции

 

Наличие комментариев в коде заставляет повторять процедуру ком-

«How to Package Your LaTeX Package», созданной Скотом Пакиным

 

пиляции дважды. В первый раз отрабатывается LaTeX-код, а затем ком-

[Scott Pakin]. Файл dtxtut.pdf, как обычно, можно найти в стандартной

 

ментарии. Во втором случае знак % перед комментарием игнорируется,

поставке LaTeX или на CTAN. Вместе с документацией идут файлы при-

 

и текст комментария передаётся на вход LaTeX, если он (комментарий)

 

 

 

 

 

 

не окружён командами \iffalse-\fi.

 

 

Внимание!

Политика создания названий команд в TeX-подобной среде такова, что для новых пакетов необходимо придумывать новые команды. Это сделано для обеспечения абсолютной совместимости сверху вниз. К сожалению, подобная политика в случае бездумного использования слов может привести к «захватыванию» подходящих сочетаний. Примером правильного именования служит пакет listings, где вместо, казалось бы, подходящего по названию окружения listing используется lstlisting.

Пролог

В начале следует, естественно, добавить информацию об авторе: %\iffalse meta-comment

% Этот текст не обрабатывается LaTeX’ом. Слово meta-comment %добавлено просто для удобства чтения кода человеком и %означает, что этот текст предназначен именно для него (человека). %\fi

В ins-файле в команде \generate использовался параметр «метка». Он говорит DocStrip, что следует выбирать строки, которые следуют за комментарием и конструкцией <метка> или между тэгами <*метка> и

92 Linux Format Июль 2007

LaTeX Учебник

</метка>. Далее идёт код заголовка пакета, соответствующего метке «метка»:

% \iffalse

%<метка> \NeedsTeXFormat{LaTeX2e}

%<метка> \ProvidesPackage{«имя пакета»}

%<метка> [<ГГГГ>/<ММ>/<ДД> v<версия> <краткое описание>]

Строчку «<ГГГГ>/<ММ>/<ДД> v<версия> <краткое описание>» нужно заменить на дату, версию и краткое описание, соответственно.

Закончить пролог необходимо следующими словами, создающими основную документацию:

%<*driver>

\documentclass{ltxdoc}

\usepackage{«имя пакета»}

\begin{document}

\DocInput{«dtx-файл»}

\end{document}

%</driver>

% \fi

Это единственная часть, относящаяся к документации, которая не начинается со знака комментария (%).

В прологе можно указывать ещё некоторое количество инструкций, уточняющих формат создаваемой документации.

Пользовательская документация

Прежде всего, следует учесть, что подавляющий объём описаний для пакетов LaTeX сделан на английском языке. Для этого есть довольно веские основания, связанные с размером англоязычной аудитории.

Написание документации для DTX-пакета ничем не отличается от написания обычного LaTeX-документа, за тем исключением, что не следует забывать о знаке комментария (%) в начале строки:

%\title{Пакет \textsf{«имя пакета»}}

%\author{«Ваше имя» \\ \texttt{«Ваш e-mail»}}

%\maketitle

%текст документации

Кстандартным LaTeX-командам секционирования уровня paragraph добавляются \DescribeMacro{макрос} и \DescribeEnv{окружение}.

Код с комментариями

Даже если допустить, что лучшая документация для программиста – это сам код, то для нормального человека описательный текст все равно будет предпочтительнее. Проблема совмещения кода и описания является основной причиной возникновения «грамотного программирования».

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

%\StopEventually{\PrintIndex}

%%Описание окружения. %\begin{environment}{«имя окружения»}

%%Аналогично, существует окружение macros, для описания

%%новых команд.

% \begin{macrocode} «Здесь идёт код, вида:»

\newenvironment{«имя окружения»}{начало}{окончание} % \end{macrocode}

%\end{environment}

%\Finale

\endinput

Команда \StopEventually{} отмечает начало кода и принимает в качестве параметра команду, которую следует выполнить в конце документации – например, распечатать алфавитный указатель \PrintIndex.

Любой код следует обрамлять с помощью окружения macrocode. Это позволит включить его в печатную документацию. Есть две особенности для этого окружения, которые следует учитывать:

Между % и \begin{macrocode} должно быть ровно четыре (4) пробела. Аналогичное правило действует и для \end{macrocode},

Внутри этого окружения не должно быть текста, начинающегося с %. Внутри окружений environment и macros может быть несколько

вставок кода и текста.

Пакетирование

Часто LaTeX-пакеты распространяются в виде одного DTX-файла. Существует способ включить установочный INS-файл в файл пакета:

%<*batchfile>

\begingroup

«Содержание ins-файла»

\endgroup

%</batchfile>

Следует только убрать заключительную команду \endbatchfile, чтобы LaTeX мог скомпилировать остальное.

Всё. Для распространения свой пакет лучше всего поместить на CTAN. Для выгрузки следует обратиться к ресурсу http://www.ctan.org/ upload. Всегда необходим краткий README с описанием. Собранная документация в виде PDF-файла также является хорошим тоном.

Напутствие

Документируйте каждый шаг. Пишите как можно больше качественного текста, так как его мало не бывает. Живучесть программы определяется не только кодом, но и описанием. «Светлое будущее» за грамотным программированием.

LaTeX-цикл в Linux Format подошёл к концу. Честно говоря, я сам за это время узнал много нового для себя. Надеюсь, мне удалось поделиться этими знаниями с вами. В этой информации нет никакой чёрной магии – всё просто и логично, и эта информация полезна, так как позволяет автоматизировать одно из самых сложных ремёсел человеческой цивилизации – создание книг. Пишите тексты, большие и маленькие: они не пропадут. LXF

Июль 2007 Linux Format 93

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]