Подключение TrueType шрифтов с помощью пакета fontinst

В данном описании приведён пример подключения TrueType шрифтов georgia из операционной системы Windows XP с помощью пакета fontinst для использования их с (pdf)TeX, (pdf)LaTeX. Все работы проводились в русской версии операционной системы WindowsXP Pro SP2 с использованием MiKTeX версии 2.5.

Имена шрифтов для TeX выберем в соответствии со схемой Карла Берри - jgi. Устанавливать в MiKTeX будем шрифты для трёх кодировок: T2A (кириллица, 8 бит), T1 (европейские языки, 8 бит) и OT1 (стандартная TeX’овская, 7 бит).

Примечание. Не все TrueType шрифты подходят для подключения к TeX. Важно, чтобы имена глифов в шрифте соответсвовали Adobe Glyph List. Бывает, что внутренняя структура ttf-файла несовместима с самим TeX. Например, в гарнитуре cambria из Windows Vista имеются обе эти проблемы.

1. Начало

Создаём новую папку, в которой будем проводить все работы, и копируем в неё из папки C:\WINDOWS\Fonts следующие файлы шрифтов:

georgia.ttf
georgiab.ttf
georgiai.ttf
georgiaz.ttf

2. Создание AFM файлов метрик

Выполняем следующие четыре команды:

ttf2afm -o georgia.afm georgia.ttf
ttf2afm -o georgiab.afm georgiab.ttf
ttf2afm -o georgiai.afm georgiai.ttf
ttf2afm -o georgiaz.afm georgiaz.ttf

В результате получим четыре файла с расширением .afm с метриками шрифтов.

3. Создание теховских файлов метрик TFM и файлов виртуальных шрифтов VF

Создаём файл jgi-drv.tex с таким содержанием:

\input fontinst.sty
\input fnstcorr
\input cyralias

\recordtransforms{jgi-rec.tex}

\transformfont{jgir8r}{\reencodefont{8r}{\fromafm{georgia}}}
\transformfont{jgiri8r}{\reencodefont{8r}{\fromafm{georgiai}}}
\transformfont{jgib8r}{\reencodefont{8r}{\fromafm{georgiab}}}
\transformfont{jgibi8r}{\reencodefont{8r}{\fromafm{georgiaz}}}

\transformfont{rjgir6a}{\reencodefont{t2a}{\fromafm{georgia}}}
\transformfont{rjgiri6a}{\reencodefont{t2a}{\fromafm{georgiai}}}
\transformfont{rjgib6a}{\reencodefont{t2a}{\fromafm{georgiab}}}
\transformfont{rjgibi6a}{\reencodefont{t2a}{\fromafm{georgiaz}}}

\installfonts
\installfamily{OT1}{jgi}{}
\installfont{jgir7t}{jgir8r,newlatin}{ot1}{OT1}{jgi}{m}{n}{}
\installfont{jgiri7t}{jgiri8r,newlatin}{ot1}{OT1}{jgi}{m}{it}{}
\installfont{jgib7t}{jgib8r,newlatin}{ot1}{OT1}{jgi}{bx}{n}{}
\installfont{jgibi7t}{jgibi8r,newlatin}{ot1}{OT1}{jgi}{bx}{it}{}
\endinstallfonts

\installfonts
\installfamily{T1}{jgi}{}
\installfont{jgir8t}{jgir8r,newlatin}{t1}{T1}{jgi}{m}{n}{}
\installfont{jgiri8t}{jgiri8r,newlatin}{t1}{T1}{jgi}{m}{it}{}
\installfont{jgib8t}{jgib8r,newlatin}{t1}{T1}{jgi}{bx}{n}{}
\installfont{jgibi8t}{jgibi8r,newlatin}{t1}{T1}{jgi}{bx}{it}{}
\endinstallfonts

\installfonts
\installfamily{T2A}{jgi}{}
\installfont{jgir6a}{rjgir6a,jgir8r,latin,cyrillic}{t2a}{T2A}{jgi}{m}{n}{}
\installfont{jgiri6a}{rjgiri6a,jgiri8r,latin,cyrillic}{t2a}{T2A}{jgi}{m}{it}{}
\installfont{jgib6a}{rjgib6a,jgib8r,latin,cyrillic}{t2a}{T2A}{jgi}{bx}{n}{}
\installfont{jgibi6a}{rjgibi6a,jgibi8r,latin,cyrillic}{t2a}{T2A}{jgi}{bx}{it}{}
\endinstallfonts

\endrecordtransforms
\bye

Запускаем его на выполнение:

latex jgi-drv

В результате на выходе получаем файл jgi-rec.tex, который понадобится для генерации map-файла, файлы определения шрифтов *.fd, а также следующие файлы raw-шрифтов и виртуальных шрифтов в текстовом формате:

