Краткое содержание
Этот урок учит объявлять языки документа и выбирать для него шрифты. Он объясняет, что меняет babel, когда объявляется язык (перенос слов, автоматические названия, даты и кавычки), и различает три способа сменить язык: \selectlanguage, \foreignlanguage и окружение otherlanguage. Всё это применяется к русскому тексту с цитатами на древнегреческом с политонической орфографией и на латыни, по одному отрывку на каждом. Затем урок представляет fontspec: три семейства шрифтов документа, \babelfont, назначающую шрифт каждому языку, и самые полезные возможности OpenType (старостильные цифры, капитель и лигатуры). Он учит проверять, что шрифт содержит все символы документа, читая предупреждения «Missing character» и разыскивая шрифты программой albatross, и объясняет, почему стоит предпочитать шрифты из TeX Live, если документ должен компилироваться и в Overleaf. В конце кратко упоминаются письменности, идущие справа налево, азиатские письменности и пакет polyglossia.
Цели обучения
- Объявлять с помощью babel основной и дополнительные языки документа и объяснять, что каждый язык определяет в результате.
- Выбирать между
\foreignlanguage,otherlanguageи\selectlanguageв зависимости от того, что должно измениться, и предсказывать получающиеся дату, названия и кавычки. - Набирать отрывки на древнегреческом с политонической орфографией и на латыни с правильным переносом слов и подходящим шрифтом.
- Назначать шрифты с помощью fontspec и babel и включать старостильные цифры, капитель и лигатуры.
- Проверять, что выбранные шрифты содержат все символы и начертания, которыми пользуется документ, и истолковывать предупреждения, сообщающие об обратном.
- Выбирать между шрифтом из TeX Live и системным шрифтом в зависимости от того, где должен компилироваться документ.
Что меняется вместе с языком
Предыдущие уроки всегда загружали \usepackage[russian]{babel}, не останавливаясь на том, что эта строка делает. Между тем язык не сводится к списку букв: у него свои правила переноса слов в конце строки, свои названия частей документа, свой способ записывать даты и свои кавычки. Пакет babel собирает эти соглашения по языкам, и объявить язык значит попросить babel их применить. Конкретно, язык определяет:
- перенос слов: по каким шаблонам движок ищет места, где слово можно разорвать;
- названия, которые LaTeX пишет сам, например заголовок оглавления или подписи к таблицам и рисункам;
- дату, которую печатает
\today, то есть дату компиляции; - некоторые сокращения клавиатуры, например те, которыми русский babel набирает кавычки; о них речь пойдёт в этом же разделе.
В трёх абзацах стоят одни и те же команды; меняется только язык, на котором они читаются. \tablename, \figurename и \contentsname дают названия таблицы, рисунка и оглавления.
\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 записывает в журнал места переноса, которые движок допустил бы в полученных словах, ничего не печатая в документе. Она позволяет проверить, какие шаблоны действуют в каждом месте.
Исходный текст запрашивает переносы двух английских и двух латинских слов, сначала по шаблонам русского языка, основного в документе, а затем по шаблонам их собственного языка.
\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 knowledgeUnderfull \hbox (badness 10000) in paragraph at lines 6--6[] \TU/lmr/m/n/10 un-der-stand-ing knowl-edgeUnderfull \hbox (badness 10000) in paragraph at lines 7--7[] \TU/lmr/m/n/10 nostrum conscientiaUnderfull \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, не зависящий от языка: два обратных апострофа открывают английские кавычки, а два апострофа закрывают их; по одному знаку каждого вида дают одиночные кавычки.
Нужно, однако, отличать сокращение от совпадения. Шрифт, загруженный fontspec с возможностью лигатур TeX, о которой речь пойдёт ниже, сам превращает два идущих подряд знака < в ёлочку, на любом языке. Поэтому <<…>> тоже даёт ёлочки, но на всех уровнях одинаковые: вложенная цитата, записанная так, получит ёлочки внутри ёлочек, и лапки придётся поставить самому. Пакет csquotes, который выбирает кавычки по уровню вложения, избавляет от этой заботы. Урок о сносках, цитатах и стихах рассмотрит цитаты подробнее.
Загрузка содержимого…