afm2pl - справочное руководство, опции, примеры команд


ИМЯ

afm2pl - конвертировать метрики шрифта AFM в метрики шрифта TeX pl

СИНТАКСИС

afm2pl [-p encoding_file] [-o] [-e extension_factor] [-s slant_factor] [-f font_dimensions] [-k] [-m letter_spacing] [-l ligkern_spec] [-L ligkern_spec] [-n] input_file[.afm] [output_file[.pl]]

afm2pl [--help] | [--version]

ОПИСАНИЕ

afm2pl преобразует файл afm (Adobe Font Metric) в файл pl (список свойств), который, в свою очередь, может быть преобразован в файл tfm (TeX Font Metric). Обычно он сохраняет керны и лигатуры, но также предлагает дополнительный контроль над ними.

afm2pl предназначен для частичной замены afm2tfm, на котором он основан. С afm2tfm сохранение кернов и лигатур возможно только окольными путями, а управление ими жестко зашито.

Для текстовых шрифтов кодировка Y&Y texnansi является хорошей кодировкой для использования с afm2pl. Его набор символов включает в себя все символы с диакритическими знаками, которые могут понадобиться для западных языков, а также множество типографских символов без необходимости использования виртуальных шрифтов или отдельного текстового сопутствующего шрифта.

Полная поддержка LaTeX для этой кодировки доступна в виде пакета texnansi, который уже является частью TeX Live и teTeX. Эти дистрибутивы также содержат файл кодировки texnansi.enc.

Дистрибутив содержит прописные и строчные версии texnansi, а именно. texnanuc и texnanlc, чтобы обеспечить прописные и строчные буквы на основе шрифтов, а не на основе макросов, а также знакомую старую кодировку ot1 плюс некоторые варианты формата PostScript .enc (я включил их, потому что они отсутствуют в teTeX/TeX Live). Тем не менее, проверьте свои файлы карт, если у вас есть старые шрифты, сгенерированные afm2pl, использующие их.

Возвращаемое значение: 0, если нет ошибок; отрицательное число, указывающее количество отсутствующих глифов, если преобразование было успешным, но глифы отсутствуют, и 1 в случае ошибки.

ПАРАМЕТРЫ

-p кодирующий_файл

По умолчанию используется кодировка, указанная в файле afm, которая лучше соответствует кодировке в файле шрифта (pfa или pfb). Если существует файл afm2pl-name.enc, afm2pl будет использовать этот файл вместо name.enc, если не указана опция -n. Сгенерированная запись файла карты (см. ниже) указывает pdftex или драйверу dvi перекодировать шрифт на лету. Перекодирование «на лету» не требует виртуальных шрифтов.

Используйте восьмеричное число для всех кодов символов в файле pl.

-e extend_factor

Расширяйте или сужайте символы с помощью extend_factor. По умолчанию 1.0 (естественная ширина). Не рекомендуется[1].

-s slant_factor

Наклонные (наклонные) символы по slant_factor. Тоже не рекомендуется.

-f font_dimensions

Значением является либо ключевое слово afm2tfm, либо разделенный запятыми список до пяти целых чисел. Параметры перечислены ниже с их значениями по умолчанию и их значением, когда указано ключевое слово afm2tfm. «Пробел» означает ширину пробела в целевом шрифте, за исключением, конечно, последней строки. Имейте в виду, что размер дизайна составляет 1000 и что все числа должны быть неотрицательными целыми числами.

Font dimension Default value Afm2tfm value
stretch space div 2 300 × extend_factor
shrink space div 3 100 × extend_factor
extra space space div 3 missing
quad 2 × width of ‘0’ 1000 × extend_factor
space (space source font) × extend_factor (space source font) × extend_factor

Для шрифтов с фиксированным шагом применяются другие значения:

Font dimension Default value Afm2tfm value
stretch 0 0
shrink 0 0
extra space space missing
quad 2 × character width 1000 × extend_factor
space character width character width

Укажите только растяжение не по умолчанию и сжатие, например. 150,70 и просто дополнительное пространство не по умолчанию с ,,10.

Сохраняйте оригинальные лигатуры. Этот параметр действует только в сочетании с положительным межбуквенным интервалом; см. раздел о межбуквенном интервале и дополнительной информации о ligkern.

-m буквенный интервал

Расстояние между буквами: letter_spacing/1000 em (целое число). Это полезно для того, чтобы набор текста с заглавными буквами выглядел лучше. Попробуйте значение, например. 50 или 100. Но подробности см. в разделе о межбуквенном интервале и дополнительной информации о ликерне. Однако лучшая альтернатива — позволить pdftex выполнять межбуквенный интервал. Пакет microtype предоставляет пользователям LaTeX доступ к этой функции.

-l ligkern_spec, -L ligkern_spec

Подробнее см. в разделе о дополнительной информации о ликерне.

