LuaTeX と em ダッシュ

LuaTeX と em ダッシュ

LuaLaTeX は、3 つのダッシュの周囲にスペースがない限り、em ダッシュを挿入しません。Unicode の em ダッシュを使用する場合、またはマクロを明示的に使用する場合は正常に動作します\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) を使用してコンパイル

質問は:

周囲にスペースのない em ダッシュ合字が PDF 出力で em ダッシュとしてレンダリングされない理由を知りたいです。バグのように思えます。どうすれば修正できますか?

答え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

2019年3月更新

このバグは次回の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}

ここに画像の説明を入力してください

関連情報