Брайан Керниган - 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.
Интервал:
Закладка: