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
'ом.