Лисаков и макромир

Шрифты в Latex

Запись была существенно дополнена и переделана 21 мая 2018 года. Добавлены подробности, примеры в картинках и .pdf.

Иногда встречаются требования заполнять документ конкретным шрифтом. Есть несколько методов, позволяющих использовать не входящие в стандартную поставку \(\LaTeX\) шрифты с кириллицей, например, Verdana, Courier, Georgia, Ubuntu Mono. Сначала немного терминологии, затем описаны методы получения разных шрифтов в документе. Больше теории (и лучше) на en.wiki­books.org.

Семейства шрифтов (font families)

В \(\LaTeX\) определены семейства шрифтов:

\rmfamily Roman family — шрифты с засечками (serif);

\sffamily Sans serif family — шрифты без засечек (sans-serif);

\ttfamily Typewriter family — моноширинные шрифты (они же monospace), где все символы имеют одинаковую ширину.

Стандартное значение \familydefault\rmfamily, то есть текст, набранный без каких-либо уточнений в документе, будет напечатан шрифтом, который установлен для \rmfamily (см. ниже). Это можно изменить в преамбуле, например:

\renewcommand{\familydefault}{\sffamily}

Начертания шрифтов (font styles)

У шрифтов может быть несколько начертаний. Не все шрифты имеют все возможные начертания. Если у шрифта есть жирный и есть курсив, то жирного курсива может и не быть. Также обратите внимание, что курсив и наклонный шрифт — разные вещи. Двубуквенные команды (\rm, \it и т.д.) считаются устаревшими, их использование не рекомендуется. Не следует путать \emph с \textit, хоть в большинстве ситуаций они и дают одинаковый результат.

Пример:

font-styles.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}

\begin{document}
\noindent
\textnormal{(Default) Основной шрифт документа}\\
\textrm{(Roman) С засечками}\\
\textit{(Italic) Курсив — не наклонный!}\\
\textsl{(Slanted) Наклонный — не курсив!}\\
\textbf{(Bold) Жирный}\\
\textbf{\textit{(Bold italic) Жирный курсив}}\\
\textbf{\textsl{(Bold slanted) Жирный наклонный}}\\
\texttt{(Monospace) Моноширинный}\\
\textsc{(Small caps) «Малые заглавные»}\\
\textbf{\textsc{(Bold Small caps) Жирный «Малые заглавные»}}
\end{document}

Результат (font-styles.pdf):

Здесь и далее жмите «f» после щелчка на картинку, чтобы посмотреть размер 100%.

Стандартные шрифты в latex

Вот список доступных по умолчанию шрифтов в LaTeX, которые должно быть просто использовать:

\rmfamily — с засечками

Аббревиатура Название шрифта
cmrComputer Modern Roman (default)
lmr Latin Modern Roman
pbk Bookman
bch Charter
pnc New Century Schoolbook
ppl Palatino
ptm Times

\sffamily — без засечек

Аббревиатура Название шрифта
cmss Computer Modern Sans Serif (default)
lmss Latin Modern Sans Serif
pag Avant Garde
phv Helvetica

\ttfamily — моноширинные

Моноширинные шрифты (monospace) также иногда называют Typewriter Fonts.

Аббревиатура Название шрифта
cmtt Computer Modern Typewriter (default)
lmtt Latin Modern
pcr Courier

Стандартные шрифты по умолчанию

Взглянём на стандартные шрифты по умолчанию.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass[12pt]{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}

\begin{document}
Просто текст будет семейства \textbackslash{rmfamily},
шрифт Computer Modern Roman.

{\rmfamily Это тоже шрифт семейства \textbackslash{}rmfamily.}

{\sffamily Это шрифт семейства \textbackslash{}sffamily,
шрифт Computer Modern Sans Serif.}

{\ttfamily Это шрифт семейства \textbackslash{}ttfamily,
шрифт Computer Modern Typewriter.}
\end{document}

Такой код даст следующий результат (default-fonts.pdf):


Смена между стандартными шрифтами

Менять шрифты из стандартных можно командой \renewcommand{семейство}{аббревиатура шрифта}. Например, поставленные в преамбулу команды

1
2
3
\renewcommand{\rmdefault}{cmr}
\renewcommand{\sfdefault}{cmss}
\renewcommand{\ttdefault}{cmtt}

установят стандартные шрифты cmr для \rmfamily, cmss для \sffamily и cmtt для \ttfamily. Расшифровку аббревиатур см. в таблицах выше. Приведённые команды никак не изменят внешний вид документа, потому что в них указаны стандартные значения. Если же добавить в преамбулу к последнему примеру

1
2
\renewcommand{\rmdefault}{cmss}
\renewcommand{\ttdefault}{cmss}

то весь текст будет написан одним и тем же шрифтом Computer Sans Serif. \sfdefault можно не указывать, потому что Computer Sans Serif — и так его стандартное значение. Получается, что для семейства шрифтов \rmfamily можно использовать любой шрифт — необязательно с засечками.

Любой шрифт в xelatex/lualatex

Что делать, если нам нужен какой-то другой шрифт, не входящий в стандартную поставку LaTeX?

Быстрее всего будет использование XeLaTeX или LuaLaTeX вместо LaTeX. Меня это фраза сначала напугала, но потом оказалось, что у меня в Ubuntu 14.10 XeLaTeX поставился вместе с LaTeX. Если команды xelatex и lualatex Вашей системе неизвестны, попробуйте поставить пакет texlive-full. В Debian/Ubuntu, наверное, это можно сделать так: sudo apt-get install texlive-full.

Такой код позволят задавать русские шрифты при компиляции xelatex или lualatex (LaTeX такое не скомпилирует):

xelatex-lualatex.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Georgia} % задаёт \rmfamily, основной шрифт документа
\setsansfont{Verdana} % задаёт \sffamily, шрифт без засечек
\setmonofont{Lucida Console} % задаёт \ttfamily, моношрифт

\begin{document}
Просто текст будет таким, каким указан \textbackslash{setmainfont}.
В нашем случае это Georgia.

\textrm{Это тоже Georgia. Это шрифт семейства \textbackslash{rmfamily},
оно же Roman font или serif font, то есть шрифт с засечками.}

\textsf{Это шрифт семейства \textbackslash{sffamily}, оно же sans serif
или шрифт без засечек (sans serif в переводе с французского означает
«без засечек»). В нашем случае это шрифт Verdana.}

\texttt{Это шрифт семейства \textbackslash{ttfamily}, оно же typewriter
или monospace. В нашем случае это шрифт Lucida Console. Все буквы и
символы здесь занимают одинаковую ширину.}
\end{document}

Результат будет таким (xelua.pdf):


Обратите внимание, что если не уточнять, каким семейством печатать шрифт, по умолчанию будет использоваться шрифт, установленный для семейства \rmfamily, то есть то, что было указано в преамбуле командой \setmainfont.

Любой шрифт в latex/pdflatex

А что, если нужно использовать именно LaTeX, а не XeLaTeX, и конкретный шрифт, поддерживающий кириллицу? Перечислю некоторые варианты.

Пакет tempora

Пакет, подключающий шрифт, похожий на Times New Roman.

tempora.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage{tempora}

\begin{document}
\section{Пакет tempora}
После подключения пакета \texttt{tempora} стандартным шрифтом в
документе становится некий шрифт, похожий на Times New Roman.
Например, буква «Э» немного отличается.

1234567890 км.

$1234567890~\textrm{км}.$ В матрежиме цифры остаются от шрифта
Computer Modern. Можно «вылечить», например, костылём:

$\textrm{1234567890}~\textrm{км}.$
\end{document}

Результат (tempora.pdf):


Пакет winfonts

Пакет разработан для использования имеющихся в Windows шрифтов с помощью MiKTeX & Windows. Инструкция по установке и настройке есть в README. Доступны шрифты Arial, Franklin, Gothic, Tahoma, Comic Sans, Georgia, Times, Courier, New, Palatino, Linotype, Verdana, Wingding, Webdings.

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage{winfonts}
  \renewcommand{\rmdefault}{georgia}
  \renewcommand{\sfdefault}{verdana}
  \renewcommand{\ttdefault}{courier-ttf}

Пакет PSCyr

Установка PSCyr