Без префикса. Для файлов .enc- и .lig программа обычно сначала добавляет к имени префикс `afm2pl-'. Только если имя файла с префиксом не найдено, оно будет искать исходное имя файла. Этот параметр предотвращает поиск имени файла с префиксом.

-V

Подробный. Если эта функция включена, она сообщает количество отсутствующих глифов на стандартный вывод и их имена на стандартный вывод.

--помощь

Показать короткое сообщение об использовании.

--версия

Показать номер версии afm2pl.

ЗАПИСИ МАПФАЙЛА

afm2pl записывает запись mapfile в файл с тем же базовым именем, что и у выходного файла pl, но с расширением .map. Его можно использовать для файла карты dvips и для файла карты pdftex. Предполагается, что файл pfb имеет то же базовое имя, что и файл afm, и его необходимо загрузить. Возможно, вам придется отредактировать эту запись вручную.

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

Проверьте файлы карты! Чтобы снизить вероятность конфликтов имен, файлы .enc-, являющиеся частью afm2pl (ot1, ot1csc, ot1ital, ot1tt, texnanlc и texnanuc), теперь имеют префикс afm2pl-. Файлы .enc упоминаются в файлах карты. Если у вас есть старые файлы .tfm, сгенерированные afm2pl, использующие их, вам следует обновить их фрагменты файла карты и повторно запустить updmap или updmap-sys. Или вы можете скопировать соответствующие файлы enc в свое личное или локальное дерево texmf под их предыдущими именами без префикса.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ЛИГКЕРНЕ

Большинству пользователей рекомендуется оставить этот беспорядок в покое и принять поведение по умолчанию.

Лигатуры и керны, присутствующие в файле afm, могут быть изменены различными способами. По умолчанию файл кодировки сканируется на наличие дополнительных спецификаций ligkern, формат которых будет описан ниже. Если в файле кодировки нет спецификаций ligkern, то дополнительные спецификации ligkern будут считываться из файла [afm2pl-]default.lig. Значение 0 для ligkern_spec означает, что лигатуры и керны из файла afm не будут изменены, а значение 1 указывает поведение по умолчанию. Можно также указать список файлов, разделенных запятыми, с дополнительными спецификациями ligkerns.

Если afm2pl скомпилирован с библиотекой kpathsea, то эти файлы будут искаться в $TEXMF/fonts/lig.

Обратите внимание, что лигатуры и керны являются подсказками для приложения для набора текста; нет необходимости загружать эту информацию на принтер или делать ее доступной для драйвера DVI.

Парсер ligkern info унаследован от afm2tfm практически без изменений. Спецификация ligkern может иметь одну из следующих форм:

glyph_name1 glyph_name2 lig_op glyph_name3 ;

Это указывает на лигатуру. Возможные значения для lig_op: =:, |=:, |=:>, =:|, =:|>, |=:|, |=:|> и |=:|>> . Они соответствуют LIG, /LIG, /LIG>, LIG/, LIG/>, /LIG/, /LIG/>, /LIG/>> в синтаксисе .pl; см. документацию pltotf и файлы .lig в дистрибутиве.

glyph_name1 <> glyph_name2 ;

Керн glyph_name1 как glyph_name2.

glyph_name1 {} glyph_name2 ;

Удалите керн между glyph_name1 и glyph_name2. Значение * для любого имени глифа интерпретируется как подстановочный знак.

|| = glyph ;

Установите (правый) граничный символ на глиф. глиф может быть либо именем глифа, либо слотом в векторе кодирования. Выбор глифа, который не встречается в выходной кодировке, эквивалентен тому, что вообще не указан граничный символ. Можно выбрать закодированное имя глифа, которое не встречается в afm. Фактически это то, что делает default.lig: ||=цвм ;.

Вы можете скопировать керны незакодированного символа в файл borderchar. Ниже пробел — это незакодированный символ:

|| <> space ;

Эта спецификация ligkern должна стоять перед той, которая удаляет пробельные kerns.

Спецификация ligkern должна содержаться в одной строке. В одной строке может быть несколько спецификаций ligkern, разделенных пробелами. Обратите внимание, что ; (пробел с точкой с запятой) считается частью спецификации ligkern. См. lig-файлы, включенные в этот дистрибутив. Пример:

one {} * ; * {} one ; two {} * ; * {} two ;

Строки со спецификациями ligkern внутри файла кодирования должны начинаться с % LIGKERN. Спецификации Ligkern в lig-файле могут начинаться таким образом.

МЕЖБУКВЫ И ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ЛИГКЕРЕ

Межбуквенный интервал имеет различные побочные эффекты для информации ligkern. Вместо того, чтобы просто применить дополнительную информацию о ligkern (см. предыдущий раздел), делается следующее:

  1. В случае положительного межбуквенного интервала родные лигатуры удаляются, если не указана опция -k.

  2. Дополнительная информация ligkern применяется как обычно, за исключением того, что в случае положительного межбуквенного интервала применяются другие значения по умолчанию: -l 0 спокойно игнорируется, комментарии ligkern в файле кодировки игнорируются, а defpre.lig читается вместо default.lig.

  3. Применяется межбуквенный интервал. Это добавляет много ядер и изменяет существующие ядра.

  4. Применяется дополнительная информация о ligkern, указанная с помощью -L. Единственная разрешенная здесь спецификация ligkern — это удаление пар кернинга (с оператором {}). Значения 0 и 1 имеют то же значение, что и параметр -l. В формате tfm есть место только для лигатур и пар кернинга размером примерно 180x180. Этого достаточно для кодирования OT1, но для кодирования texnansi необходимо удалить несколько спецификаций ligkern. Программа pltotf удалит всю информацию о лигатурах, если останется слишком много лигатур и кернов. LIG-файл по умолчанию — defpost.lig. Этот файл отбрасывает пары кернингов, которые вряд ли будут задействованы в межбуквенном интервале, такие как кернинги, включающие акценты, или кернинги со знаком пунктуации или правой скобкой слева. Он не добавляет керны межбуквенного интервала, включающие граничные символы. Вместо этого пространство шрифта увеличивается вдвое по сравнению с расстоянием между буквами. defpost.lig выбрасывает достаточное количество ядер в случае кодирования texnansi. При использовании других кодировок вам, возможно, придется отбрасывать дополнительные пары кернинга.

ПРОПИСНЫЕ И НИЖНИЕ РЕГИСТРЫ НА ОСНОВЕ ШРИФТОВ

В состав дистрибутива входят векторы кодирования texnanuc.enc и texnanlc.enc, которые создают шрифты со всеми строчными и верхними регистрами.

Основное использование заглавных шрифтов — это заголовки страниц и заголовки разделов. Если они содержат математику, то использование верхнего регистра на основе макросов создаст неприятные сложности. Пример:

afm2pl -p texnanuc ptmr8a ptmup8y
pltotf ptmup8y

Для достижения наилучших результатов вы должны добавить немного межбуквенного интервала. В LaTeX это лучше всего сделать с помощью пакета microtype; см. документацию этого пакета. Но это также можно сделать с помощью afm2pl:

afm2pl -p texnanuc -m 100 ptmr8a ptmup8y

Это требует осторожности; см. выше.

Вы можете использовать этот новый шрифт в контексте выбора шрифта LaTeX следующим образом:


<preamble commands>
\makeatletter
{\nfss@catcodes
\DeclareFontShape{LY1}{ptm}{m}{upp}{<-> ptmup8y}{}}
\makeatother
...
\begin{document}
...
{\fontshape{upp}\selectfont uppercase text}

Обратите внимание, что upp — это просто новое имя формы.

Лигатура sz ß

Обратите внимание, что кодировка texnanuc не содержит глифа для лигатуры sz ß; вам придется либо заменить ss, либо предоставить решение на основе макросов. Следующий код использует либо обычный глиф, либо заменяет буквы ss, в зависимости от того, существует ли глиф в текущем шрифте:


\def\ss{%
  \setbox0\hbox{\char25}%
  \ifnum\wd0=0 ss\else\box0\fi
}

В LaTeX этот код работает достаточно хорошо, хотя иногда вам может понадобиться вставить \protect. Лучшее решение могло бы включать шестой параметр макроса \DeclareFontShape, но мне не удалось заставить его работать.

AFM2PL, FONTINST И ИСКУССТВЕННЫЕ МАЛЫЕ ЗАГЛАВНЫЕ

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

Найдите в texmf/tex/fontinst файлы поддержки fontinst, которые позволяют вам генерировать шрифт smallcaps (файлы tfm и vf) из файла tfm, сгенерированного afm2pl. Этот пакет поддерживает только кодировку texnansi.

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

ИЗМЕНЕНО В ВЕРСИИ 0.7.1

Чтобы избежать конфликтов имен, файлы .enc- и .lig, распространяемые с помощью afm2pl, добавляли afm2pl- к своему имени. Сама программа теперь сначала ищет добавленное таким образом имя. Если файл .enc- или .lig не найден, он будет искать исходное имя файла. Переименование файлов afm2pl .enc может потребовать изменения некоторых файлов карты.

URL-адреса

Домашняя страница afm2pl: http://tex.aanhet.net/afm2pl/.

В документе Поверхностная установка шрифта[2] (EuroTeX 2006 Proceedings, опубликовано как TUGboat[3], выпуск 27.1) показано использование afm2pl.

ПРИМЕЧАНИЯ

1.

За исключением того, что, возможно, суженный Courier вызывает меньше раздражения, чем Courier полной ширины, когда используется в сочетании с нормальным пропорциональным шрифтом. Для Courier выберите .833, чтобы соответствовать ширине cmtt. А еще лучше вообще не использовать Courier; большинство дистрибутивов TeX предлагают различные хорошие замены.

2.

Установка шрифта поверхностным способом

https://tug.org/TUGboat/tb27-1/tb86kroonenberg-fonts.pdf

afm2pl поддерживается как часть TeX Live.