Неправильные лигатуры LuaTeX

Неправильные лигатуры LuaTeX

У меня проблема с LuaLaTeX (из TL 2016: Version 0.95.0 (TeX Live 2016) (format=lualatex 2017.1.29)) создание неподходящих лигатур. Вот MWE:

\documentclass[a4paper, 12pt]{article}
\def\czechSingleQuotes #1{‚#1‘} % UTF-8 chars for single quotes
\begin{document}
\czechSingleQuotes{Ahoj!}

\czechSingleQuotes{Nazdar?}

‚Hi!‘
\end{document}

Результат выглядит так:

Ошибка в LuaLaTeX

Надеюсь, ребята из LuaTeX читают это здесь и что-нибудь сделают. Однако, может быть, кто-нибудь подскажет, как обойти это, пока это не исправят? Обычные (в разных ситуациях) приемы не помогают, например, \def\czechSingleQuotes #1{‚{#1}{}\relax ‘}дают тот же результат.

Спасибо заранее.

Позже ПРАВКА: Это было исправлено в последней версии luaotfload(v2.8-fix-1), однако исправление, похоже, зашло слишком далеко — теперь даже стандартные лигатуры для создания обратных испанских восклицательных или вопросительных знаков больше не работают, так что это:

\documentclass[a4paper, 12pt]{article}
\begin{document}
Hi?` % standard back apostrophe, no UTF-8

Hi!` % ditto
\end{document}

создает различные выходные данные в LuaTeX (стандартные знаки q./ex., за которыми следует обратная кавычка) и в XeTeX или pdfTeX (испанские обратные знаки q./ex.).

решение1

Как указал Дэвид Карлайл в своем комментарии, «классические» лигатуры TeX для перевернутых вопросительных и восклицательных знаков применяются, несмотря на то, что вместо обычных обратных кавычек используются «типографские» кавычки.

Вставка инструкции \kern0ptперед закрывающей кавычкой является эффективным средством. Обратите внимание, что LuaTeX, в отличие от pdfLaTEX, отбрасывает {}элементы. Следовательно, вы не можете использовать {}для создания невидимого разделения между знаками препинания и типографскими кавычками.

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

\documentclass{article}
\def\czechSingleQuotes#1{‚#1\kern0pt‘} % UTF8 chars for single quotes
\begin{document}
% "classic" TeX ligatures applied even though "typographic" quotes are in use
? ?` ?‘ --- ! !` !‘ 

\czechSingleQuotes{Ahoj!}

\czechSingleQuotes{Nazdar?}

\czechSingleQuotes{Hi!!}
\end{document}

решение2

Лигатуры TeX применяются неправильно, вы можете использовать , fontspecчтобы отключить их, хотя, например, это означает, что ---больше не будет лигатуры к mdash.

\documentclass[a4paper, 12pt]{article}
\usepackage{fontspec}
\def\czechSingleQuotes #1{‚#1‘} % UTF-8 chars for single quotes
\defaultfontfeatures[\rmfamily]{}
\setmainfont{Latin Modern Roman}
\begin{document}
\czechSingleQuotes{Ahoj!}

\czechSingleQuotes{Nazdar?}

‚Hi!‘
\end{document}

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


Как показывает этот тест с открытым текстом, это проблема luaotfload, я сообщу об этом на github.

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

\input{luaotfload.sty}

\font\fa=[lmroman12-regular.otf]
\font\fb=[lmroman12-regular.otf]:+tlig

\fa 

U+2018 no tlig !‘

U+0060 no tlig !`

\fb

U+2018 tlig !‘

U+0060  tlig !`

\bye

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