Как использовать шрифты Adobe afm в тексте matplotlib?

#python #matplotlib #fonts #adobe

#python #matplotlib #шрифты #adobe

Вопрос:

Я хочу добавить текст к рисунку, используя шрифт AFM. Я знаю, что могу передать fontproperties fontname аргумент ключевого слова или при создании текста.

Что касается использования шрифтов AFM в matplotlib, я нашел это и это.

Я не могу передать экземпляр шрифта, созданный matplotlib.font_manager.afmFontProperty как fontproperties kwarg.

Шрифт, который я намерен использовать, называется URW Chancery L и находится в /usr/share/fonts/type1/gsfonts/z003034l.afm . Как я могу заставить matplotlib использовать этот шрифт?

Также я искал конвертеры из afm в ttf, но не смог найти ни одного, может быть, у вас есть предложения?

Я использую matplotlib 1.5.3 в Ubuntu 16.04.

Ответ №1:

Что такое «шрифт AFM»? Файлы AFM — это обычные электронные файлы, которые содержат только метаданные вокруг границ символов, пар кернинга и т. Д. В качестве удобного механизма поиска, когда вы не хотите использовать файл реального шрифта для этой информации (удобно для набора текста, где наличие метрик, доступных в качестве отдельного ресурса, превращает все в аднамного быстрее), они сами по себе никак не являются шрифтами. Вам все равно понадобится (в настоящее время в основном несуществующий) .pfa или .pfb файл шрифта («шрифт принтера; ascii» и «шрифт принтера; двоичный» соответственно) для выполнения любого реального рендеринга текста. Без них все, что вы можете сделать, это отметить соответствующую область, в которой будет отображаться текст, если у вас также будет доступен сам шрифт =)

(на самом деле это то, что делают TeX и PDF — они используют метрики шрифтов для создания «пустых полей», внутри которых текст в конечном итоге будет отображаться, как только будет определен весь набор текста, и поля больше не перемещаются)

Комментарии:

1. Спасибо за ответ и за устранение моей путаницы. У меня также есть .pfb доступный файл шрифта. Могу ли я использовать его в matplotlib так же, как .ttf файл?

2. Я только что проверил себя. Я могу настроить FontProperties экземпляр, используя путь к файлу pfb как fname . Передача этого экземпляра fontproperties для plt.text() построения всего желаемого. Еще раз спасибо!