Перейти к содержимому
Topos Uranos

Краткое содержание

Этот урок учит объявлять языки документа и выбирать для него шрифты. Он объясняет, что меняет babel, когда объявляется язык (перенос слов, автоматические названия, даты и кавычки), и различает три способа сменить язык: \selectlanguage, \foreignlanguage и окружение otherlanguage. Всё это применяется к русскому тексту с цитатами на древнегреческом с политонической орфографией и на латыни, по одному отрывку на каждом. Затем урок представляет fontspec: три семейства шрифтов документа, \babelfont, назначающую шрифт каждому языку, и самые полезные возможности OpenType (старостильные цифры, капитель и лигатуры). Он учит проверять, что шрифт содержит все символы документа, читая предупреждения «Missing character» и разыскивая шрифты программой albatross, и объясняет, почему стоит предпочитать шрифты из TeX Live, если документ должен компилироваться и в Overleaf. В конце кратко упоминаются письменности, идущие справа налево, азиатские письменности и пакет polyglossia.

Цели обучения

  1. Объявлять с помощью babel основной и дополнительные языки документа и объяснять, что каждый язык определяет в результате.
  2. Выбирать между \foreignlanguage, otherlanguage и \selectlanguage в зависимости от того, что должно измениться, и предсказывать получающиеся дату, названия и кавычки.
  3. Набирать отрывки на древнегреческом с политонической орфографией и на латыни с правильным переносом слов и подходящим шрифтом.
  4. Назначать шрифты с помощью fontspec и babel и включать старостильные цифры, капитель и лигатуры.
  5. Проверять, что выбранные шрифты содержат все символы и начертания, которыми пользуется документ, и истолковывать предупреждения, сообщающие об обратном.
  6. Выбирать между шрифтом из TeX Live и системным шрифтом в зависимости от того, где должен компилироваться документ.

Что меняется вместе с языком

Предыдущие уроки всегда загружали \usepackage[russian]{babel}, не останавливаясь на том, что эта строка делает. Между тем язык не сводится к списку букв: у него свои правила переноса слов в конце строки, свои названия частей документа, свой способ записывать даты и свои кавычки. Пакет babel собирает эти соглашения по языкам, и объявить язык значит попросить babel их применить. Конкретно, язык определяет:

  • перенос слов: по каким шаблонам движок ищет места, где слово можно разорвать;
  • названия, которые LaTeX пишет сам, например заголовок оглавления или подписи к таблицам и рисункам;
  • дату, которую печатает \today, то есть дату компиляции;
  • некоторые сокращения клавиатуры, например те, которыми русский babel набирает кавычки; о них речь пойдёт в этом же разделе.
ПримерОдни и те же команды на трёх языках

В трёх абзацах стоят одни и те же команды; меняется только язык, на котором они читаются. \tablename, \figurename и \contentsname дают названия таблицы, рисунка и оглавления.

Код LaTeX
\documentclass{article}\usepackage{fontspec}\usepackage[latin, english, russian]{babel}\babelfont{rm}{Noto Serif}\begin{document}Дата: \today; названия: \tablename, \figurename, \contentsname.​\begin{otherlanguage}{english}Date: \today; captions: \tablename, \figurename, \contentsname.\end{otherlanguage}​\begin{otherlanguage}{latin}Dies: \today; tituli: \tablename, \figurename, \contentsname.\end{otherlanguage}\end{document}
Результат
Результат

Строка \babelfont{rm}{Noto Serif} выбирает шрифт с кириллицей, как во всех русских документах этого курса; в разделе о шрифтах она будет объяснена подробно. Латынь записывает день и год римскими цифрами. Стоит заметить и две особенности русского языка в babel: дата заканчивается сокращением «г.», так что точка, поставленная в исходном тексте сразу после \today, удвоилась бы (поэтому здесь после даты стоит точка с запятой), а рисунок называется сокращённо, «Рис.».

