Здравствуй, Хабр!   Русские шрифты в Groff, пошаговая инструкция по установке. Groff - небольшой и очень-очень  винтажный программный пакет, система набора текста, в каком-то смысле прадедушка TeX, LaTeX. Но если TeX создан Дональдом Кнутом, то Брайан Керниган приложил немало усилий для развития концепций  Troff. Итак, две легенды и две дороги. Конечно, сегодня программы troff (GNU версия называется по традиции groff) применяют в основном для форматирования man-страниц, но возможности процессора намного шире.  ...Осенью прошлого года мне пришлось форматировать текстовой файл. Правда, банальная задача? Но дьявол живет в деталях: у меня на руках было 60000 страниц текста из базы данных, где смешались русские, английские и немецкие слова, сцементированные и притертые, как камни пирамиды Хеопса.  Мой «текстовой процессор» (OO) намертво завис. Я растерялся, расстроился, попытался найти простенькое решение для командной строки.   В самом деле, как работали во времена Ноя и мониторов EGA  с текстом? Emacs, vim, jed? Это все насыщенные функциями, как мед сахаром, многорежимные редакторы. Но насущная задача казалась очевидной: создать текстовой файл со  строкой в 70 знаков, с возможностью центрирования и необязательного переноса слов. Помнится, в «эпоху DOS» был популярный «процессор» Лексикон, да? Что-то такое я захотел установить на свой компьютер. Только чтобы буквы в utf-8  не резались на биты.   Впрочем, чудо случилось: во время поисков я нашел русскоязычную документацию программы nroff, написанную… как вы думаете, кто переводил мануалы?  Ну да,  производственно-внедренческий кооператив "ИНТЕРФЕЙС" озаботился русскоязычной справкой аж в конце 80 годов, еще во времена СССР.  Мои поиски закончились и я за несколько минут подготовил  файл с форматированием. Следующая команда прекрасно справилась с текстом utf-8, конечно, без переноса слов.  $ groff -Dutf8 -Tutf8 utf-8.txt > russian.txt   Получилось очень красиво. Мне тут же захотелось продолжить знакомство с легендарной программой и я решил перевести на русский язык документацию Groff, чтобы поглубже изучить, понять всю прелесть старой программы. В процессе перевода у меня также возникло необъяснимое  желание создать документ PostScript  на русском языке со своими шрифтами. И вот здесь начались сложности: процесс установки «своих» шрифтов в Groff не такой уж простой.(Проблема в том, что некоторые программы не ставятся «по умолчанию» в дистрибутив Debian, которым я пользуюсь, поэтому их придется устанавливать самому.)  Ниже я попытаюсь максимально подробно описать компиляцию шрифтов ttf для работы с программой Groff. Шрифты в Groff «настраиваются» несколько необычно, хотя существует небольшой и удобный скрипт install-font.sh, созданный Питером Шаффтером, автором макроса mom Groff; скрипт я быстро нашел в Сети и  переписал  «под себя». В частности, мне не понравилось, что исходный скрипт пытается положить шрифты в какую-то далекую директорию, хотя намного проще, чтобы скрипт всего-навсего компилировал файлы «по месту жительства». Также я перевел сообщение Т. Курта Бонда, но применительно к русскому языку и с необходимыми правками. Ниже инструкция Бонда с моими замечаниями. А в этом архиве лежат все необходимые утилиты, даже программа afmtodit, она написана на Perl.  Исходный скрипт Питера лежит по адресу. В настоящее время install-font.sh не входит в пакет groff, как пишет Бонд, поэтому могут быть небольшие трудности, если возникает необходимость установить  шрифты в форматах OpenType или TrueType.  И для удобной работы  потребуется программа Fontforge — бесплатный редактор шрифтов с открытым исходным кодом. Этот редактор может  выполнять сценарии преобразований между форматами шрифтов в командной строке. Примечание. Можно также создать шрифтовые метрики AFM, например, с помощью входящей в пакет ghostscript программы, или  программы ttf2afm из пакета tetex. Скрипт  install-font.sh использует Fontforge для преобразований между шрифтами OpenType и TrueType в PostScript Type42 (.t42) и Type1 (.pfa). Затем с помощью утилиты  afmtodit (по умолчанию не поставляется с пакетом Groff, но доступна в исходниках) создаются необходимые  для Groff файлы. Установите  Fontforge. $ sudo apt install fontforge   Скачайте  afmtodit (или архив). Создайте директорию, например, FONT. Положите исполняемые файлы  install-font.sh и  afmtodit, необходимые шрифты  в эту директорию. Для автоматизации я написал небольшой скрипт, который в автоматическом режиме компилирует шрифты. Скрипт также  доступен в архиве как auto-convert.sh Как видите, ничего сложного — создается директория   install-font с обязательной поддиректорией DESC и директория site-font. В последнем каталоге будут «появляться» шрифты, необходимые для работы с Groff. Обратите внимание! В директорию  install-font следует положить два файла: textmap и text.enc (они есть в архиве). Эти файлы нужны для работы программы   afmtodit и они входят в оригинальный пакет Groff. Также скрипт install-font.sh потребует определенных прав для исполнения. Наверное, от этого можно  избавиться, отключив в скрипте две-три команды, но я не стал изменять скрипт. После запуска скрипта auto-convert.sh в директории  site-font появятся две субдиректории - devps и devpdf. Последняя директория пока что не нужна, ведь мы создаем шрифты для работы с устройством PS (PostScript).   Groff называет директории шрифтов как «dev» (устройство) и «формат», поэтому все необходимые файлы перемещаются в site-font/devps, причем каталогу назначаются привилегии и права. Также из-за какой-то путаницы afmtodit в  созданных «шрифтах» будет ошибка — неправильная строка «spacewidht 0», ее можно закоментировать «# spacewidht 0». Или опять-таки переписать старенькую программу  afmtodit. Например, вы собираетесь использовать  шрифт Russian.ttf,  программа Groff предполагает, что будут доступны варианты  Regular, Italic, Bold и Bold Italic (R, I, B и BI, если говорить в терминологии Groff).   Значит, вам потребуются соответствующие шрифты:  Russian-Regular.ttf, Russian-Italic.ttf, Russian-Bold.ttf и Russian-BoldItalic.ttf.  Обычно на сайтах со шрифтами предлагаются подборки семейств, так что вы всегда сможете скачать  необходимые шрифты.   Шрифты следует скопировать в каталог FONT (который мы создали ранее), разумеется, в этом же каталоге должны лежать все исполняемые файлы. Скрипт  auto-convert.sh запускает для каждого ttf шрифта следующую команду: $ sudo install-font.sh -n -P " $DEST " -d -F Font -f +R Font-Regular.ttf Параметр -f принимает аргумент, указывающий используемый стиль шрифта: +R, +I, +B или +BI.   В данном случае установлена опция +R, создается шрифт  Regular. Если вы хотите создать шрифты Italic, Bold и Bold Italic, опция приобретает иной вид: +I, +B и +BI соответственно. Параметр -F принимает аргумент, указывающий используемое имя семейства шрифтов. Это имя для запроса .fam или -f  groff, чтобы сообщить процессору, какое семейство шрифтов будет использоваться.   Для примера, такая команда создаст  RussianI (курсив) шрифт $ sudo install-font.sh -n -P " $DEST " -d -F Font -f +I  Russian-Italic.ttf Очевидно, можно «встроить» алгоритм, автоматически «называющий» шрифт так, как   необходимо процессору Groff. Если компиляция была успешной, в директории ./site-font/devps/ будут созданы шрифты, их следует скопировать в  /usr/share/groff/site-font/devps/ (для дистрибутива Debian). Теперь можно написать файл test.txt для тестирования нового шрифта.  Затем создадим файл  PostScript $  groff -P-pa4 -P-l -Dutf8 -Tps test.txt > text.ps Вот и все, и надеюсь,  несмотря на почтенный возраст программы Groff, она еще способна вызвать у любителей ручной верстки какие-то чувства =)