Низькорівневий інтерфейс

На відміну від високорівневих команд шрифту, які призначені для використання в документі, команди низького рівня призначені переважно для визначення нових команд у пакетах або в преамбулі документа. Щоб найкраще використовувати такі команди, корисно зрозуміти внутрішню організацію шрифтів у схемі вибору шрифтів LaTeX (NFSS).

З одного боку, метою схеми вибору шрифтів LaTeX є забезпечення раціонального вибору шрифтів за допомогою алгоритмів, керованих принципами загальної розмітки. Для цього бажано дозволити незалежні зміни якомога більшої кількості атрибутів шрифту. З іншого боку, сімейства шрифтів у реальному житті зазвичай містять лише підмножину безлічі комбінацій атрибутів шрифтів, які можна уявити. Таким чином, дозвіл незалежних змін у занадто багатьох атрибутах призводить до надто великої кількості комбінацій, для яких немає реального зовнішнього шрифту, і потрібно замінити типовий шрифт.

Всередині LaTeX відстежує п’ять незалежних атрибутів шрифту: поточне кодування, поточне сімейство, поточна серія, поточна форма і поточний розмір. Атрибут кодування було представлено у версії 2 NFSS, коли стало зрозуміло, що підтримка кількох мов буде неможливою без підтримки схеми кодування символів незалежно від інших атрибутів шрифту.

Значення цих атрибутів визначають шрифт, який зараз використовується. LaTeX також підтримує великий набір таблиць, які використовуються для зв’язування комбінацій атрибутів із зовнішніми шрифтами (тобто файли .tfm, які містять дані, необхідні для виконання LaTeX своєї роботи). Потім вибір шрифту виконується в два кроки:

  1. Ряд атрибутів шрифту змінюється за допомогою команд низького рівня \fontencoding, \fontfamily, \fontseries, \fontshape і \fontsize.

  2. Шрифт, що відповідає цим новим параметрам атрибута, вибирається викликом команди \selectfont.

Другий крок складається з кількох дій. Спочатку LaTeX перевіряє, чи відомий системі шрифт, який відповідає бажаним налаштуванням атрибута (тобто файл .tfm уже завантажено), і якщо так, цей шрифт вибирається. В іншому випадку виконується пошук у внутрішніх таблицях, щоб знайти назву зовнішнього шрифту, пов’язану з цими налаштуваннями. Якщо така назва шрифту знайдена, відповідний файл .tfm зчитується в пам’ять, а потім шрифт вибирається для набору. Якщо назву шрифту не знайдено, LaTeX намагається знайти альтернативний шрифт, як пояснюється далі в цій статті.

5.1. Налаштування індивідуальних атрибутів шрифту

Для кожного атрибута шрифту існує одна команда для зміни його поточного значення. Усі ці команди приймають більш-менш будь-який рядок символів як аргумент, але лише деякі значення мають сенс. Ці значення не вбудовано в NFSS, а є угодами, встановленими у внутрішніх таблицях. У наступних розділах представлено угоди про найменування, які використовуються у стандартній установці LaTeX, але кожен може змінити цю установку, додавши нові оголошення шрифтів у внутрішні таблиці. Зазвичай будь-хто, хто налаштовує нові шрифти для використання з LaTeX, повинен намагатися дотримуватися цих угод, коли це можливо, тому що лише узгоджена угода про найменування може гарантувати, що відповідні шрифти вибрано в документі із загальною розміткою.

Якщо ви хочете вибрати певний шрифт за допомогою цього інтерфейсу, наприклад, Computer Modern Dunhill, жирний згорнутий курсив 14 pt, недостатньо лише знати умовні позначення інтерфейсу, оскільки для кожної комбінації значень атрибутів не існує зовнішнього шрифту. Ви можете спробувати вказати щось на зразок наступного:

1\fontencoding{OT1}\fontfamily{cmdh}\fontseries{bc}\fontshape{it}%
2\fontsize{14}{16pt}\selectfont

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

Вибір сімейства шрифтів

Сімейство шрифтів вибирається командою \fontfamily. Як аргумент він приймає рядок символів, який посилається на сімейство шрифтів, оголошене у внутрішніх таблицях. Рядок символів було визначено під час налаштування цих таблиць і зазвичай є короткою послідовністю букв, наприклад, cmr для сімейства Computer Modern Roman. Назви сімейства не мають бути довшими за п’ять літер, оскільки вони будуть об’єднані, можливо, з трьома іншими літерами, щоб сформувати ім’я файлу, яке в деяких системах може містити щонайбільше вісім літер.

Вибір серії шрифтів

Команда \fontseries змінює атрибут серії. Серія поєднує вагу та ширину у своєму аргументі, що означає, що неможливо змінити ширину поточного шрифту незалежно від його ваги. Це прийнятно, оскільки навряд чи коли-небудь буде потрібно змінювати вагу чи ширину окремо. Навпаки, зміна ваги часто супроводжується зміною ширини в специфікації дизайнера. Це не є несподіванкою, оскільки зміна ваги змінює горизонтальний вигляд літер і, таким чином, вимагає коригування розширення (ширини) для створення добре збалансованого вигляду.

Назви ваги та ширини скорочені в назвах серій, щоб кожна комбінація була унікальною. Ці угоди про найменування наведено в таблиці нижче. Будь-який примірник “m” (що означає середню вагу або ширину) пропускається, за винятком випадків, коли і вага, і ширина є середніми, у цьому випадку використовується одне “m”. Наприклад, напівжирний розгорнутий буде bx, тоді як середній розгорнутий буде x, а напівжирний середній буде b.

Положення про найменування серії шрифтів

Вибір форми шрифту

Команда \fontshape змінює атрибут форми. Для стандартних форм використовуються одно- та дволітерні скорочення. Ці фігури наведено в таблиці нижче:

Правила іменування форм шрифту

Вибір розміру шрифту

Команда \fontsize{<size>}{<skip>} змінює розмір шрифту. Він приймає два аргументи: <size>, на який потрібно перейти, і базову лінію <skip> (відстань між базовими лініями для цього розміру). Розміри шрифту зазвичай вимірюються в пунктах, тому за домовленістю одиниці вимірювання не вказуються. Те саме стосується другого аргументу. Однак, якщо пропуск базової лінії має бути гумовою довжиною, вам потрібно вказати одиницю вимірювання. Таким чином, дійсну зміну розміру можна подати

1\fontsize{14.4}{17}\selectfont

Навіть якщо такий запит дійсний, у цьому розмірі може не бути відповідного зовнішнього шрифту. У такому випадку LaTeX спробує знайти найближчий розмір, якщо його внутрішні таблиці дозволяють виправлення розміру, або повідомить про помилку в іншому випадку.

Якщо ви використовуєте існуючі шрифти довільних розмірів, ви можете вибрати будь-який розмір:

1\fontsize{1in}{1.2in}\selectfont A text in an arbitrary font size

Вибір кодування

Для зміни кодування використовується команда \fontencoding. Аргумент — це внутрішня назва потрібного кодування. Це ім’я має бути відоме LaTeX або як одне з попередньо визначених кодувань (завантажених ядром), або як оголошене за допомогою команди \DeclareFontEncoding. Ось більше інформації про оголошення кодувань шрифтів. Назви стандартних кодувань шрифтів наведено в таблиці нижче:

Назви стандартного кодування шрифтів NFSS базується на припущенні, що більшість (а краще, усі) шрифти для тексту доступні в тому самому кодуванні, якщо вони використовуються для набору тією самою мовою. Іншими словами, зміни кодування повинні бути необхідні, лише якщо ви переходите з однієї мови на іншу. У цьому випадку пакети підтримки мови (наприклад, із системи babel) зазвичай повинні піклуватися про кодування за лаштунками.

У наступному прикладі ми змінюємо кодування вручну, визначаючи середовище Cyr для набору кирилицею. У цьому середовищі як кодування шрифту, так і кодування введення змінюються локально. Звичайно, для належної підтримки мови знадобиться додаткова робота, наприклад, зміна правил розстановки переносів. Кодування оголошується в LaTeX, завантажуючи їх за допомогою пакета fontenc. T2A визначає одне зі стандартних кодувань кирилиці. T1 стає кодуванням за умовчанням, оскільки воно завантажується останнім.

Приклад вихідного коду

Виведення прикладу кодування

На жаль, T1 не можна повністю реалізувати для більшості шрифтів PostScript. П’ять символів у наведеному нижче прикладі, ймовірно, відображатимуться як краплі чорнила, що вказуватиме на відсутність гліфів у шрифті. Зауважте, що символи «на тисячу» та «на десять тисяч» насправді утворюються шляхом поєднання знака відсотка та одного або двох додаткових маленьких нулів; відсутній лише останній гліф.

1\usepackage[T1]{fontenc}
2-----------------------------------------
3\fontfamily{cmr}\selectfont
4\j{} \ng{} \NG{} \textperthousand{}\textpertenthousand \par
5\fontfamily{ptm}\selectfont
6\j{} \ng{} \NG{} \textperthousand{}\textpertenthousand{}

T1 для шрифтів PostScript

5.2. Встановлення кількох атрибутів шрифту

