Стандартні шрифти LaTeX

Ця стаття містить короткий вступ до стандартних текстових шрифтів, що поширюються разом із LaTeX. Потім він охоплює стандартну підтримку LaTeX для введення та кодування шрифтів. Стаття завершується описом пакета для відстеження обробки шрифтів LaTeX та іншого пакета для відображення діаграм гліфів.

4.1. Комп’ютер Сучасний Роман

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

Комп’ютерні сучасні сімейства шрифтів

Ці недоліки викликали велике занепокоєння у користувачів TeX у Європі і зрештою призвели до повторної реалізації TeX у 1989 році для внутрішньої та зовнішньої підтримки 8-бітних символів. Стандартне 8-розрядне кодування для текстових шрифтів (T1) було розроблено в 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. Це кодування змінної довжини представляє символи Unicode від одного до чотирьох октетів. Підтримку кодування додано до inputenc через опцію utf8. Технічно він не забезпечує повної реалізації UTF8. Відображаються лише символи Юнікоду, які мають деяке представлення у стандартних шрифтах LaTeX (тобто, переважно набори символів латиниці та кирилиці): усі інші призведуть до відповідного повідомлення про помилку. Крім того, комбіновані символи Unicode не підтримуються, хоча на практиці це конкретне упущення не повинно бути проблемою.

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, on, ймовірно, побачить їх як подібні до результату, який створюється, коли вони інтерпретуються як символи латиниці 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

Варто знати про два моменти. По-перше, програма nfssfont.tex видає неявну команду \init, тому перший рядок введення має або містити назву шрифту, або бути повністю порожнім, щоб вказати, що слідує класифікація NFSS. По-друге, вхідні дані для \init повинні з’являтися в окремих рядках без нічого (навіть коментаря), тому що закінчення рядка вказує на кінець відповіді на підказку на зразок Кодування шрифту[T1]: \encoding=, яку ви отримаєте.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.