Чтение онлайн

на главную - закладки

Жанры

UNIX — универсальная среда программирования
Шрифт:

sum from i=0 to infinity x sub i sup 2~->~1 over {2pi}

Существуют знаки операций типа

sqrt
, расширяющие скобки, фигурные скобки и т.д. Программа
eqn
, кроме того, позволяет создавать из объектов столбцы и матрицы. Предусмотрены команды для управления шрифтами и позициями, если те, которые установлены по умолчанию, не подходят.

Часто приходится помещать небольшие математические выражения, такие, как log10(x), в тело текста, а не в отображение. Ключевое слово

eqn
delim
определяет пару символов для выделения подобных выстроенных выражений. Символы, задаваемые в качестве левого и правого ограничителей, обычно одинаковы: часто применяется знак доллара
$
. Но поскольку
hoc
использует
$
для аргументов, в нашем примере мы употребили
@
. Символ
%
тоже удобен как ограничитель, но других символов избегайте: многие из них имеют специальные назначения в различных программах, поэтому вы можете спровоцировать непредсказуемое поведение
eqn
(именно так у нас и получилось с этим разделом).

Итак, после обозначения

.EQ

delim @ @

.EN

можно напечатать встроенное выражение

в виде

@ sum from i == 0 to infinity x sub i @ can be printed.

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

hoc
):

.TS

center,box

css

lfCWn1.

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

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

Гром из трущоб

Мазуров Дмитрий
6. Громовая поступь
Фантастика:
фэнтези
рпг
6.00
рейтинг книги
Гром из трущоб

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия

Афганский полигон

Кулаков Сергей Федорович
Спецназ. Группа Антитеррор
Детективы:
боевики
6.17
рейтинг книги
Афганский полигон

Поводырь

Щепетнов Евгений Владимирович
3. Ботаник
Фантастика:
фэнтези
6.36
рейтинг книги
Поводырь

Лекарь Империи 3

Карелин Сергей Витальевич
3. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи 3

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

Мое сердце

Смолл Бертрис
4. Сага о Скай О`Малли
Любовные романы:
исторические любовные романы
9.13
рейтинг книги
Мое сердце

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6

Третий Генерал: Том IX

Зот Бакалавр
8. Третий Генерал
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Третий Генерал: Том IX

Ботаник

Щепетнов Евгений Владимирович
1. Ботаник
Фантастика:
фэнтези
боевая фантастика
4.60
рейтинг книги
Ботаник

Иной. Том 3. Родственные связи

Amazerak
3. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Иной. Том 3. Родственные связи

Я Гордый часть 5

Машуков Тимур
5. Стальные яйца
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я Гордый часть 5

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4