LuaTeX и длинные тире

LuaTeX и длинные тире

LuaLaTeX не вставляет длинные тире, если вокруг тройного тире нет места. Работает нормально при использовании длинного тире Unicode или при явном использовании макроса \textemdash.

Вот MWE:

\documentclass{article}

\begin{document}

\begin{enumerate}
  \item en--dash
  \item em---dash
  \item em --- dash space
\end{enumerate}
\begin{enumerate}
  \item en–dash unicode
  \item em—dash unicode
  \item em — dash space unicode
\end{enumerate}
\begin{enumerate}
  \item en\textendash{}dash macro
  \item em\textemdash{}dash macro
  \item em \textemdash{} dash space macro
\end{enumerate}

\end{document}

Что производит:

отсутствуют длинные тире

Скомпилировано с использованием LuaTeX, версия 1.07.0 (TeX Live 2018)

Вопрос в том:

Я хотел бы узнать, почему лигатуры длинного тире без окружающих пробелов не отображаются как длинное тире в выходных данных PDF. Мне кажется, это ошибка. Как ее исправить?

решение1

Вы можете добавить \automatichyphenmode=1в преамбулу:

\documentclass{article}
\automatichyphenmode=1
\begin{document}

\begin{enumerate}
  \item en--dash
  \item em---dash
  \item em --- dash space
\end{enumerate}
\begin{enumerate}
  \item en–dash unicode
  \item em—dash unicode
  \item em — dash space unicode
\end{enumerate}
\begin{enumerate}
  \item en\textendash{}dash macro
  \item em\textemdash{}dash macro
  \item em \textemdash{} dash space macro
\end{enumerate}

\end{document}

вывод кода

решение2

Обновление 3/2019

Ошибка будет устранена в следующем обновлении luaotfload.

==============================================================

Немного расширим ответ Алана:

По-моему, это явная ошибка в загрузчике шрифтов, импортированном из контекста (то же самое вы увидите в контексте, если установите \automatichyphenmode=0). Это происходит только в том случае, если шрифты отображаются с помощью mode=node:

\documentclass{article}

\begin{document}
\font\test={file:lmroman10-regular.otf:mode=node;+tlig}
\test

A---B

\font\test={file:lmroman10-regular.otf:mode=base;+tlig}
\test

A---B
\end{document}

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

Источник проблемы, по моему скромному мнению, в том \automatichyphenmode=0, что luatex сначала должен преобразовать последний дефис в дискреционный, чтобы разрешить перенос строки:

A---B  ---> A--\discretionary{-}{}{-}B

и после того, как линия установлена, ее приходится снова преобразовывать в ---, и этот шаг, похоже, не удается.

О проблеме сообщено, но пока неясно, будет ли она устранена.

\automatichyphenmode=1избегает проблемы, не преобразуя дефис в дискреционный в ряде случаев. Поэтому вы должны знать о том, что это подавляет перенос строки в ряде случаев:

\documentclass[parskip=half-]{scrartcl}
\begin{document}


\parbox[t]{1pt}{%
\textbf{0}

\automatichyphenmode=0
A-B

A--B

A---B

-begin

A!-B}
\hspace{2cm}
\parbox[t]{1pt}{\automatichyphenmode=1
\textbf{1}

A-B

A--B

A---B

-begin

A!-B}

\end{document}

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

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