T2a Latex

T2a Latex




⚡ 👉🏻👉🏻👉🏻 INFORMATION AVAILABLE CLICK HERE 👈🏻👈🏻👈🏻




















































Довольно большой набор русских type1 шрифтов распространяется в пакете PSCyr [1]. Установка этого пакета подробно (и по русски!) описана в файле README 1. Однако ничто не мешает вам использовать любые понравившиеся вам шрифты в latex. Единственные проблемы - это 1) сделать эти шрифты доступными для latexa, и 2) отучить latex растеризовать их.
Как это сделать и будет описано в данном тексте.
tetex версии >= 1.0.7, ghostscript версии >=6.5 и несколько фонтов. В качестве примера предлагаю использовать свободные фонты с сайта Vedi [2] - Quake (type1 версия) и Stonehenge, Nadejda, Coptic (ttf версии). Также нужен будет один файл из пакета pscyr t2a.enc (файл с вектором кодировки T2AAdobeEncoding), но вы можете просто установить у себя этот пакет целиком, тем более, что в нем содержатся очень симпатичные русские шрифты (мне лично очень понравились Лазурский и Академия - шрифт используемый в старых изданиях 50х годов прошлого века). Тем кто хочет поглубже разобраться в структурах ps, pdf файлов, а также в том, как использовать фонты в этих файлах могу порекомендовать толстые английские мануалы с сайта Adobe [3, 4, 5, 6].
"Корявые"фонты - это type3 фонты, т.е. фонты реализованные с помощью графических команд postscript. С одной стороны это делает фонт более гибким (можно нарисовать любой символ), но с другой - это все же графика, и хотя pdf умеет сглаживать графику, но результат оказывается хуже чем у outlined type1 и truetype шрифтов. Однако просто взять и вставить outlined шрифт не получится (например отредактировав ps-файл ) - дело в том что эти шрифты должны быть правильно "реализованы"в postscript файле, иначе ps2pdf конвертор все равно будет растеризовать их и в результате для некоторых символов (как правило русских букв) будет использован type3 шрифт.
Что значит правильно реализовать шрифт? Дело в том, что хотя в самом файле шрифта может содержаться любое количество глифов, но одновременно адресовать и отобразить с помощью постскрипт команды show в постскрипт файле можно только 256 символов. Если вы заглянете внутрь файла с type1 шрифтом (лучше брать файлы с расширением pfa), то вы найдёте в начале список глифов реализованных по-умолчанию в этом фонте (строчка Encoding). Список может быть как стандартным, например, AdobeStandardEncoding, либо явно определяться как encoding-array, например, как в шрифте Quake:
/FontName /QuakeСyr def 
/Encoding 256 array 0 1 255  \{ 1 index exch /.notdef put  \}  for 
dup 32 /space put 
dup 33 /exclam put 
dup 34 /quotedbl put
и т.д. - ровно 256 символов. Если же просмотреть его с помощью ghostscript-команд (как это сделать, описано в "Почему Мозилла печатает пустые квадраты вместо русских букв") можно убедится, что он дополнительно содержит еще 3 не закодированных символа. В postscript-language любой символ имеет уникальное имя - /space - пробел и т.д., в частности для русских букв зарезервированы имена /afii10017-afii10049;/afii10065-/afii10097 (можно убедится, что в шрифте Quake они уже закодированы). Вывод текста в постскрипт файле осуществляется с помощью команды show, которая принимает в качестве аргумента последовательность байт - индексов букв в текущем фонте (т.е. в фонте предварительно реализованном в постскрипт-файле с помощью команды selectfont). Чтобы отобразить символы, которые не содержатся в предопределённом encoding-array фонта нужно в постскрипт файле "динамически"создать фонт (команда definefont), в котором бы содержались нужные символы. Причем сделать это можно двумя путями:
Собственно, чтобы из latex файла получать красивые pdf - нужно научить dvips обрабатывать "нестандартные"символы согласно варианту 1, а не 2, что он склонен делать, так сказать, по умолчанию.
Вообще говоря, LaTeX безразлично какие именно шрифты вы собираетесь использовать в своём документе (LaTeX не занимается отображением документа). Единственное что ему нужно знать о шрифте - это где-какие символы расположены и их метрику, чтобы правильно распределять текст на странице. Эту информацию latex извлекает из tfm (tex font metric) файла и его наличие - непременное условие, чтобы любой фонт можно было бы использовать в latex документах. Т.е. первый шаг к подключению какого-либо шрифта к latex - это преобразовании метрики шрифта. У type1 шрифтов информация о начертании букв и их размерах содержится в двух различных файлах - afm (может также иметь расширение pfm) и pfa (или pfb) соответственно, для ttf данные о глифах и метрика содержатся в одном и том-же файле. Если же вы хотите классифицировать шрифты по стилям, чтобы LaTeX автоматически подбирал шрифты для bold, italic, serifed, sans-serifed и т.д. текста, то для этой цели вам понадобится еще fd-файл (font descriptor). Однако этот файл не является обязательным если вы собираетесь использовать фонта в своём документе "разово например для каких-нибудь декоративных надписей.
Прежде чем вставлять шрифты подготовьте временную директорию ( ~/latex-fonts к примеру), где будут собраны шрифты, копируйте в нее quake.pfa, quake.afm, coptic.ttf, stonhen.ttf и nadeb.ttf (предварительно скачав их с сайта Vedi), а также t2a.enc из пакета pscyr. Для генерации pdf файла будет использована команда pdflatex напрямую создающая pdf-файл из исходников latex. Поэтому создайте в этой временную директорию еще файл pdftex.cfg, скопировав системный pdftex.cfg файл (найти его можно командой
cd / ; kpsewhich -progname=pdftex pdftex.cfg
у меня это /usr/share/texmf/pdftex/config/pdftex.cfg). Где-нибудь в конце этого файла добавьте строчку
и создайте в директории ~/latex-fonts файл myfonts.map (в него будем записывать описания сгенерированных фонтов). Теперь, сделав cd ~/latex-fonts, убедитесь, что tetex видит локальный конфигурационный файл
cd ~/latex-fonts; kpsewhich --progname=pdftex pdftex.cfg
(ответ должен быть ./pdftex.cfg). Таким образом вы можете как угодно экспериментировать со шрифтами не затрагивая системную конфигурацию tetex.
Еще раз замечу, что метод который будет приведён ниже работает только в случае использования команды pdflatex, генерирующей pdf файл непосредственно из latex исходника. Если же вам для каких-то целей нужно сгенерировать постскрипт-файл (последовательностью команд latex...; dvips ...), то тут имеются проблемы связанные с тем, что ghostscript не умеет обрабатывать embedded truetype фонты (в конце я остановлюсь на этом).
Поскольку технология type1 шрифтов, также как и формат pdf, разработаны Adobe, то с type1 шрифтами проблем не возникает. Вначале изготавливаем tfm из afm файла (например из шрифта QuakeCyr)
>afm2tfm quake.afm -T t2a.enc 
quake QuakeCyr " T2AEncoding ReEncodeFont " < t2a.enc
Команда afm2tfm (входит в состав tetex) конвертирует afm (adobe font metric) файл в quake.tfm файл, попутно перекодируя его в T2AAdobeEncoding (-T t2a.enc). Вывод этой команды это примерно та строчка которую теперь нужно добавить в файл myfonts.map. Вам только нужно еще указать файл из которого нужно брать начертание шрифтов. Так что в окончательном виде вам нужно дописать в файл myfonts.map строку:
quake QuakeCyr " T2AEncoding ReEncodeFont " < quake.pfa < 
t2a.enc
(означает она следующее - latex имя шрифта, постскрипт имя шрифта, команда указывающая перекодировку фонта, файл где находятся глифы шрифта и файл с кодировкой).
Как уже упоминалось выше, latex-у вообще говоря нужен всего один файл tfm с теховской метрикой шрифта. Однако, в этом файле содержится ещё одна важная информация, что нужный символ присутствует в шрифте и о лигатурах 2, которые поддерживает этот шрифт. Вообще-то, для латинского шрифта отутствие в нём 4-х f-лигатур (fi, ffi, fl и ffl) считается дурным тоном, но и в русском тексте лигатуры тоже крайне важны, поскольку TEXсильно полагается на поддержку шрифтом (точнее файлом tfm) нескольких специфических лигатур. Это подстановка вместо двух дефисов короткого тире (endash), вместо трёх - динного тире (emdash) и кавычек-”гусиных лапок” (guillemots) вместо сдвоенных знаков больше-меньше. Фактически это просто макросы, но выполненные не в виде TEX-овских подстановок, а в виде подстановок, реализованных в самом шрифте.
Так вот, к сожалению, способ приведенный выше этого не обеспечивает. Может быть для шрифта QuakeCyr это и не обязательно, но для нормального текстового шрифта это большой недостаток. Так что посмотрим, как этот пробел восполнить. Для этого нам придется перекодировать tfm ещё раз и, возможно, немного подкрутить в нем метрику. Так что запустим команду afm2tfm с дополнительной опцией:
afm2tfm quake.afm -v quake.vpl -T t2a.enc
где vpl-файл - это файл с текстовым описанием tfm метрики. Для LATEXон не нужен, и мы его используем только в качестве временного файла, который нужно будет открыть, при необходимости отдактировать и с помощью него получить уже “правильный” tfm файл. В частности нас интересует часть с лигатурами:
(LIGTABLE 
   (LABEL O 25) (comment endash) 
   (LIG O 55 O 26) 
   (LIG O 177 O 26) 
   (STOP) 
   (LABEL O 47) (comment quoteright) 
   (LIG O 47 O 21) 
   (STOP) 
   (LABEL O 55) (comment hyphen) 
   (LABEL O 177) (comment hyphen) 
   (LIG O 55 O 25) 
   (LIG O 177 O 25) 
   (STOP) 
   (LABEL O 140) (comment quoteleft) 
   (LIG O 140 O 20) 
   (STOP) 
   )
Интересно, что тут ничего править не надо - все нужные лигатуры присутствуют. В частности, в шрифте есть два дефиса - (comment hyphen), под номером 55 и 177 (в этом файле все числа приводятся в восьмеричном коде). Лигатура знака дефиса с самим собой (LIG O 55 O 25) даёт символ с номером 25, т.е. endash. Можно проверить по файлу t2a.enc, что он занимает 21 позицию в кодировке, или же найти его в таблице символов в том же vpl файле, но несколько дальше:
(CHARACTER O 25 (comment endash) 
   (CHARWD R 340) 
   (CHARHT R 272) 
   )
Соответственно для endash определена лигатура c дефисом (LIG O 55 O 26), что даёт emdash - символ с порядковым номером 26. Точно также определены лигатуры одиночных кавычек в правые и левые двойные кавычки. Чтобы добавить лапки-guillemots (для шрифта Quake это особого смысла не имеет, поскольку он не содержит символов “больше-меньше”, из которых строятся guillemots), добавим в таблицу лигатур сразу же после команды LIGTABLE ещё пару определений:
   (LABEL O 74) (comment less) 
   (LIG O 74 O 276) 
   (STOP) 
   (LABEL O 76) (comment greater) 
   (LIG O 76 O 277) 
   (STOP)
(т.е. лигатуры знаков больше и меньше самих с собой дают символы с порядковыми номерами 276 и 277, которые как раз и являются символами guillemotsleft и guillemotsright соответственно).
Как бы там ни было, в итоге с помощью команды:
vptovf quake.vpl quake.vf quake.tfm
из vpl файла можно сгенерировать улучшенный вариант tfm файла, а также ещё один файл с расширением vf. Вы будете смеяться, но это тоже шрифт, который используется при отображении dvi документов с помощью специализированных программ (xdvi, dvitk). На самом деле, можно обойтись и без vf-файлов, поскольку сейчас все эти просмотрщики довольно тесно интегрированны с ghostscript и используют вызовы ghostscript для генерирования растрового изображения из нужного шрифта. Решение, которое приводится в данном тексте, как раз позволяет выполнять такие преобразования на лету. Это занимает немного больше времени, но в принципе, заметных неудобств не создает. Так что в данном случае vf шрифты - это побочный продукт, который вы по своему усмотрению можете либо установить в каталог texmf, а можете отправить в /dev/null (я предпочитаю второй вариант).
Расммотрим теперь TrueType шрифты. С ними ситуация хуже. Поскольку стандарт Adobe на true-type шрифты не распространяется, то кодировка символов в ttf шрифте может отличаться от стандартной адобовской и в основном проблемы возникают именно с тем, что в шрифте не удаётся найти глиф с именем (к примеру) /afii10017, а большая русская буква А именуется как Agrave. Поэтому прежде чем начать встраивать ttf шрифт в latex рекомендуется вначале просмотреть его с помощью ghostscript чтобы понять какой способ наименования глифов выбрал автор при создании шрифта. Проще всего это сделать добавив в ghostscript’овский Fontmap.GS файл строчку вида:
/Test-Font (/path/to/some/font.ttf);
(prfont.ps) runlibfile 
/Test-Font DoFont
В результате в ghostviewer’e вы увидите таблицу со всеми глифами содержащимися в шрифте вместе с их адобовскими названиями.
Способов кодирования символов может быть три (the good, the bad and the ugly):
Последние два случая лечению, тем не менее, поддаются.
Начнём с самого простого случая. В первую очередь вам нужно извлечь метрику шрифта из ttf файла (напомню, что в отличии от type1 шрифтов, где метрика и глифы хранятся в разных файлах, truetype шрифты cостоят из одного файла). Для этого воспользуемся командой ttf2afm из пакета ghostscript:
ttf2afm -e t2a.enc -o dscoptic.afm dscoptic.ttf
Единственная не очевидная опция - это -e t2a которая указывает, что в dscoptic.afm файл будут помещена информация только о символах содержащихся в файле t2a.enc. Далее следуем уже известным путём:
afm2tfm dscoptic.afm -T t2a.enc 
dscoptic DSCoptic " T2AEncoding ReEncodeFont " < t2a.enc
и добавляем эту строчку в файл myfonts.map так же как и раньше, опять же дописывая имя шрифта:
dscoptic DSCoptic " T2AEncoding ReEncodeFont " < dscoptic.ttf < t2a.enc
DSCoptic - это вариант 1, шрифт закодированный согласно адобовскому стандарту. Вариант 2 - шрифт Надежда, в котором латинская буква /H именуется как /FL0048h. Так что, если вы попытаетесь конвертировать его аналогично случаю приведённому выше, то большой латинской буквы H в текстах вы не увидите. Лечится это подкручиванием кодировки. Копируете файл t2a.enc в файл t2a_nade.enc и в последнем вместо строчки /H вставляете /FL0048h. После чего конвертируете файл nade.ttf
afm2tfm nade.afm -T t2a_nade.enc 
echo ’nade Nadejda-Bold " T2AAdobeEncoding ReEncodeFont" < nade.ttf < nade.enc ’ >> myfonts.map
Шрифт Stonhenge - это третий случай. В принципе можно исправить кодировку в нем точно также как и в шрифте Надежда (исправлений вам, правда, придётся вносить гораздо больше), но можно просто попытаться найти кодировку, с помощью которой авторы шрифта делали подстановку символов. Для шрифта Stonehenge эта кодировка содержится в файле 8r.enc (TeXBase1Encoding), который входит в состав tetex.
ttf2afm -у 8r.enc -o stone.afm stone.ttf 
afm2tfm stone.afm -T 8r.enc 
echo ’stone Stonehenge " TeXBase1Encoding ReEncodeFont" < stone.ttf < 8r.enc ’ >> myfonts.map
Разумеется остаётся вариант поправить кодировку внутри шрифта с помощью программы fontforge [7] и привести кривой шрифт к варианту 1. Возможно с непривычки это будет более утомительно, но результат получается более прямым путём.
Простой пример. В данном примере переопределяются стили для roman, sans-serif и typewriter текста. Четвёртый шрифт определяется in-place и используется разово.
\documentclass[a4]{article} 
\usepackage[koi8-r]{inputenc} 
\usepackage[russian]{babel} 
\renewcommand{rmdefault}{stone} 
\renewcommand{sfdefault}{nade} 
\renewcommand{ttdefault}{dscoptic} 
\title{Использование type1 и tt шрифтов в LaTeX.} 
\author{Проект Vedi} 
\sloppy 
\begin{document} 
\maketitle 
Дурацкий тест включения true-type и type1 шрифтов в LaTeX. \sf Внимание! 
\tt Специалистам в полиграфии и издательском деле просьба этот текст не компилировать и не смотреть! 
Это может повлечь за собой \fontScary quake at20pt \Scary обострение 
профессиональных заболеваний - аллергию, тошноту и рвоту ! 
\end{document}
В скомпилированном командой pdflatex test.tex (запускаем её в каталоге latex-fonts) документе, outlined окажется только шрифт Scary (т.е. QuakeCyr), вместо остальных tetex подставит растеризованные шрифты. Если вы посмотрите на ошибки, которые выдаст tetex, то вы заметите, что он не находит шрифты T2A/dscoptic/m/n и др. и честно сообщает, что вместо них он использует шрифты по-умолчанию.
Ошибка связана с тем обстоятельством, что LaTeX является WYSIWYM системой и кое-что пытается проделать за вас. А именно, в качестве /Scary фонта вы ему однозначно дали понять, что нужно использовать шрифт QuakeCyr, а с помощью \renewcommand{\rmdefault... вы ему указали, что для надписей, выполняемых roman шрифтами, он должен использовать семейство шрифтов stone, при этом самостоятельно (точнее в соответствии с используемым стилем) подбирая какой текст выделять italic-ом, bold-ом или normal. Таким образом нам понадобятся ещё файлы с описаниями семейств шрифтов, т.е. fd-файлы. Писать их придётся вручную, но все они достаточно однотипны.
t2adscoptic.fd 
 
\ProvidesFile{t2adscoptic.fd}[DSCoptic Font] 
\DeclareFontFamily{T2A}{dscoptic}{} 
\DeclareFontShape{T2A}{dscoptic}{m}{n}{ <-> dscoptic}{} 
 
t2anade.fd 
 
\ProvidesFile{t2anade.fd}[Nadejda Font] 
\DeclareFontFamily{T2A}{nade}{} 
\DeclareFontShape{T2A}{nade}{m}{n}{ <-> nade}{} 
 
t2astone.fd 
 
\ProvidesFile{t2astone.fd}[Stonehenge Font] 
\DeclareFontFamily{T2A}{stone}{} 
\DeclareFontShape{T2A}{stone}{m}{n}{ <-> stone}{}
Ну и для полноты картины еще файл для QuakeCyr:
t2aquake.fd 
 
\ProvidesFile{t2aquake.fd}[QuakeCyr Font] 
\DeclareFontFamily{T2A}{quake}{} 
\DeclareFontShape{T2A}{quake}{m}{n}{ <-> quake}{}
Т.е. мы в данном случае определили 4 семейства в кодировке T2A , каждое из которых содержит по одному medium normal (обычный прямой) шрифту. После того как все 4 fd-файла окажутся в директории latex-fonts, осталось только перезапустить команду pdflatex test-koi.tex.
В итоге, в сгенерированном pdf файле все шрифты окажутся или Type1 или TrueType, Embedded в том и другом случае - в чем можно убедиться командой :
$pdffonts test.pdf 
name type emb sub uni object ID 
------------------------------------ ------------ --- --- --- --------- 
Stonehenge TrueType yes no no 6 0 
Nadejda-Bold TrueType yes no no 9 0 
DSCoptic TrueType yes no no 12 0 
OXCCSV+QuakeCyr Type 1 yes yes no 15 0
Если результат тестирования вас удовлетворил, то можно заняться раскладыванием шрифтов и конфигурационных файлов по их привычным местам.
cp *.afm /usr/share/texmf/fonts/afm/public/local 
cp *.pfa *.pfb  /usr/share/texmf/fonts/type1/public/local 
cp *.ttf /usr/share/texmf/fonts/truetype/public/local 
cp  *.tfm  /usr/share/texmf/fonts/tfm/public/local 
cp *.fd /usr/share/texmf/tex/latex/local 
cp *.enc /usr/share/texmf/dvips/base 
cat ./myfonts.map >> /usr/share/texmf/dvips/config/pdftex.map
Проверьте также, что файл pdftex.map указан в конфигурационном файле pdflatex’а /usr/share/texmf/pdftex/config/pdftex.cfg. Если нет допишите в него строчку map +pdftex.map (или map pdftex.map). Теперь остаётся только синхронизировать базу данных tetex (команда mktexlsr) и шрифты готовы к использованию.
Предыдущие советы работают в tetex-2.0. В следующих версиях с одной стороны поменялось расположение шрифтовых каталогов tetex, а с другой, произошло их разделение на общесистемные и пользовательские. Первые хранятся в директориях /usr/share/texmf-config /usr/share/texmf-var, а вторые в домашнем каталоге пользователя ${HOME}/.texmf-var, ${HOME}/.texmf-config. Для поддержания какой-то видимости порядка в этом слу
Latex Strings
Layered Latex
Dreamline Baby Latex
Latex High Boots
Latex Real
T2a Latex | ANTI-Emo ПозерСССС | ВКонтакте
Type1 и truetype шрифты в LaTeX.
Как оформлять список литературы в LaTeX
LaTeX: указание межстрочного интервала | proft.me
Кириллические шрифты в LaTeX - dkhramov.dp.ua
TeX, LaTeX, MiKTeX русификация
3D графики в LaTeX пакетом pgfplots в стиле MathCAD
Кириллица в формулах - dkhramov.dp.ua
LaTeX/Основы языка TeX — Викиучебник
T2a Latex


Report Page