間違った 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 ‘}同じ結果になります。

よろしくお願いします。

後日編集: これは最新バージョン (v2.8-fix-1) で修正されましたluaotfloadが、修正が少し行き過ぎているようです。スペイン語の感嘆符や疑問符を元に戻すための標準の合字さえも機能しなくなり、次のようになります。

\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

David Carlisle がコメントで指摘しているように、基本的なバッククォートではなく「印刷上の」引用符が存在しているにもかかわらず、反転疑問符と感嘆符の「従来の」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

関連情報