Стандартные шрифты LaTeX

Эта статья содержит краткое введение в стандартные текстовые шрифты, распространяемые вместе с LaTeX. Затем он охватывает стандартную поддержку LaTeX для кодировок ввода и шрифтов. Статья завершается описанием пакета для отслеживания обработки шрифтов LaTeX и другого пакета для отображения диаграмм глифов.

4.1. Компьютерный современный римский

Семейство шрифтов под названием Computer Modern было разработано Дональдом Кнутом вместе с TeX. До начала 1990-х годов только эти шрифты в основном можно было использовать с TeX и, следовательно, с LaTeX. Каждый из этих шрифтов содержит только 128 глифов, поэтому они не могут включать символы с диакритическими знаками в качестве отдельных глифов. Следовательно, использование этих шрифтов означает, что символы с диакритическими знаками должны создаваться с помощью примитива TeX \accent, что, в свою очередь, означает, что автоматическая расстановка переносов в словах с диакритическими символами невозможна. Хотя это ограничение приемлемо для документов на английском языке, оно является очевидным недостатком для документов на других языках.

Семейства компьютерных современных шрифтов

Эти недостатки вызвали большую обеспокоенность пользователей TeX в Европе и в конечном итоге привели к повторной реализации TeX в 1989 году для поддержки 8-битных символов внутри и снаружи. Стандартная 8-битная кодировка текстовых шрифтов («Т1») была разработана в 1990 году. Она содержит множество диакритических символов и позволяет осуществлять набор текста на более чем 30 языках на основе латиницы. Затем были переопределены семейства шрифтов Computer Modern и разработаны дополнительные символы, чтобы полученные шрифты полностью соответствовали этой схеме кодировки.

4.2. Выбор входной кодировки: пакет inputenc

Если вы можете вводить символы с диакритическими знаками либо одним нажатием клавиши, либо каким-либо другим способом ввода (например, нажав ``` ````, а затем ``a`, чтобы получить «a-grave»), и ваш компьютер правильно отображает их в редактор…

Текст на французском языке правильно отображается в текстовом редакторе