jgi-rec.tex

ot1jgi.fd
t1jgi.fd
t2ajgi.fd

jgib8r.pl
jgibi8r.pl
jgir8r.pl
jgiri8r.pl
rjgib6a.pl
rjgibi6a.pl
rjgir6a.pl
rjgiri6a.pl

jgib6a.vpl
jgib7t.vpl
jgib8t.vpl
jgibi6a.vpl
jgibi7t.vpl
jgibi8t.vpl
jgir6a.vpl
jgir7t.vpl
jgir8t.vpl
jgiri6a.vpl
jgiri7t.vpl
jgiri8t.vpl

Файлы *.pl и *.vpl необходимо сконвертировать в файлы метрик .tfm и виртуальных шрифтов .vf следующими командами:

PLTOTF jgib8r.pl jgib8r.tfm
PLTOTF jgibi8r.pl jgibi8r.tfm
PLTOTF jgir8r.pl jgir8r.tfm
PLTOTF jgiri8r.pl jgiri8r.tfm
PLTOTF rjgib6a.pl rjgib6a.tfm
PLTOTF rjgibi6a.pl rjgibi6a.tfm
PLTOTF rjgir6a.pl rjgir6a.tfm
PLTOTF rjgiri6a.pl rjgiri6a.tfm

VPTOVF jgib6a.vpl jgib6a.vf jgib6a.tfm
VPTOVF jgib7t.vpl jgib7t.vf jgib7t.tfm
VPTOVF jgib8t.vpl jgib8t.vf jgib8t.tfm
VPTOVF jgibi6a.vpl jgibi6a.vf jgibi6a.tfm
VPTOVF jgibi7t.vpl jgibi7t.vf jgibi7t.tfm
VPTOVF jgibi8t.vpl jgibi8t.vf jgibi8t.tfm
VPTOVF jgir6a.vpl jgir6a.vf jgir6a.tfm
VPTOVF jgir7t.vpl jgir7t.vf jgir7t.tfm
VPTOVF jgir8t.vpl jgir8t.vf jgir8t.tfm
VPTOVF jgiri6a.vpl jgiri6a.vf jgiri6a.tfm
VPTOVF jgiri7t.vpl jgiri7t.vf jgiri7t.tfm
VPTOVF jgiri8t.vpl jgiri8t.vf jgiri8t.tfm

4. Создание map-файлов

Создаём файл jgi-map.tex с таким содержанием:

\input finstmsc.sty
\resetstr{PSfontsuffix}{.ttf}
\adddriver{dvips}{georgia.map}
\input jgi-rec.tex
\donedrivers
\bye

Запускаем его на выполнение:

latex jgi-map

На выходе будем иметь файл кодировки t2a.enc и map-файл georgia.map. Почему fontinst создаёт свой файл с кодировкой я не знаю, но чтобы всё заработало в файле georgia.map необходимо подстроку fontinst-autoenc-t2a заменить на T2AAdobeEncoding. Теперь georgia.map готов к использованию. Вот его правильное содержимое:

jgir8r Georgia <8r.enc <georgia.ttf " TeXBase1Encoding ReEncodeFont "
jgiri8r Georgia-Italic <8r.enc <georgiai.ttf " TeXBase1Encoding ReEncodeFont "
jgib8r Georgia-Bold <8r.enc <georgiab.ttf " TeXBase1Encoding ReEncodeFont "
jgibi8r Georgia-BoldItalic <8r.enc <georgiaz.ttf " TeXBase1Encoding ReEncodeFont "
rjgir6a Georgia <t2a.enc <georgia.ttf " T2AAdobeEncoding ReEncodeFont "
rjgiri6a Georgia-Italic <t2a.enc <georgiai.ttf " T2AAdobeEncoding ReEncodeFont "
rjgib6a Georgia-Bold <t2a.enc <georgiab.ttf " T2AAdobeEncoding ReEncodeFont "
rjgibi6a Georgia-BoldItalic <t2a.enc <georgiaz.ttf " T2AAdobeEncoding ReEncodeFont "

Кроме georgia.map нам ещё необходимо создать текстовый файл ttfonts.map с таким содержимым:

jgir8r   georgia.ttf  Encoding=8r.enc
jgiri8r  georgiai.ttf Encoding=8r.enc
jgib8r   georgiab.ttf Encoding=8r.enc
jgibi8r  georgiaz.ttf Encoding=8r.enc
rjgir6a  georgia.ttf  Encoding=t2a.enc
rjgiri6a georgiai.ttf Encoding=t2a.enc
rjgib6a  georgiab.ttf Encoding=t2a.enc
rjgibi6a georgiaz.ttf Encoding=t2a.enc

И последний штрих, создаем файл updmap.cfg с таки содержанием:

Map georgia.map

