Установка шрифтов Groff / Хабр

Здравствуй, Хабр!

Русские шрифты в 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

#!/bin/bash
    EXT="ttf" # (расширение)
#    EXT="TTF" 
# В директории FONT должны размещаться файлы textmap и text.enc 
    mkdir ./install-font
# Необходимая для работы afmtodit директория
    mkdir ./install-font/DESC
# Программа на Perl, можно отключить проверку DESC
    mkdir ./site-font
    DEST=`pwd`
	cp tex* .
/install-font # Начинаем цикл for FILE in *.$EXT; do # "Меняем" имя файла (расширение) input=`echo $(basename "$FILE" .$EXT).afm` output=`echo $(basename "$FILE" .$EXT)` # Конвертируем echo "conversion $FILE >> $input" # Опция +R определяет шрифт Regular, см. ниже комментарий sudo ./install-font.sh -n -d -P "$DEST" -F $output -f +R $FILE # Смотрим файлы в директории, это всего лишь удобная фича input=`ls $DEST/site-font/devps/$output*` echo "$input" done exit 0

Как видите, ничего сложного — создается директория 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 для тестирования нового шрифта.

.sp 2
.ps 16
.ft RussianR
.ti +1
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код
.br
настолько умно, насколько можете, то вы по определению недостаточно
.br
сообразительны, чтобы его отлаживать.
.br
Управление сложностью является сущностью компьютерного программирования.
.sp 1
.ps 12
.ce
.ft RussiandB
Брайан Керниган, автор Troff

Затем создадим файл PostScript

$ groff -P-pa4 -P-l -Dutf8 -Tps test. txt > text.ps

Вот и все, и надеюсь, несмотря на почтенный возраст программы Groff, она еще способна вызвать у любителей ручной верстки какие-то чувства =)

Примечания по установке и использованию Grand Alphabet

Примечания по установке и использованию Grand Alphabet

Установка шрифтов

Когда появится сжатая папка zip (grndalphpack.zip), вы должны извлечь два файла TTF (grandalphabet.ttf и grandalphabet2) в папку со шрифтами, которая должна находиться в C:\WINDOWS\Fonts. Но ты еще не закончил. В папке «Шрифты» перейдите в «Файл», «Установить новый шрифт» и найдите файл, который будет находиться в C:\WINDOWS\Fonts, поскольку вы только что поместили его туда (вы можете просто сделать это прямо из zip-папки, но это проще как это объяснить). Выберите оба шрифта и нажмите OK. Теперь они должны быть готовы к использованию в ваших программах.

Использование шрифтов

Эти два шрифта имеют одинаковое расположение клавиш. Вот примечания о том, как использовать их с английским, немецким и русским языками.

Использование с русским языком

Клавиши стандартной русской клавиатуры точно соответствуют клавишам шрифта Grand Alphabet. Так что, если вы знаете, как печатать по-русски на ПК, вы можете просто печатать по-русски, и на экране появятся правильные буквы. (См. внизу страницы примечания о том, как вводить иностранные шрифты в Windows).

Использование с английским языком

Большинство клавиш соответствуют клавишам на английской клавиатуре, но со следующими исключениями:

Примечание:
q, твердый c => k
с, мягкое с => с
ф => ф

Использование с немецким языком

Большинство клавиш соответствуют клавишам стандартной немецкой клавиатуры, но со следующими исключениями:

Примечание:
=> СС
ф => ф

(см. внизу страницы примечания о том, как вводить иностранные шрифты в Windows).

Как вводить иностранные шрифты в Windows

Карта символов: Вы можете использовать это, если вам нужна нечетная иностранная буква или слово, для которых требуется неанглийский символ. Если вам нужно ввести предложения или целый текст, лучше использовать Global IME, который я объясню через минуту. Карта символов находится в меню «Пуск», «Все программы», «Стандартные», «Системные инструменты». Вы выбираете символы, дважды щелкая их или один раз щелкая и нажимая Select. Затем вы можете скопировать и вставить символы из белого текстового поля в другое приложение, например Word. Но большинство более экзотических символов, таких как тайский, не могут быть найдены в карте символов, что является еще одним случаем, в котором вы должны использовать Global IME.

Глобальный IME: Я уверен в этом только в XP и почти то же самое в Windows 2000, я думаю. В правой части панели задач должен быть сплошной синий квадрат с надписью EN внутри него, что означает английский язык. Если один раз щелкнуть левой кнопкой мыши по квадрату, появится список языков, и вы можете выбрать языки, щелкнув их левой кнопкой мыши. Затем на квадрате будет написано что-то еще, например, RU для русского или DE для немецкого. Тогда при наборе клавиши на клавиатуре будут соответствовать клавишам на стандартной, скажем, русской клавиатуре. Так что, если вы наберете как на английском языке, вместо этого вы получите забавные русские буквы. Чтобы узнать, какие клавиши соответствуют каким буквам в выбранном языке, я бы посоветовал взглянуть на экранную клавиатуру, которая находится в меню «Пуск», «Все программы», «Стандартные», «Специальные возможности». ПРИМЕЧАНИЕ. Глобальный IME вернется к английскому языку, когда вы измените фокус курсора, то есть щелкнете по другому окну. Таким образом, вы должны установить фокус курсора, прежде чем выбирать язык, на котором вы хотите печатать.

Если вы не видите нужный язык в списке, который появляется при нажатии на синий квадрат, вы должны один раз щелкнуть правой кнопкой мыши по квадрату и перейти в «Настройки».

Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *