teTeX. Рассказ про
версию 0.9. Если у вас 0.4, все практически так же. Могут
немного отличаться пути к файлам, ну, и
PDFTEX у вас отсутствует..pfa или .pfb. Это
совершенно одно и то же. Известные мне бесплатные русские
шрифты формата Type 1 перечислены на моей
TEX-страничке. .afm). Если .afm у вас
нет, можно их сгенерить из шрифта, например, при помощи
Ghostscript (см. скрипт
printafm). Но это лишит вас информации о
кернинге, так что лучше ищите настоящие .afm. Все
коммерческие шрифты должны иметь метрики в комплекте. Далее под $TEXMF понимается каталог, в который у
вас установлен teTeX. Это может быть
/usr/lib/texmf, /usr/local/teTeX и
т.п.
Конечная цель наших трудов -- создание стилевого пакета, который можно подключить командой, например,
\usepackage{localps}
и получить в результате текст, набранный Type 1
(POSTSCRIPT) шрифтами. При этом команды
\textrm, \textsf, \textit,
\texttt и т.д. будут работать по-прежнему, но
выбираться будут Type1 шрифты. Для этого нам нужно иметь три
шрифтовых гарнитуры: нормальную, без засечек и
моноширинную. Каждая должна включать в себя несколько шрифтов:
прямой, наклонный, курсив, полужирный, жирный и их сочетания. Если
ваш шрифт не включает все возможные варианты -- большой беды в
этом не будет, можно будет использовать подстановки. Скажем, если
некоторый шрифт есть только в прямом, наклонном, и прямом
полужирном начертании -- то вместо курсива можно будет подставить
наклонный, вместо наклонного полужирного
-- прямой полужирный или наклонный светлый. В таком духе.
Использование Type 1 шрифтов позволит вам:
LH;
Будем подключать три шрифта: College в качестве основного (roman), Textbook в качестве шрифта без засечек (sans serif), Courier в качестве моноширинного шрифта (typewriter). Составляем табличку соответствия имен файлов и названий шрифтов:
| Каталог | Файл | Шрифт |
|---|---|---|
| College | colle10 | College-Bold |
| College | colle8 | College-Italic |
| College | colle9 | College |
| Textbook | textb18 | Textbook-Italic |
| Textbook | textb19 | Textbook |
| Textbook | textb20 | Textbook-Bold |
| Courier | crr35__k | CourierKOIC |
| Courier | crr36__k | CourierKOIC-Oblique |
| Courier | crr55__k | CourierKOIC-Bold |
| Courier | crr56__k | CourierKOIC-BoldOblique |
local. $TEXMF/fonts/{type1,afm}/{College,Textbook,Courier}
и раскладываем туда файлы .pfb и
.afm, соответственно.$TEXMF/dvips/local и
кладем туда файлы adobe2alt.enc, iso2alt.enc. Первый вектор
я делал для Adobe
Standard Cyrillic Font Specification. Второй -- для
дикого, но не редкого случая, когда в шрифте русские буквы
называются именами соответствующих букв Latin-1.
Если вам встретится шрифт, у которого русские буквы будут
называться еще как-то, то вам придется написать еще один
вектор кодировки. Делать это несложно. В вектор пишутся
названия символов шрифта. Их можно посмотреть, например,
Ghostscript'ом (см. prfont.ps). Позиции
символов в векторе соответствуют их кодам (альтернативная
кодировка в моем случае).
.afm
TEX'овские
.tfm. Раскладываем их в
$TEXMF/fonts/tfm/local/{College,Textbook,Courier}. Их
имена должны совпадать с именами файлов .pfb. Для
каждого файла метрики filename.afm) выполняем:
$ afm2tfm filename.afm -v filename.vpl -p adobe2alt.enc filename.ftm
В получившиеся файлы .vpl дописываем
лигатуры <<, >>, -- и --- (кроме шрифта "пишущей машинки",
то есть, Courier). Делается так. Ищем секцию LIGTABLE, и
делаем ее выглядящей (для альтернативной внутренней
кодировки TEX'а) так:
(LIGTABLE (LABEL O 74) (comment less) (LIG O 74 O 363) (STOP) (LABEL O 76) (comment greater) (LIG O 76 O 364) (STOP) (LABEL O 55) (comment hyphen) (LIG O 55 O 173) (STOP) (LABEL O 173) (comment endash) (LIG O 55 O 174) (STOP) )
Она означает:
adobe2alt.enc) дают символ левой
кавычки-"елочки" (восьмеричный код 363, символ
"guillemotleft");.tfm):
$ vptovf filename.vpl /dev/null filename.tfm
.tfm раскладываем в
$TEXMF/fonts/tfm/local/{College,Textbook,Courier}. $TEXMF/dvips/base/psfonts.map дописываем
такое:
colle10 College-Bold " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <colle10.pfb colle8 College-Italic " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <colle8.pfb colle9 College " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <colle9.pfb crr35__k CourierKOIC " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <crr35__k.pfb crr36__k CourierKOIC-Oblique " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <crr36__k.pfb crr55__k CourierKOIC-Bold " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <crr55__k.pfb crr56__k CourierKOIC-BoldOblique " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <crr56__k.pfb textb18 Textbook-Italic " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <textb18.pfb textb19 Textbook " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <textb19.pfb textb20 Textbook-Bold " AdobeToAltEncoding ReEncodeFont " <adobe2alt.enc <textb20.pfb
(Для некоторых шрифтов вместо "<файл.pfb" может понадобиться "<<файл.pfb", чтобы они корректно вставлялись в PDF. По умолчанию в PDF вставляются только используемые символы, "<<" вставляет шрифт целиком.)
$TEXMF/pdftex/base/tetex.map: colle10 College-Bold 10 <colle10.pfb adobe2alt.enc colle8 College-Italic 42 <colle8.pfb adobe2alt.enc colle9 College 10 <colle9.pfb adobe2alt.enc crr35__k CourierKOIC 3 <crr35__k.pfb adobe2alt.enc crr36__k CourierKOIC-Oblique 3 <crr36__k.pfb adobe2alt.enc crr55__k CourierKOIC-Bold 3 <crr55__k.pfb adobe2alt.enc crr56__k CourierKOIC-BoldOblique 3 <crr56__k.pfb adobe2alt.enc textb18 Textbook-Italic 8 <textb18.pfb adobe2alt.enc textb19 Textbook 8 <textb19.pfb adobe2alt.enc textb20 Textbook-Bold 8 <textb20.pfb adobe2alt.enc
В tetex.map могут уже быть определения
для ваших шрифтов. Тщательно их оттуда удалите и добавьте
вышеуказанные.
Формат этих строчек, из README от
PDFTEX'a:
Each line in this file should contain these fields in fixed order:
`tex_name base_name flags fname encoding_file'
where
`tex_name' is the TFM name
`base_name' is the PostScript base font name and should be matched with the font name defined in Type1/TrueType font file (by `/FontName' key). If they don't match then the font name defined in Type1/TrueType font file is ignored.
`flags' is the font flags (see PDF manual for details how to specify it)
`fname' is the file name of Type1/TrueType font. If starts by character `<' it means this font should be embbed, otherwise only the font parametrs are extracted to generating FontDescriptor. Font names with suffix `.ttf'/`.TTF' mean TrueType fonts, others mean Type1 fonts. 'encoding_file' is the file that defines new encoding for this font. It should work for 'standard' encoding files DC.enc, CMtext.enc,... The first line in encoding file which starts by other character than `%' should contain only the name of the encoding (which will be ignored). A line with prefix `] def' signs the end of the encoding.
Здесь все понятно, кроме font flags. Их можно найти в PDF manual, а можно поверить мне на слово:
| Номер бита | Значение |
|---|---|
| 1 | Fixed-width font |
| 2 | Serif font |
| 3 | Symbolic font |
| 4 | Script font |
| 6 | Uses the Adobe Standard Romand Character Set |
| 7 | Italic font |
| 17 | All-cap font |
| 18 | Small-cap font |
| 19 | Force bold at small text sizes |
$TEXMF/tex/latex/local/localps.sty
такого, примерно, вида:
\def\fileversion{1}
\def\filedate{1997/05/06}
\ProvidesPackage{localps}[\filedate\space\fileversion
\space PSNFSS LaTeX2e package loading local PostScript fonts]
\renewcommand{\rmdefault}{College}
\renewcommand{\sfdefault}{Textbook}
\renewcommand{\ttdefault}{CourierKOIC}
\endinput
$TEXMF/tex/latex/local/{LCYCollege,LCYTextbook,LCYCourierKOIC}.fd.
Например, вот LCYCollege.fd:
%Filename: LCYCollege.fd
\ProvidesFile{LCYCollege.fd}
[1998/01/28 Font definitions for LCY/College.]
\DeclareFontFamily{LCY}{College}{}
\DeclareFontShape{LCY}{College}{b}{n}{ <-> College-Bold }{}
\DeclareFontShape{LCY}{College}{m}{n}{ <-> College }{}
\DeclareFontShape{LCY}{College}{m}{it}{ <-> College-Italic }{}
\DeclareFontShape{LCY}{College}{bx}{n}{<->ssub * College/b/n}{}
\DeclareFontShape{LCY}{College}{b}{it}{ <->ssub * College/b/n }{}
\DeclareFontShape{LCY}{College}{bx}{sl}{<->ssub * College/b/sl}{}
\DeclareFontShape{LCY}{College}{bx}{it}{<->ssub * College/b/it}{}
\DeclareFontShape{LCY}{College}{b}{sl}{<->ssub * College/b/it}{}
\DeclareFontShape{LCY}{College}{m}{sl}{<->ssub * College/m/it}{}
\DeclareFontShape{LCY}{College}{mx}{n}{<->ssub * College/m/n}{}
\DeclareFontShape{LCY}{College}{mx}{sl}{<->ssub * College/m/sl}{}
\DeclareFontShape{LCY}{College}{mx}{it}{<->ssub * College/m/it}{}
\endinput
Здесь мы определяем три шрифта: LCY/College/m/n
(нормальный), LCY/College/b/n (полужирный) и
LCY/College/m/it (курсив), а остальные делаем их
псевдонимами. Если в семействе шрифтов больше, значит, здесь
большее число шрифтов будет "настоящими".
LCYCourierKOIC.fd и LCYTextbook.fd
устроены аналогично.
LCY на OT1.texhash
Создаем тестовый файл probe.tex:
\documentclass{article}
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{pslatex,localps}
\begin{document}
This is a test. Это проба пера.
\end{document}
Компилируем его latex'ом или
pdflatex'ом.