Перенос слов

Перенос слов наименее заметен из всего, что определяет язык, и важнее всего остального. Каждый язык переносит слова по своей традиции: русский по слогам, с учётом приставок и корней, английский часто считается со строением слова, как в stand-ing, а латынь, по традиции, которой следуют её шаблоны, переносит s, за которым идёт согласная, на следующую строку. Если отрывок на другом языке не отмечен, движок переносит его по шаблонам действующего языка, а предложенные места разрыва могут оказаться неверными для этого языка или вовсе отсутствовать.

Команда \showhyphens записывает в журнал места переноса, которые движок допустил бы в полученных словах, ничего не печатая в документе. Она позволяет проверить, какие шаблоны действуют в каждом месте.

ПримерОдни и те же слова с разными шаблонами

Исходный текст запрашивает переносы двух английских и двух латинских слов, сначала по шаблонам русского языка, основного в документе, а затем по шаблонам их собственного языка.

Код LaTeX
\documentclass{article}\usepackage{fontspec}\usepackage[latin, english, russian]{babel}\begin{document}\showhyphens{understanding knowledge}\foreignlanguage{english}{\showhyphens{understanding knowledge}}\showhyphens{nostrum conscientia}\foreignlanguage{latin}{\showhyphens{nostrum conscientia}}\end{document}

Журнал показывает для каждой строки предупреждение о боксе (безобидное: \showhyphens набирает слова в очень широкой строке, чтобы их рассмотреть), за которым следуют слова с местами переноса.

Журнал компиляции
Underfull \hbox (badness 10000) in paragraph at lines 5--5[] \TU/lmr/m/n/10 understanding knowledge​Underfull \hbox (badness 10000) in paragraph at lines 6--6[] \TU/lmr/m/n/10 un-der-stand-ing knowl-edge​Underfull \hbox (badness 10000) in paragraph at lines 7--7[] \TU/lmr/m/n/10 nostrum conscientia​Underfull \hbox (badness 10000) in paragraph at lines 8--8[] \TU/lmr/m/n/10 no-strum con-scien-tia

Русские шаблоны знают только кириллицу, поэтому в строках 5 и 7 английские и латинские слова не получают ни одного места переноса: длинное неотмеченное слово в конце строки не разорвётся, и строка вылезет на поля или растянется. С шаблонами английского языка переносы следуют строению английских слов, а с шаблонами латыни (строка 8) соблюдают латинскую традицию.

Кавычки в русском тексте

Русская типографика ставит на первом уровне кавычки-«ёлочки», а внутри них кавычки-„лапки“. Русский babel, который загружают документы этого курса, определяет для них сокращения: "< и "> дают открывающую и закрывающую ёлочки, "` и "' дают открывающую и закрывающую лапки. Уровень babel не отслеживает: какие кавычки ставить, решает автор. В LuaLaTeX все эти знаки можно набирать и напрямую, как в примере ниже.

ПримерКавычки двух уровней
Код LaTeX
«Учитель сказал: „повторите вслух“».​``Английские кавычки'' и `одиночные', набранные вручную.
Результат
Результат

Вторая строка показывает классический способ LaTeX, не зависящий от языка: два обратных апострофа открывают английские кавычки, а два апострофа закрывают их; по одному знаку каждого вида дают одиночные кавычки.

Нужно, однако, отличать сокращение от совпадения. Шрифт, загруженный fontspec с возможностью лигатур TeX, о которой речь пойдёт ниже, сам превращает два идущих подряд знака < в ёлочку, на любом языке. Поэтому <<…>> тоже даёт ёлочки, но на всех уровнях одинаковые: вложенная цитата, записанная так, получит ёлочки внутри ёлочек, и лапки придётся поставить самому. Пакет csquotes, который выбирает кавычки по уровню вложения, избавляет от этой заботы. Урок о сносках, цитатах и стихах рассмотрит цитаты подробнее.