… тогда в идеале вам следует использовать такой текст непосредственно с LaTeX вместо того, чтобы набирать \`a, \^e и т. д.

Для таких языков, как французский и немецкий, последний подход возможен. Однако для таких языков, как русский и греческий, необходима возможность прямого ввода, поскольку почти каждый символ в этих языках имеет имя команды в качестве внутренней формы LaTeX. Например, русское определение \reftextafter по умолчанию содержит следующий текст (что означает «на следующей странице»):

1\cyrn\cyra\ \cyrs\cyrl\cyre\cyrd\cyru\cyryu\cyrshch\cyre\cyrishrt
2\ \cyrs\cyrt\cyrr\cyra\cyrn\cyri\cyrc\cyre

Вряд ли кто-то захочет регулярно печатать подобные вещи. Тем не менее, его преимущество заключается в универсальной переносимости, поэтому его можно правильно интерпретировать в любой установке LaTeX. С другой стороны, набрав

“На следующей странице” на русском

на соответствующей клавиатуре явно предпочтительнее, если можно заставить LaTeX понимать этот ввод. Проблема в том, что в файле хранятся не символы, которые мы видим в приведенной выше последовательности, а октеты, которые представляют символы. В разных обстоятельствах (при использовании разных кодировок) одни и те же октеты могут представлять разные символы.

Пока все происходит на одном компьютере и все программы интерпретируют октеты в файлах одинаково, обычно все в порядке. Если да, то имеет смысл активировать механизм автоматического перевода, встроенный в некоторые недавние реализации TeX. Но когда файл, созданный в такой среде, отправляется на другой компьютер, обработка, скорее всего, завершится неудачей или, что еще хуже, может показаться успешной, но на самом деле она приведет к неправильным результатам из-за отображения неправильных символов. Пакет inputenc был создан для решения этой проблемы. Его основная цель — сообщить LaTeX о кодировке, используемой в документе или в части документа. Это делается путем загрузки пакета с указанием имени кодировки в качестве опции. Например:

1\usepackage[cp1252]{inputenc} % Windows 1252 (Western Europe) code page

С этого момента LaTeX знает, как интерпретировать октеты в оставшейся части документа при любой установке, независимо от кодировки, используемой для других целей на этом компьютере.

Типичный пример показан ниже. Это небольшой текст, написанный в популярной в России кодировке «koi8-r». Исходный код показывает, как текст выглядит на компьютере с использованием кодировки Latin 1 (например, в Германии). Вывод показывает, что LaTeX по-прежнему мог правильно интерпретировать текст, поскольку ему было указано, какая входная кодировка использовалась.

Русский текст в немецкой кодировке: исходный код

Русский текст в немецкой кодировке: вывод

Список кодировок, поддерживаемых в настоящее время inputenc, приведен ниже. Интерфейс хорошо документирован, и можно легко добавить поддержку новых кодировок. Поэтому стоит обратиться к документации пакета inputenc, если кодировка, используемая вашим компьютером, здесь не указана. Вы также можете поискать в Интернете файлы кодировки inputenc, созданные другими авторами. Например, кодировки, относящиеся к кириллице, распространяются вместе с другими пакетами поддержки шрифтов для кириллицы.

Стандарт ISO-8859 определяет ряд важных однобайтовых кодировок. Кодировки, относящиеся к латинице, поддерживаются inputenc. Для операционной системы Windows Microsoft определила ряд однобайтовых кодировок. Кроме того, доступны некоторые кодировки, определенные другими поставщиками компьютеров.

Большинство установок TeX по умолчанию принимают 8-битные символы. Тем не менее, без дальнейших корректировок, подобных тем, которые выполняются с помощью inpuenc, результаты могут быть непредсказуемыми: некоторые символы могут исчезнуть, или вы можете получить любой символ, присутствующий в текущем шрифте в указанном октете, который может быть, а может и не быть. желаемый глиф. Такое поведение долгое время было значением по умолчанию, поэтому оно не было изменено в LaTeX2e, поскольку некоторые люди полагаются на него. Однако, чтобы гарантировать возможность обнаружения таких ошибок, inputenc предлагает опцию ascii, которая делает любой символ за пределами диапазона 32–126 недопустимым.

1\inputencoding{encoding}

Первоначально пакет inputenc был разработан для указания кодировки, используемой для документа в целом — отсюда и использование опций в преамбуле. Однако можно изменить кодировку в середине документа с помощью команды \inputencoding. Эта команда принимает имя кодировки в качестве аргумента.

Когда был разработан inputenc, большинство установок LaTeX было на компьютерах, которые использовали однобайтовые кодировки, подобные тем, которые обсуждаются в этом разделе. Однако сегодня популярна другая кодировка, поскольку системы поддерживают Unicode: UTF8. Эта кодировка переменной длины представляет символы Юникода в диапазоне от одного до четырех октетов. Поддержка кодирования была добавлена ​​в inputenc с помощью опции utf8. Технически он не обеспечивает полную реализацию UTF8. Сопоставляются только символы Юникода, которые имеют некоторое представление в стандартных шрифтах LaTeX (т. е. в основном наборы символов латиницы и кириллицы): все остальные приведут к соответствующему сообщению об ошибке. Кроме того, не поддерживаются комбинированные символы Юникода, хотя на практике это упущение не должно быть проблемой.

1\usepackage[utf8]{inputenc}
2\usepackage{textcomp} % for Latin interpretation
3-----------------------------------------------
4German umlauts in UTF-8: ^^c3^^a4^^c3^^b6^^c3^^bc
5\par\inputencoding{latin1}% switch to Latin 1
6But interpreted as Latin 1: ^^c3^^a4^^c3^^b6^^c3^^bc

UTF8 поддерживается пакетом inputenc

В UTF8 символы ASCII представляют собой сами себя, а большинство символов латинского алфавита представлены двумя байтами. В исходном коде примера двухбайтовые представления немецких умлаутов в UTF8 показаны в шестнадцатеричной системе счисления TeX, то есть каждому октету предшествует ^^. В редакторе, который не поддерживает UTF8, он, вероятно, увидит их похожими на вывод, который получается, когда они интерпретируются как символы Latin 1.

Пакет с более полной поддержкой UTF8 (включая поддержку корейских, китайских и японских символов), хотя, следовательно, и более сложный в настройке, — это пакет ucs, написанный Домиником Унру. Вы можете попробовать, если решение inputenc не соответствует вашим потребностям.

4.3. Выбор кодировки шрифтов с помощью пакета Fontenc.

Чтобы включить кодировку текстового шрифта для использования с LaTeX, кодировку необходимо загрузить в преамбулу или класс документа. Точнее, должны быть загружены определения для доступа к глифам в шрифтах с определенной кодировкой. Канонический способ сделать это — через пакет Fontenc, который принимает список кодировок шрифтов, разделенных запятыми, в качестве опции пакета. Последняя из этих кодировок автоматически становится кодировкой документа по умолчанию. Если загружены кодировки кириллицы, список команд, на которые влияют \MakeUppercase и \MakeLowercase, автоматически расширяется. Например,

1\usepackage[T2A,T1]{fontenc}

загрузит все необходимые определения для кодировок кириллицы «T2A» и «T1» и установит последнюю в качестве кодировки документа по умолчанию.

В отличие от обычного поведения пакета, этот пакет можно загружать несколько раз с разными параметрами команды \usepackage. Это необходимо для того, чтобы класс документа мог загружать определенный набор кодировок, а пользователь мог загружать еще больше кодировок в преамбулу. Загрузка кодировок более одного раза выполняется без побочных эффектов, за исключением потенциального изменения кодировки шрифта документа по умолчанию.

Если в документе используются пакеты языковой поддержки (например, поставляемые с системой babel), часто бывает так, что необходимые кодировки шрифтов уже загружены пакетом поддержки.

4.4. Как отследить выбор шрифта с помощью пакета «tracefnt»

Для обнаружения проблем в системе выбора шрифтов можно использовать пакет tracefnt. Он поддерживает несколько опций, позволяющих настроить объем информации, отображаемой NFSS на экране и в файле стенограммы.

4.5. Как отобразить таблицы и образцы шрифтов с помощью nfssfont.tex

Файл с именем nfssfont.tex можно использовать для тестирования новых шрифтов, создания таблиц шрифтов, отображающих все символы, и выполнения других операций, связанных со шрифтами. Вы можете найти этот файл в любом дистрибутиве LaTeX. Когда вы запустите этот файл через LaTeX, вам будет предложено ввести имя тестируемого шрифта. Ответом может быть либо имя внешнего шрифта без расширения, например cmr10 (Computer Modern Roman 10pt), если оно вам известно, либо пустое имя шрифта. В последнем случае вам будет предложено указать спецификацию шрифта NFSS: имя кодировки (по умолчанию «T1»), имя семейства шрифтов (по умолчанию «cmr»), серию шрифта (по умолчанию «m»), форму шрифта ( по умолчанию n) и размер шрифта (по умолчанию 10pt). Затем программа загружает внешний файл, соответствующий этой классификации.

Далее вам будет предложено ввести команду. Самым важным из них, вероятно, является \table, который создает таблицу шрифтов, подобную приведенной ниже. Команда \text также интересна, поскольку она создает более длинный образец текста. Чтобы переключиться на новый тестовый шрифт, введите \init; чтобы завершить тест, введите \bye или \stop; и чтобы узнать обо всех других доступных тестах, введите \help.

 1**********************************************
 2* NFSS font test program version <v2.2b>
 3*
 4* Follow the instructions
 5**********************************************
 6
 7Input external font name, e.g., cmr10
 8(or <enter> for NFSS classification of font):
 9
10\currfontname=cmr10
11Now type a test command (\help for help):)
12*\table
13
14*\newpage
15*\init
16Input external font name, e.g., cmr10
17(or <enter> for NFSS classification of font):
18
19\currfontname=
20*** NFSS classification ***
21
22Font encoding [T1]:
23
24\encoding=OT1
25(ot1enc.def)
26Font family [cmr]:
27
28\family=cmdh
29Font series [m]:
30
31\series=m
32Font shape [n]:
33
34\shape=n
35Font size [10pt]:
36
37\size=10
38(ot1cmdh.fd) Now type a test command (\help for help):
39*\text
40
41*\bye

Таблица шрифтов для cmr10

Пример текста для OT1/cmdh/m/n/10

There are two points to be aware of. First, the nfssfont.tex program issues an implicit \init command, so the first line of input should either contain a font name or be completely empty to indicate that an NFSS classification follows. Second, the input to \init must appear on individual lines with nothing else (not even a comment) because the line ending indicates the end of the response to a prompt like Font encoding[T1]: \encoding= that you will get.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.