Автоматический кернинг с LuaLaTeX

Автоматический кернинг с LuaLaTeX

Есть ли способ набрать правую двойную кавычку прямо над точкой (если цитата заканчивается точкой)? Не слева (например, .), не справа (например, ".), а прямо над. На фото ниже пример изДеревья, карты и теоремыЖан-Люк Думон.

Правая двойная кавычка прямо над точкой.

решение1

Один из способов — добавить отрицательный «кернинг» между кавычками и точкой:

\documentclass{article}
\begin{document}
Here is an unkerned quotation mark: ``\dots''.

Here is a kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

Пример кернинга

Команда TeX \kern-0.5emвставляет отрицательный пробел между кавычками и следующей точкой. Вам придется немного поиграть с точным интервалом, но использование меры, например -0.5emwhich, будет масштабироваться вместе с размером шрифта, должно работать достаточно хорошо.

Автоматический кернинг с LuaLaTeX

Как предлагали другие, вы можете сделать это с помощью макросов, но если вы хотите сделать это автоматически, вам, по-видимому, нужно включить эту информацию о кернинге в специфичную для шрифта таблицу кернинга. Это можно сделать с помощьюLuaLaTeXследующее:

Сначала создайте файл:Palatino.fea

languagesystem DFLT dflt;
languagesystem latn dflt;
feature kern {
pos  \quotedblright \period -1000;
} kern;

Теперь загрузите эту информацию о шрифте, используя fontspec:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[FeatureFile=Palatino.fea]{Palatino}

\begin{document}
Here is an automatically kerned quotation mark: ``\dots''.

Here is a manually kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

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

Автоматический кернинг с LuaLaTeX

решение2

Я бы установил это просто как \rlapточку -ed (или, в понимании LaTeX, \makebox[0pt][l]), обернутую в макрос:

введите описание изображения здесь

\documentclass{article}
\newcommand{\qperiod}{\rlap{.}}
\begin{document}
Some text: ``\dots''.

Some text: ``\dots''

Some text: ``\dots\qperiod''
\end{document}

Макро-обертка позволяет при необходимости вносить изменения глобально.

решение3

Здесь я использую стек. Это stacktypeлибо «L» для Long, либо «S» для Short (по умолчанию). Если «L», то «расстояние» стекирования равно от базовой линии до базовой линии. Установка в 0pt, это говорит о том, что два компонента имеют одну и ту же базовую линию (в отличие от этого, короткое расстояние стека — это вертикальный зазор между верхом «якоря» и низом сложенного элемента). определяет stackalignmentгоризонтальное выравнивание (по умолчанию c=center). Здесь я установил его для выравнивания по левому краю.

\documentclass{article}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\renewcommand\stackalignment{l}
\begin{document}
by ``\dots\stackon[0pt]{.}{''}
\end{document}  

введите описание изображения здесь

Того же результата можно добиться, минуя все настройки параметров, используя универсальный stackengineмакрос с 8 обязательными аргументами:

by ``\dots\stackengine{0pt}{.}{''}{O}{l}{F}{F}{L}

Восемь обязательных аргументов:

  • расстояние укладки
  • якорный элемент
  • сложенный элемент
  • О(верх) или У(не)стек
  • l(левый), c(вход) или r(правый) горизонтальное выравнивание
  • T/F для «quietstack» («T» означает создано, но не напечатано)
  • T/F для «useanchorwidth» («T» означает, что ширина якоря определяет общую ширину стека)
  • S (короткий) или L (длинный) стек

Связанный контент