LuaTeX e travessões

LuaTeX e travessões

LuaLaTeX não está inserindo travessões a menos que haja espaço ao redor do travessão triplo. Funciona bem ao usar um travessão unicode ou usar explicitamente a \textemdashmacro.

Aqui está um 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}

O que produz:

faltando travessões

Compilado usando LuaTeX, versão 1.07.0 (TeX Live 2018)

A questão é:

Gostaria de saber por que as ligaduras de travessão sem espaços circundantes não são renderizadas como travessões na saída do PDF. Parece um bug para mim. como posso consertar isso?

Responder1

Você pode adicionar \automatichyphenmode=1ao seu preâmbulo:

\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}

saída de código

Responder2

Atualização 3/2019

O bug será resolvido na próxima atualização do luaotfload

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

Para expandir um pouco a resposta de Alan:

É claramente um bug no fontloader importado do contexto (você verá o mesmo no contexto se definir \automatichyphenmode=0). Isso só acontece se as fontes forem renderizadas com 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}

insira a descrição da imagem aqui

A origem do problema é que, com \automatichyphenmode=0, luatex deve primeiro converter o último hífen em um discricionário para permitir uma quebra de linha:

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

e depois que a linha foi definida, ela deve ser convertida novamente para ---, e esta etapa parece falhar.

O problema foi relatado, mas não está claro se será corrigido.

\automatichyphenmode=1evita o problema ao não converter o hífen em discricionário em vários casos. Portanto, você deve estar ciente do fato de que isso suprime a quebra de linha em vários casos:

\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}

insira a descrição da imagem aqui

informação relacionada