Шрифт:
\fВТаблица 3:\fР Встроенные константы
.sp.5
DEG 57.29577951308232087680 @180/pi@, градусы и радианы
E 2.71828182845904523536 @e@, основание натурального логарифма
GAMMA 0.57721566490153286060 @gamma@, константа Эйлера-Масчерони
PHI 1.61803398874989484820 @(sqrt5+1)/2@, золотое сечение
PI 3.14159265358979323846 @pi@, круговое трансцендентное число
.ТЕ
Из этой таблицы, кроме того, видно, как строки
tbl
помещают десятичные точки в числовых (n
) столбцах. Результат показан ниже. Таблица 3: Встроенные константы
DEG | 57.29577951308232087680 | 180/, градусы на радианы |
E | 2.71828182845904523536 | е, основание натуральных логарифмов |
GAMMA | 0.57721566490153286060 | , константа Эйлера-Масчерони |
PHI | 1.61803398874989484820 | (5 + 1)/2, золотое сечение |
PI | 3.14159265358979323846 | , круговое трансцендентное число |
И, наконец, поскольку
eqn
выделяет курсивом любую строку букв, которые она не распознает, довольно просто выделять обычные слова курсивом. Последовательность @Word@
например, печатается как Word. Но будьте внимательны: eqn
распознает некоторые обычные символы (такие, как from
и to
) и специальным образом их рассматривает: она "глотает" пробелы, поэтому указанный прием следует применять с осторожностью. Получение выходного потока
Как только ваш документ готов, вы должны соединить все препроцессоры и
troff
в цепочку, чтобы получить выходной поток. Порядок команд следующий: tbl
, eqn
, troff
. Если вы просто используете troff
, то печатайте $ troff -ms имена_файлов
(или – mm
) Иначе вам придется задать аргумент
имена_файлов
первой команде в цепочке и дать остальным командам читать их стандартный входной поток, как показано ниже:
$ eqn имена_файлов | troff -ms
или
$ tbl имена_файлов | eqn | troff -ms
Неудобно следить за тем из препроцессоров, который действительно должен печатать какой-то отдельный документ. Мы сочли уместным написать программу
doctype
, обеспечивающую вывод соответствующей последовательности команд:
$ doctype ch9.*
cat ch9.1 ch9.2 ch9.3 ch9.4 | pic | tbl | eqn | troff -ms
$ doctype hoc.ms
cat hoc.ms | tbl | eqn | troff -ms
$
Программа
doctype
реализована с помощью инструментов, рассмотренных в гл. 4. В частности, программа awk
отыскивает последовательность команд, используемую препроцессорами, и печатает строку команд, которые нужно вызвать, чтобы отформатировать документ. Она также находит команду .PP
(абзац) для форматирования пакетом запросов ms
.
$ cat doctype
# doctype: synthesize proper command line for troff
echo -n "cat $* | "
egrep -h (EQ|TS|\[|PS|IS|PP)' $* |
sort -u |
awk '
/^\.PP/ { ms++ }
/^\.EQ/ { eqn++ }
/^\.TS/ { tbl++ }
/^\.PS/ { pic++ }
/^\.IS/ { ideal++ }
/^\.\[/ { refer++ }
END {
if (refer > 0) printf "refer | "
if (pic > 0) printf "pic | "
if (ideal > 0) printf "ideal | "
if (tbl > 0) printf "tbl | "
if (eqn > 0) printf "eqn | "
printf "troff "
if (ms > 0) printf "-ms"
printf "\n"
} '
$
(Флаг
– h
заставляет ее подавлять заголовки имен файлов на каждой строке: к сожалению, этот аргумент есть не во всех версиях системы.) При сканировании входного потока собирается информация о том, какие компоненты используются. После просмотра входной поток обрабатывается в требуемой последовательности для печати выходного текста. В формировании документов troff
со стандартными препроцессорами есть специфика, и главная задача состоит в том, чтобы заставить "думать" об этом саму машину.