Здесь я немного сократил процесс установки, описанный повсеместно, проделав необходимые операции с файлами в архиве заранее.

  1. Скачивайте архив pscyr.zip и разархивируйте:

    user $
    unzip pscyr.zip
  2. Выясните, где лежит каталог texmf, и скопируйте туда содержимое архива:

    user $
    user $
    kpsewhich -expand-var='$TEXMFLOCAL'
    sudo cp -R pscyr/* $TEXMFLOCAL
  3. Расскажите латеху о шрифтах, которые он отныне сможет использовать:

    user $
    user $
    user $
    sudo texhash
    updmap --enable Map=pscyr.map
    sudo mktexlsr

Использование pscyr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\usepackage{pscyr}
\renewcommand{\rmdefault}{ftm}

\begin{document}
\section{Начертания для Times New Roman из пакета pscyr}
Съешь ещё этих французских булок да выпей чаю ж!\\
\textrm{(Roman) С засечками}\\
\textit{(Italic) Курсив — не наклонный!}\\
\textsl{(Slanted) Наклонный — не курсив!}\\
\textbf{(Bold) Жирный}\\
\textbf{\textit{(Bold italic) Жирный курсив}}\\
\textbf{\textsl{(Bold slanted) Жирный наклонный}}\\
\texttt{(Monospace) Моноширинный}\\
\textsc{(Small caps) «Малые заглавные»}\\
\textbf{\textsc{(Bold Small caps) Жирный «Малые заглавные»}}

\section{Переключение шрифтов внутри документа}
\usefont{T2A}{fac}{m}{n} Съешь ещё этих французских булок да выпей чаю ж!\\
\usefont{T2A}{faq}{m}{it} Съешь ещё этих французских булок да выпей чаю ж!\\
\usefont{T2A}{ftm}{b}{sl} Съешь ещё этих французских булок да выпей чаю ж!\\
\usefont{T2A}{fco}{m}{sc} Съешь ещё этих французских булок да выпей чаю ж!\\
\usefont{T2A}{ftm}{m}{n} Съешь ещё этих французских булок да выпей чаю ж!
% fac, faq, ftm — название шрифта в pscyr
% m,b — medium, bold (нормальный или жирный)
% n,it,sl,sc — normal, italic, slanted, small caps — тип шрифта
\end{document}

Код ftm соответствует шрифту Times New Roman. Компилировать документ можно с помощью latex или pdflatex. Поиск по файлу работает. Результат (pscyr.pdf):


Коды шрифтов PSCyr

Нашёл у lithiumdenis.

Код шрифта Название шрифта
fac Academy
fad Advertisement
faq AntiquaPSCyr
fco College
fcp CooperPSCyr
fer ERKurierPSCyr
fha HandbookPSCyr
fjn JournalPSCyr
flz Lazurski
fma MagazinePSCyr
fsv SouvenirPSCyr
ftx TextbookPSCyr
far ArialMT
fcr CourierNewPSMT
ftm TimesNewRomanPSMT

Замечания

Пакет PSCyr, установка которого описана в этой записи, не обновляется уже почти 15 лет. Было любопытно бы разобраться с юридическим статусом этих шрифтов. Официальное место хранения пакета тут:
ftp://scon155.phys.msu.su/pub/russian/psfonts/.

Если пакет не заработал, попробуйте выполнить ещё updmap-sys.

Использование любого .ttf файла

Эта инструкция основана на ныне недоступной записи.

  1. Скачайте ttf файлы всех версий шрифта (жирный, наклонный, жирный наклонный, нормальный). Для примера рассмотрим шрифт Times. Файлы я для удобства переименовал в times.rrf (нормальный), timesi.ttf (наклонный), timesbd.rrf (жирный), timesbi.ttf (наклонный жирный). Times я скачал тут.

  2. Положите все .ttf файлы к .tex файлу и выполните:

    user $
    user $
    user $
    user $
    user $
    user $
    user $
    user $
    ttf2afm -e t2a.enc -o times.afm times.ttf
    ttf2afm -e t2a.enc -o timesi.afm timesi.ttf
    ttf2afm -e t2a.enc -o timesbd.afm timesbd.ttf
    ttf2afm -e t2a.enc -o timesbi.afm timesbi.ttf
    afm2tfm times.afm -T t2a.enc >> myfonts.map    
    afm2tfm timesi.afm -T t2a.enc >> myfonts.map
    afm2tfm timesbi.afm -T t2a.enc >> myfonts.map
    afm2tfm timesbd.afm -T t2a.enc >> myfonts.map
  3. В myfonts.map добавьте название .ttf файла шрифта перед <t2a.enc, у меня получилось так:

    myfonts.map
    1
    2
    3
    4
    times TimesNewRomanPSMT " T2AEncoding ReEncodeFont " <times.ttf <t2a.enc
    timesi TimesNewRomanPS-ItalicMT " T2AEncoding ReEncodeFont " <timesi.ttf <t2a.enc
    timesbi TimesNewRomanPS-BoldItalicMT " T2AEncoding ReEncodeFont " <timesbi.ttf <t2a.enc
    timesbd TimesNewRomanPS-BoldMT " T2AEncoding ReEncodeFont " <timesbd.ttf <t2a.enc
  4. Создайте файл ttfonts.map с такими строками:

    ttfonts.map
    1
    2
    3
    4
    times times.ttf Encoding=t2a.enc
    timesbd timesbd.ttf Encoding=t2a.enc
    timesi timesi.ttf Encoding=t2a.enc
    timesbi timesbi.ttf Encoding=t2a.enc
  5. Создайте файлы с названием t2a<имяшрифта>.fd, в нашем случае t2atimes.fd. Поместите туда информацию о шрифте:

    t2atimes.fd
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    \ProvidesFile{t2atimes.fd}[Times Font]
    \DeclareFontFamily{T2A}{times}{}

    \DeclareFontShape{T2A}{times}{b}{n}{<->timesbd}{}
    %\DeclareFontShape{T2A}{times}{b}{sl}{<-> timesbdo}{}
    \DeclareFontShape{T2A}{times}{b}{it}{<-> timesbi}{}

    \DeclareFontShape{T2A}{times}{m}{n}{<-> times}{}
    %\DeclareFontShape{T2A}{times}{m}{sl}{<-> timeso}{}
    \DeclareFontShape{T2A}{times}{m}{it}{<-> timesi}{}

    \DeclareFontShape{T2A}{times}{bx}{n}{<->ssub * times/b/n}{}
    %\DeclareFontShape{T2A}{times}{bx}{sl}{<->ssub * times/b/sl}{}
    \DeclareFontShape{T2A}{times}{bx}{it}{<->ssub * times/b/it}{}

    Закомментированы здесь строки с наклонным (slanted) шрифтом, так как этих файлов у меня не было.

  6. Чтобы в pdf работал поиск и можно было скопировать выделенный текст, можно подключить пакет cmap.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    \documentclass[a4paper,12pt]{article}
    \usepackage[T2A]{fontenc} % и без этого работает?
    \usepackage[utf8]{inputenc}
    \usepackage[russian]{babel}
    \usepackage{cmap} % для работы поиска кириллицы в pdf

    \renewcommand{\rmdefault}{times}

    \begin{document}

    \section{Проверка букв}
    Эй, жлоб! Где туз? Прячь юных съёмщиц в шкаф!\\
    How vexingly quick daft zebras jump!

    \section{Проверка начертаний}
    \textbf{Жирный шрифт. Bold font.}\\
    \textit{Курсив. Italic font.}\\
    \textbf{\textit{Жирный курсив. Bold italic font.}}\\
    1234567890 Дж\\
    $1234567890~\textrm{Дж}$ — в матрежиме шрифт цифр иной (Computer Modern).

    \section{Способы переключения}
    \usefont{T2A}{times}{m}{it}
    Курсив.

    Всё ещё курсив.

    \section*{Ненужный заголовок}
    Даже после section остаётся курсив.

    \usefont{T2A}{times}{m}{n}
    Нормальное начертание.

    {\font\Times times at12pt \Times Шрифт Times размера 12pt.}
    {\font\Times times at20pt \Times Шрифт Times размера 20pt.}

    Нормальное начертание.

    \end{document}

    Результат (times-ttf.pdf):


Недостатки этого метода

У меня при скачанных по ссылке выше шрифтах проявился такой баг: при компиляции latex + dvips + ps2pdf или pdflatex буква «ё» отображается корректно, тогда как при компиляции latex + dvipdfmx буква «ё» заменяется на «j».

Источники

http://www.tex.raleigh.ru/doku.php/faq/ttffonts

http://www.radamir.com/tex/ttf-tex.htm

http://linuxportal.ru/entry.php/P1003_0_3_0/

http://en.wikibooks.org/wiki/LaTeX/Fonts (англ.)

форум latex-community (англ.)

Font selection in LaTeX: FAQ (англ.)

Если что-то не заработало, пожалуйста, сообщите об этом.