Під час розробки стилів сторінок або команд, орієнтованих на макет, часто потрібно вибрати окремий шрифт, тобто потрібно вказати значення для всіх атрибутів. Для цього LaTeX надає команду \usefont, яка приймає чотири аргументи: кодування, сімейство, серія та форма. Команда оновлює ці атрибути, а потім викликає \selectfont. Якщо ви також хочете вказати розмір і пропуск базової лінії, розмістіть команду \fontsize перед \usefont. Наприклад,

1\fontsize{14}{16pt}\usefont{OT1}{cmdh}{bc}{it}

дасть той самий результат, що й такі команди:

1\fontencoding{OT1}\fontfamily{cmdh}\fontseries{bc}\fontshape{it}%
2\fontsize{14}{16pt}\selectfont

LaTeX також надає декларацію \DeclareFixedFont, яку можна використовувати для визначення нових команд, які перемикаються на повністю фіксований шрифт. Такі команди дуже швидкі, оскільки їм не потрібно шукати внутрішні таблиці. Тому вони дуже корисні у визначеннях команд, які мають перемикатися між шрифтами. Наприклад, якщо ми хочемо оголосити команду для верстки певного тексту у розмірі сценарію, ми можемо зробити це наступним чином:

1\DeclareFixedFont\ScriptSizeFont{\encodingdefault}{\familydefault}
2    {\seriesdefault}{\shapedefault}{7pt}
3\newcommand\theScript[1]{{\ScriptSizeFont #1}}

Ви бачите, що \DeclareFixedFont має шість аргументів. За назвою команди, яку потрібно визначити, слідують п’ять атрибутів шрифту в класифікаціях NFSS. Замість передачі фіксованих значень (за винятком розміру) використовуються вбудовані хуки, які описують основний шрифт документа. Таким чином, у прикладі вище \ScriptSizeFont все ще залежить від загального макета документа. Однак після виконання визначення його значення заморожено, тому пізніші зміни до значень за замовчуванням не змінять шрифт \ScriptSizeFont.

5.3. Автоматична заміна шрифтів

Якщо запит на зміну шрифту не може бути виконано, оскільки комбінація не відома LaTeX, він намагається відновити за допомогою шрифту зі схожими атрибутами. Ось що відбувається в деталях: якщо комбінація схеми кодування, сімейства, серії та форми не оголошена, LaTeX намагається знайти відому комбінацію, спочатку змінивши атрибут форми на значення за замовчуванням. Якщо отримана комбінація все ще невідома, він намагається змінити серію на стандартну. В крайньому випадку він змінює сімейство на значення за замовчуванням. Нарешті, він шукає запис внутрішньої таблиці, щоб знайти запитуваний розмір. Наприклад, якщо ви запитаєте \ttfamily\bfseries\itshape - шрифт друкарської машинки жирним шрифтом і курсивом (якого зазвичай не існує), тоді ви отримаєте шрифт друкарської машинки середньої серії та вертикальної форми, оскільки LaTeX спочатку скидає форму перед скиданням серії. У такому випадку, якщо ви віддаєте перевагу шрифту друкарської машини з курсивом, ви повинні оголосити свої переваги для LaTeX за допомогою функції sub, яка пояснюється в статті Як налаштувати нові шрифти.

Процес заміни ніколи не змінює схему кодування, оскільки будь-яка зміна може призвести до неправильних символів у виводі. Як ви пам’ятаєте, схема кодування визначає, як інтерпретувати вхідні символи, тоді як інші атрибути визначають, як має виглядати вихід. Тому було б недоцільно, якби, наприклад, знак фунта було замінено на знак долара в контракті лише тому, що програмне забезпечення намагалося бути розумним.

Таким чином, кожна схема кодування повинна мати типове сімейство, серію та форму, і принаймні комбінація, що складається зі схеми кодування разом із відповідними типовими значеннями, повинна мати визначення всередині LaTeX.

5.4. Як використовувати команди низького рівня в документі

Нижньорівневі команди, описані в попередніх розділах, призначені для використання у визначеннях високорівневих команд у класах документів або файлах пакетів, або у преамбулі документа.

Якщо ви можете використовувати команди високого рівня, такі як \textsf, вам слід уникати використання команд низького рівня безпосередньо в документі, коли це можливо. Причина полягає в тому, що команди низького рівня є дуже точними інструкціями для переходу на певний шрифт, тоді як команди високого рівня можна налаштувати за допомогою пакетів або декларацій у преамбулі. Припустімо, ви вибрали Computer Modern Sans у своєму документі за допомогою \fontfamily{cmss}\selectfont. Якщо пізніше ви вирішите набрати весь документ зі шрифтами з комплекту PSNFSS, скажімо, Times, застосування пакета змінить лише ті частини документа, які не містять явних команд \fontfamily.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.