Вход/Регистрация
UNIX — универсальная среда программирования
вернуться

Керниган Брайан Уилсон

Шрифт:

\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
со стандартными препроцессорами есть специфика, и главная задача состоит в том, чтобы заставить "думать" об этом саму машину.

  • Читать дальше
  • 1
  • ...
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: