В данном описании приведён пример подключения 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 имеются обе эти проблемы.
Создаём новую папку, в которой будем проводить все работы, и копируем в неё из папки C:\WINDOWS\Fonts следующие файлы шрифтов:
georgia.ttf georgiab.ttf georgiai.ttf georgiaz.ttf
Выполняем следующие четыре команды:
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 с метриками шрифтов.
Создаём файл 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
Создаём файл 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
Теперь у нас есть все необходимые файлы. Надо их собрать в дерево 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
На этом установка закончена. Преимущества установки шрифтов в отдельной папке очевидны:
Для проверки работы шрифтов в 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’ом.
Q. Есть программа ttftotfm. Как кажется, она позволяет обойтись без генерации *.afm файлов, которые де-факто не нужны. Или я чего-то не понимаю?
A. В данном случае ставилась задача подключения TrueType шрифтов с помощью пакета fontinst, а не программы ttftotfm.
Q. Работает ли поиск русских слов в PDF-документе, созданном с использованием TTF-шрифта?
A. В данном случае, скорее всего, поиск работать не будет из-за использования виртуальных шрифтов.