Брайан Керниган - UNIX — универсальная среда программирования
- Название:UNIX — универсальная среда программирования
- Автор:
- Жанр:
- Издательство:Финансы и статистика
- Год:1992
- Город:Москва
- ISBN:5-289-00253-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Брайан Керниган - UNIX — универсальная среда программирования краткое содержание
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.
Для программистов-пользователей операционной системы UNIX.
UNIX — универсальная среда программирования - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Текст таблицы следует за информацией для форматирования. Символы табуляции разделяют столбцы и некоторые команды troff, например . sp
, которые уместны внутри таблиц. (Отметим пару вхождений \&
: незащищенный передний символ -
и знак =
в столбцах указывают tbl
на необходимость располагать строки таблицы в этой точке.)
Программа tbl
строит более широкий набор таблиц, чем показано в примере: текст может помещаться в рамки, могут вертикально выравниваться заголовки столбцов и т.д. Самый легкий способ использовать tbl
для создания сложных таблиц обратиться к справочному руководству по UNIX (том 2A) и применить перечисленные в нем команды.
Второй препроцессор eqn
превращает язык, описывающий математические выражения, в команды troff
, чтобы эти выражения печатать. Препроцессор автоматически обрабатывает смены шрифта и формата и, кроме того, предоставляет имена для стандартных математических символов. Входной текст для eqn
обычно находится между строками .EQ
и .EN
, аналогично командам tbl .TS
и .ТЕ
. Например,
. EQ
x sub i
.EN
выдаёт x i . Если используется пакет ms
, уравнение печатается как "отображение", а возможный аргумент .EQ
определяет номер уравнения. Например, формула интеграла Коши

записывается как
.EQ (9.1)
f( zeta ) ~=~ 1 over {2 pi i} int from С
f(z) over {z - zeta} dz
.EN
В основу языка eqn
и положен способ чтения вслух математических формул. Единственное различие между "разговорной" математикой и входным текстом eqn
состоит в том, что скобки { }
отменяют заданные по умолчанию правила предшествования языка, однако обычные скобки специального смысла не имеют. Пробелы тем не менее важны. Заметим, что первое вхождение zeta
в примере, приведенном выше, окружено пробелами: ключевые слова, такие, как zeta
и over
, распознаются только тогда, когда они окружены пробелами или скобками, но ни те, ни другие в выходной текст не попадают. Чтобы обеспечить пробелы в выходном потоке, используйте символ ~
, как показано в примере ( ~=~
). Для получения скобок используйте " {
" и " }
".
Существует несколько классов ключевых слов eqn
. Греческие буквы записываются прописными и строчными: lambda
и LAMBDA
(λ и Λ). Другие математические символы имеют имена, такие как sum
, int
, infty
, grad
: Σ, ∫, ∞, ∇. Есть знаки позиции, например sub
, sup
, from
, to
, and
, over
:
Эта формула выводится так:
sum from i=0 to infinity x sub i sup 2~→~1 over {2pi}
Существуют знаки операций типа sqrt
, расширяющие скобки, фигурные скобки и т.д. Программа eqn
, кроме того, позволяет создавать из объектов столбцы и матрицы. Предусмотрены команды для управления шрифтами и позициями, если те, которые установлены по умолчанию, не подходят.
Часто приходится помещать небольшие математические выражения, такие, как log 10(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
) столбцах. Результат показан ниже.
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
.
Интервал:
Закладка: