Шрифты и FreeBSD

Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD .

Пособие

товарные знаки

FreeBSD является зарегистрированным товарным знаком Фонда FreeBSD.

Adobe, Acrobat, Acrobat Reader и PostScript это или зарегистрированные торговые марки или торговые марки Adobe Systems Incorporated в Соединенных Штатах и/или других странах.

Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime и TrueType это торговые марки Apple Computer, Inc., зарегистрированные в Соединенных Штатах и других странах.

Linux является торговым знаком Linus Torvalds.

Microsoft, FrontPage, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media и Windows NT это или зарегистрированные торговые марки или торговые марки Microsoft Corporation в Соединенных Штатах и/или других странах.

Motif, OSF/1 и UNIX это зарегистрированные торговые марки, а IT DialTone и The Open Group это торговые марки Open Group в Соединенных Штатах и других странах.

Многие из обозначений, используемые производителями и продавцами для обозначения своих продуктов, заявляются в качестве товарных знаков. Когда такие обозначения появляются в этом документе, и Проекту FreeBSD известно о товарном знаке, к обозначению добавляется знак “™” или “®”.

Содержание

Аннотация

Этот документ содержит описание различных файлов шрифтов, которые могут использоваться с FreeBSD и драйвером системной консоли, системой X11, программами Ghostscript и Groff. Даются реально работающие примеры по переключению экрана системной консоли в режим 80x60 и использованию файлов шрифтов формата Type 1 с перечисленными выше прикладными программами.


1. Введение

Существует много мест, где можно найти файлы шрифтов, но встает вопрос о возможных способах их использования с FreeBSD. Ответ может быть найден в результате тщательного изучения документации по тем компонентам, которые вы собираетесь использовать. На это тратится очень много времени, и это пособие является попыткой дать готовые ответы для тех, кто заинтересуется такими вопросами.

2. Основные термины

Имеется множество различных форматов файлов шрифтов и соответствующих окончаний имен файлов. Здесь обсуждаются лишь следующие из них:

.pfa , .pfb

Файлы шрифтов PostScript® type 1. Файлы .pfa являются текстовым ( A scii) представлением, а .pfb - двоичным ( B inary).

.afm

Параметры (метрики) соответствующих шрифтов типа type 1.

.pfm

Метрики для принтеров соответствующих шрифтов типа type 1.

.ttf

Файл шрифтов TrueType®

.fot

Неявная ссылка на файл шрифтов TrueType (реальной информации о шрифте здесь не содержится)

.fon , .fnt

Файлы экранных шрифтов с побитным представлением

Файлы .fot используются в Windows® в качестве некой символической ссылки на файл со шрифтом в формате TrueType® ( .ttf ). Файлы шрифтов .fon также используются в Windows®. Мне неизвестно, как можно использовать этот формат шрифтов во FreeBSD.

3. Какие форматы файлов шрифтов я могу использовать?

То, файл шрифтов какого формата будет полезен, зависит от используемого приложения. Сама по себе FreeBSD шрифтов не использует. Прикладные программы и/или драйверы могут использовать файлы шрифтов. Вот краткий справочник по типам файлов шрифтов и приложениям/драйверам:

Драйвер
vt

.hex

syscons

.fnt

Приложение
Ghostscript

.pfa , .pfb , .ttf

X11

.pfa , .pfb

Groff

.pfa , .afm

Povray

.ttf

Окончание .fnt используется достаточно часто. Я полагаю, что когда кто-нибудь собирается создать файл шрифтов для своего приложения, чаще всего выбирается именно это окончание. Поэтому файлы с таким окончанием не все имеют одинаковый формат; в частности, формат файлов .fnt , используемых драйвером syscons во FreeBSD, может отличаться от формата файлов .fnt , встречающихся в MS-DOS®/Windows®. Я даже не пытался использовать другие файлы .fnt , кроме тех, что поставляются с FreeBSD.

4. Настройка виртуальной консоли на режим работы 80x60

Во-первых, должен быть загружен шрифт размера 8x8. Для этого файл /etc/rc.conf должен содержать строчку (измените в ней имя файла со шрифтом на соответствующий вашей локализации):

font8x8="iso-8x8"		# font 8x8 from /usr/shared/syscons/fonts/* (or NO).

Команда для переключения режимов называется vidcontrol(1) :

% vidcontrol VGA_80x60

Различные программы, ориентированные на работу с экраном, такие, как vi(1) , должны уметь определять текущие размеры экрана. Так как это делается через вызовы ioctl к драйверу консоли (такому, как syscons(4) ), то размеры будут определяться правильно.

Чтобы это проходило более гладко, можно включить эти команды в скрипты начальной загрузки, чтобы они выполнялись при запуске системы. Чтобы это сделать, добавьте такую строчку в /etc/rc.conf

        allscreens_flags="VGA_80x60"	# Set this vidcontrol mode for all virtual screens

Справочная информация: rc.conf(5) , vidcontrol(1) .

5. Использование шрифтов type 1 с системой X11

X11 может использовать файлы шрифтов в формате .pfa или .pfb . Шрифты для X11 располагаются в различных подкаталогах в /usr/X11R6/lib/X11/fonts . На каждый файл со шрифтом имеется ссылка по его X11-имени в файле fonts.dir в каждом таком каталоге.

Существует каталог по имени Type1 . Самым простым способом добавить новый шрифт заключается в помещении его в этот каталог. Но лучше хранить все новые шрифты в отдельном каталоге и использовать символические ссылки для добавляемых шрифтов. Это позволяет легко управлять отдельными добавляемыми шрифтами, не путая их с изначально поставляемыми. Например:

Создаем каталог для файлов шрифтов
% mkdir -p /usr/local/shared/fonts/type1
% cd /usr/local/shared/fonts/type1

Помещаем сюда файлы .pfa, .pfb и .afm

Кому-то может потребоваться хранить здесь также

сопроводительные файлы и документацию к шрифтам
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .

Обновление индексного файла со ссылками на файлы шрифтов
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX

Теперь, чтобы использовать новый шрифт с X11, нужно дать доступ к файлу шрифтов и обновить файлы и именами шрифтов. Имена шрифтов в X11 выглядят следующим образом:

-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
     |        |      |    |   |     |  | | | | | |    \    \
     |        |      |    |   |     \  \ \ \ \ \ \     +----+- набор символов
     |        |      |    |   \      \  \ \ \ \ \ +- средняя ширина
     |        |      |    |    \      \  \ \ \ \ +- spacing
     |        |      |    \	\      \  \ \ \ +- разрешение по вертикали
     |        |      |     \	 \	\  \ \ +- разрешение по горизонтали
     |        |      |      \	  \	 \  \ +- пунктов
     |        |      |       \     \	  \  +- пиксел
     |        |      |        \     \	   \
  foundry  family  weight   slant  width  additional style

Для каждого нового файла шрифтов необходимо создать новое имя. Если у вас есть какая-либо информация из сопроводительной документации к шрифту, то она может служить основой для создания имени. Если информации нет, то можно получить некоторую информацию от использования программы strings(1) над файлом шрифта. Например:

% strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
%%CreationDate: 1/15/91 5:16:03 PM
%%VMusage: 1024 45747
% Generated by Fontographer 3.1
% Showboat
 1991 by David Rakowski.  Alle Rechte Vorbehalten.
FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup
/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse
{save true}{false}ifelse}{false}ifelse
12 dict begin
/FontInfo 9 dict dup begin
 /version (001.001) readonly def
 /FullName (Showboat) readonly def
 /FamilyName (Showboat) readonly def
 /Weight (Medium) readonly def
 /ItalicAngle 0 def
 /isFixedPitch false def
 /UnderlinePosition -106 def
 /UnderlineThickness 16 def
 /Notice (Showboat
 1991 by David Rakowski.  Alle Rechte Vorbehalten.) readonly def
end readonly def
/FontName /Showboat def
--stdin--

Пользуясь этой информацией, можно составить возможное имя:

-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1

Компонентами нашего имени являются:

Foundry

Давайте называть все новые шрифты type1 .

Family

Имя шрифта.

Weight

Normal, bold, medium, semibold, и так далее. Из результата работы команды strings(1) похоже, что этот шрифт имеет ширину medium .

Slant

r oman, i talic, o blique, и так далее. Так как ItalicAngle равен нулю, то будет использоваться roman .

Width

Normal, wide, condensed, extended, и так далее. Пока это не будет проверено, предполагаем normal .

Дополнительный стиль

Обычно опускается, но он будет указывать, что в шрифте есть декоративные заглавные буквы.

Spacing

proportional или monospaced. Используется proportional , потому что isFixedPitch равен false.

Все эти имена произвольны, но нужно стараться следовать существующим соглашениям. В программе для X11 на шрифт ссылаются по имени с применением шаблонов, так что в выбираемом имени это должно учитываться. Можно начать с простого использования

...-normal-r-normal-...-p-...

в качестве имени, а затем использовать xfontsel(1) для его проверки и изменения имени на основе того, как выглядит шрифт.

Итак, завершая наш пример:

Делаем шрифт доступным для X11
% cd /usr/X11R6/lib/X11/fonts/Type1
% ln -s /usr/local/shared/fonts/type1/showboat.pfb .

Редактируем файлы fonts.dir and fonts.scale, добавляя строку,
описывающую шрифт и увеличивая количество шрифтов в первой строке.
% ex fonts.dir
:1p
25
:1c
26
.
:$a
showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq

fonts.scale идентичен
fonts.dir...
% cp fonts.dir fonts.scale

Указываем X11, что произошли изменения
% xset fp rehash

Проверяем новый шрифт
% xfontsel -pattern -type1-*

Справочная информация: xfontsel(1) , xset(1) , The X Windows System in a Nutshell, O’Reilly & Associates .

6. Использование шрифтов type 1 с пакетом Ghostscript

Ghostscript ссылается на шрифт через свой файл Fontmap . Он должен быть подправлен так же, как и файл fonts.dir в случае X11. Ghostscript может использовать файлы шрифтов в форматах .pfa или .pfb . Взяв шрифт из предыдущего примера, его можно использовать с Ghostscript вот так:

Помещаем файл со шрифтом в каталог со шрифтами Ghostscript
% cd /usr/local/shared/ghostscript/fonts
% ln -s /usr/local/shared/fonts/type1/showboat.pfb .

Редактируем Fontmap, чтобы Ghostscript знал о шрифте
% cd /usr/local/shared/ghostscript/4.01
% ex Fontmap
:$a
/Showboat        (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq

Используем Ghostscript для проверки шрифта
% gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA.  All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading Times-Roman font from /usr/local/shared/ghostscript/fonts/tir_____.pfb...
 /1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
 1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
GS>quit

Справочная информация: fonts.txt из дистрибутива Ghostscript 4.01

7. Использование шрифтов в формате type 1 с программой Groff

Теперь, когда новый шрифт может быть использован как с X11, так и в Ghostscript, как использовать его с программой Groff? Во-первых, так как мы имеем дело со PostScript®-шрифтами формата type 1, то подходящим устройством Groff является ps . Для каждого шрифта, который может использоваться программой Groff, должен быть создан файл шрифта. Имя шрифта для Groff является просто именем файла из каталога /usr/shared/groff_font/devps . В нашем примере файлом шрифта может быть /usr/shared/groff_font/devps/SHOWBOAT . Файл должен быть создан с помощью утилит, поставляемых с программой Groff.

Первой утилитой является afmtodit . Обычно она не устанавливается, так что она должна быть получена из дистрибутива с исходными текстами. Я обнаружил, что нужно изменить первую строку файла, что я делал так:

% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
:1c
#!/usr/bin/perl -P-
.
:wq

Эта утилита создаст файл шрифтов для Groff из файла метрик (с окончанием .afm ). Продолжая с нашим примером:

Многие файлы .afm в формате Mac
... строки разделены символом ^M.  Нам нужно преобразовать их в
разделитель ^J в стиле UNIX(R)
% cd /tmp
% cat /usr/local/shared/fonts/type1/showboat.afm |
	tr '\015' '\012' >showboat.afm

Теперь создаем файл шрифтов groff
% cd /usr/shared/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT

Теперь к шрифту можно обращаться по имени SHOWBOAT.

Если в системе для управления принтерами используется программа Ghostscript, то больше ничего делать не нужно. Однако, если используются настоящие PostScript®-принтеры, то для использования шрифта его нужно загрузить в принтер (если только в принтере шрифт showboat не встроен или не имеется на диске со шрифтами). Последний шаг заключается в создании загружаемого шрифта. Утилита pfbtops используется для создания шрифта в формате .pfa , а файл для загрузки изменяется для указания нового шрифта. Файл для загрузки должен ссылаться на внутреннее имя шрифта. Оно может быть легко определено из файла шрифтов groff, как это показывается здесь:

Создание файла шрифта .pfa
% pfbtops /usr/local/shared/fonts/type1/showboat.pfb >showboat.pfa

Конечно, если файл .pfa уже имеется, для его использования создаем символическую ссылку на него.

Получение внутреннего имени шрифта
% fgrep internalname SHOWBOAT
internalname Showboat
Указываем утилите groff, что шрифт должен быть загружен
% ex download
:$a
Showboat      showboat.pfa
.
:wq

Для тестирования шрифта:

% cd /tmp
% cat >example.t <<EOF
.sp 5
.ps 16
This is an example of the Showboat font:
.br
.ps 48
.vs (\n(.s+2)p
.sp
.ft SHOWBOAT
ABCDEFGHI
.br
JKLMNOPQR
.br
STUVWXYZ
.sp
.ps 16
.vs (\n(.s+2)p
.fp 5 SHOWBOAT
.ft R
To use it for the first letter of a paragraph, it will look like:
.sp 50p
\s(48\f5H\s0\fRere is the first sentence of a paragraph that uses the
showboat font as its first letter.
Additional vertical space must be used to allow room for the larger
letter.
EOF
% groff -Tps example.t >example.ps

Для использования с ghostscript/ghostview
% ghostview example.ps

Для его печати
% lpr -Ppostscript example.ps

Справочная информация: /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man , groff_font(5) , groff_char(7) , pfbtops(1) .

8. Преобразование файлов шрифтов TrueType в формат groff/PostScript для использования с groff

Потенциально это требует некоторых усилий, просто потому что зависит некоторых утилит, которые в качестве части системы не устанавливаются. Это:

ttf2pf

Утилита для преобразования TrueType в PostScript. Она позволяет преобразовать шрифт TrueType в метрику шрифта в текстовом формате (файл .afm ).

Доступна по адресу http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/ . Замечание: Эти файлы являются PostScript-программами и должны быть скачаны на диск щелчком на ссылке при нажатой клавише Shift . В противном случае для их просмотра ваш браузер может попытаться запустить программу ghostview.

Интерес представляют следующие файлы:

  • GS_TTF.PS

  • PF2AFM.PS

  • ttf2pf.ps

    Смесь верхнего/нижнего регистров присутствует из-за того, что эти файлы предназначены и для DOS. ttf2pf.ps использует остальные с именами в верхнем регистре, так что при переименовании это нужно учитывать. (На самом деле GS_TTF.PS и PFS2AFM.PS предположительно являются частью дистрибутива Ghostscript, но их легко использовать как отдельные утилиты. В поставку FreeBSD они не включены.) Вы можете также установить их в каталог /usr/local/shared/groff_font/devps (?).

afmtodit

Создает файлы шрифтов для использования с программой Groff из текстовых файлов с метриками шрифта. Она обычно располагается в каталоге /usr/src/contrib/groff/afmtodit и для ее использования требуется проделать некоторую работу.

Если вы избегаете работать в дереве /usr/src , просто скопируйте содержимое вышеупомянутого каталога во временный рабочий каталог.

Во рабочем каталоге вам нужно построить утилиту. Просто введите такую команду:

# make -f Makefile.sub afmtodit

Вам может также потребоваться скопировать /usr/contrib/groff/devps/generate/textmap в /usr/shared/groff_font/devps/generate , если его не существует.

Как только эти утилиты готовы, вы можете начать:

  1. Создайте файл .afm по такой команде:

    % gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name

    Здесь TTF_name обозначает ваш файл со шрифтом TrueType, PS_font_name является именем для файла .pfa , AFM_name задает имя для файла .afm . Если вы не укажете имена выходных файлов, для форматов .pfa или .afm , то по умолчанию будут использоваться имена, получаемые из имени файла со шрифтом TrueType.

    При этом также будет создан файл .pfa , текстовый файл с метриками PostScript-шрифта (( .pfb для двоичного представления). Это не не обязательно, но может быть (я думаю) полезным для сервера шрифтов.

    Например, для преобразования шрифта 30f9 Barcode с именами файлов по умолчанию, воспользуйтесь следующей командой:

    % gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
    Aladdin Ghostscript 5.10 (1997-11-23)
    Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Converting 3of9.ttf to 3of9.pfa and 3of9.afm.

    Если вы хотите, чтобы преобразованные шрифты сохранялись в файлы A.pfa and B.afm , то выдайте такую команду:

    % gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
    Aladdin Ghostscript 5.10 (1997-11-23)
    Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Converting 3of9.ttf to A.pfa and B.afm.
  2. Создайте PostScript-файл для Groff:

    Смените текущий каталог на /usr/shared/groff_font/devps для облегчения запуска упоминаемых далее программ. Для этого вам может понадобиться иметь привилегии администратора системы. (Или, если вы избегаете здесь работать, обязательно посмотрите файлы DESC , text.enc и generate/textmap в этом каталоге.)

    % afmtodit -d DESC -e text.enc file.afm \
    	    generate/textmap PS_font_name

    Здесь file.afm является файлом AFM_name , созданным программой ttf2pf.ps выше, а PS_font_name является именем шрифта, используемым в той команде, так же, как и имя, которое будет использовать утилита groff(1) для ссылки на этот шрифт. Например, полагая, что вы использовали первую команду tiff2pf.ps выше, то шрифт 3of9 Barcode может быть создан при помощи такой команды:

    % afmtodit -d DESC -e text.enc 3of9.afm \
                     generate/textmap 3of9

    Проверьте, что полученный файл PS_font_name (к примеру, 3of9 из примера выше) расположен в каталоге /usr/shared/groff_font/devps , скопировав или перенеся его сюда.

    Заметьте, что если ttf2pf.ps назначает имя шрифта, используя один из найденных в файле шрифта TrueType, а вы хотите использовать другое имя, то вы должны отредактировать файл .afm до запуска команды afmtodit . Это имя к тому же должно совпадать с тем, что используется в файле Fontmap, если вы собираетесь перенаправлять вывод groff(1) утилите gs(1) .

9. Можно ли использовать шрифты в формате TrueType с другими программами?

Формат TrueType используется в Windows, Windows 95 и на компьютерах Macintosh. Он достаточно популярен и в этом формате имеется большое количество шрифтов.

К сожалению, я знаю лишь несколько программ, которые могут использовать этот формат: на ум приходят Ghostscript и Povray. Его поддержка в программе Ghostscript, согласно документации, находится в зачаточном состоянии и получаемый результат хуже того, что получается при использовании шрифтов type 1. Программа Povray версии 3 также может использовать шрифты TrueType, но я очень сомневаюсь, что много кто создает документы как последовательность анимированных страниц :-).

Такая весьма печальная ситуация может вскоре измениться. В рамках проекта FreeType Project в настоящее время разрабатывается полезный набор инструментов для работы с FreeType:

  • Сервер шрифтов xfsft для X11 может работать и со шрифтами TrueType, и с обычными шрифтами. Хотя в настоящее время он еще находится в стадии отладки, но его уже можно использовать. Посмотрите страницу Juliusz Chroboczek , чтобы получить более полную информацию. Указания по переносу на FreeBSD можно найти на странице Стивена Монтгомери (Stephen Montgomery), посвященной программному обеспечению.

  • xfstt является еще одним сервером шрифтов для X11, доступный по адресу ftp://sunsite.unc.edu/pub/Linux/X11/fonts .

  • Программа, которая называется ttf2bdf , может генерировать BDF-файлы, которые можно использовать в системе X Window, из файлов шрифтов TrueType. Выполнимые файлы Linux могут находиться по адресу ftp://crl.nmsu.edu/CLR/multiling/General .

  • и другие …​

10. Где можно найти дополнительные шрифты?

Много шрифтов можно найти в сети Интернет. Они либо абсолютно бесплатны, либо условно-бесплатны. В добавок, множество шрифтов находится в категории x11-fonts/ Коллекции Портов.

11. Дополнительные вопросы

  • Для чего предназначены файлы .pfm ?

  • Можно ли получить файл .afm из файла .pfa или .pfb ?

  • Как получить файлы преобразования символов Groff для PostScript-шрифтов с нестандартными названиями символов?

  • Можно ли настроить xditview и устройства devX?? на работу всех новых шрифтов?

  • Хорошо бы иметь примеры использования шрифтов TrueType с программами Povray и Ghostscript.


Изменено : 3 ноября 2021 г. by Sergio Carlavilla Delgado