5. Создание дерева TDS с необходимыми файлами

Теперь у нас есть все необходимые файлы. Надо их собрать в дерево TDS, например, в папке TTFonts:

C:\TTFONTS
├───dvips
│   └───config
│           georgia.map
│           
├───fonts
│   ├───afm
│   │   └───microsoft
│   │       └───georgia
│   │               georgia.afm
│   │               georgiab.afm
│   │               georgiai.afm
│   │               georgiaz.afm
│   │               
│   ├───tfm
│   │   └───microsoft
│   │       └───georgia
│   │               jgib6a.tfm
│   │               jgib7t.tfm
│   │               jgib8r.tfm
│   │               jgib8t.tfm
│   │               jgibi6a.tfm
│   │               jgibi7t.tfm
│   │               jgibi8r.tfm
│   │               jgibi8t.tfm
│   │               jgir6a.tfm
│   │               jgir7t.tfm
│   │               jgir8r.tfm
│   │               jgir8t.tfm
│   │               jgiri6a.tfm
│   │               jgiri7t.tfm
│   │               jgiri8r.tfm
│   │               jgiri8t.tfm
│   │               rjgib6a.tfm
│   │               rjgibi6a.tfm
│   │               rjgir6a.tfm
│   │               rjgiri6a.tfm
│   │               
│   ├───truetype
│   │   └───microsoft
│   │       └───georgia
│   │               georgia.ttf
│   │               georgiab.ttf
│   │               georgiai.ttf
│   │               georgiaz.ttf
│   │               
│   └───vf
│       └───microsoft
│           └───georgia
│                   jgib6a.vf
│                   jgib7t.vf
│                   jgib8t.vf
│                   jgibi6a.vf
│                   jgibi7t.vf
│                   jgibi8t.vf
│                   jgir6a.vf
│                   jgir7t.vf
│                   jgir8t.vf
│                   jgiri6a.vf
│                   jgiri7t.vf
│                   jgiri8t.vf
│                   
├───miktex
│   └───config
│           updmap.cfg
│           
├───tex
│   └───latex
│       └───microsoft
│           └───georgia
│                   ot1jgi.fd
│                   t1jgi.fd
│                   t2ajgi.fd
│                   
└───ttf2tfm
    └───base
            ttfonts.map

Далее папку TTFonts необходимо подключить в дереву TDS MiKTeX программой MiKTeX Options на вкладке Roots обязательно перед деревом, где установлен сам MiKTeX. Как вариант, можно положить файлы в локальное дерево. Затем надо обновить дерево программой MiKTeX Options на вкладке Generals (кнопка “Refresh FNDB”) и выполнить команду:

updmap

На этом установка закончена. Преимущества установки шрифтов в отдельной папке очевидны:

  • не засоряется ни основное дерево, ни локальное;
  • для удаления шрифтов из системы надо просто исключить дерево программой MiKTeX Options на вкладке Roots и выполнить команду updmap;
  • при обновлении MiKTeX ничего не ломается.

6. Проверка работоспособности

Для проверки работы шрифтов в LaTeX и pdfLaTeX создадим исходный файл test.tex:

\documentclass[12pt]{article}

\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[english,russian]{babel}

\renewcommand{\rmdefault}{jgi}

\begin{document}

Пров\'ерка раб\'оты шрифт\'а georgia в (pdf)\LaTeX.

\textit{Пров\'ерка раб\'оты шрифт\'а georgia в (pdf)\LaTeX.}

\textbf{Пров\'ерка раб\'оты шрифт\'а georgia в (pdf)\LaTeX.}

\textbf{\textit{Пров\'ерка раб\'оты шрифт\'а georgia в (pdf)\LaTeX.}}

\end{document}

Компилируем его:

latex test.tex
pdflatex test.tex

test.dvi должен корректно просматриваться YAP’ом, а test.pdf - AdobeReader’ом.

Для проверки работы шрифтов в (pdf)TeX выполним команды:

tex testfont
pdftex testfont

на запрос имени шрифта вводим, например, jgir6a. Затем вводим TeX’у команды \table\eject\bye. В результате получаем testfont.dvi или testfont.pdf, которые должны корректно отображаться YAP’ом и AdobeReader’ом.

7. Вопросы-ответы

Q. Есть программа ttftotfm. Как кажется, она позволяет обойтись без генерации *.afm файлов, которые де-факто не нужны. Или я чего-то не понимаю?

A. В данном случае ставилась задача подключения TrueType шрифтов с помощью пакета fontinst, а не программы ttftotfm.


Q. Работает ли поиск русских слов в PDF-документе, созданном с использованием TTF-шрифта?

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


 
faq/ttf_fontinst.txt · Последние изменения: 2007/11/02 03:36 nbl
 
Recent changes RSS feed Driven by DokuWiki