\textlangle y \textrangle, con kpfonts-otf, no se muestran con lualatex pero sí con xelatex

\textlangle y \textrangle, con kpfonts-otf, no se muestran con lualatex pero sí con xelatex

Como se muestra en el siguiente MCE, \textlanglese \textranglemuestran correctamente con pdflatex+ kpfontspero no con lualatex+ kpfonts-otf.

Este último caso no es tan inesperado ya que Daniel Flipo, el mantenedor de kpfonts-otf, me dijo que estos personajes actualmente están desaparecidos (está trabajando en ello). Pero lo extraño es que estos caracteres se muestran correctamente con xelatex+ kpfonts-otf.

¿Sabes por qué xelatexmostrarlos con éxito?

\documentclass{article}
\usepackage{iftex}
\ifpdftex
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\else
\usepackage{kpfonts-otf}
\fi
\begin{document}
\verb|$\langle\rangle$| $=\langle\rangle$

\verb|\textlangle\textrangle| $=$ \textlangle\textrangle
\end{document}
  • Conpdflatex

ingrese la descripción de la imagen aquí

  • Conxelatex

ingrese la descripción de la imagen aquí

  • Conlualatex

ingrese la descripción de la imagen aquí

Respuesta1

\textlangle y \textrangle de LaTeX insertan puntos de código Unicode U+2329 y U+232A de forma predeterminada. En su fuente, estos glifos no existen, pero los puntos de código Unicode U+3008 y U+3009 están disponibles. Según las tablas de datos Unicode, estas son canónicamente equivalentes (lo que significa que "deberían" aparecer siempre exactamente iguales) a U+2329 y U+232A, por lo que HarfBuzz (utilizado por XeTeX y cuando LuaTex lo solicita explícitamente) los sustituye. (Esto es un poco problemático porque U+3008 y U+3009 son caracteres CJK y, por lo tanto, pueden ser más anchos en muchas fuentes, pero eso no es un problema con kpfonts).

Para obtener los glifos correctos también en LuaTeX, puede habilitar HarfBuzz o cambiar qué puntos de código usa LaTeX:

\documentclass{article}
\usepackage{iftex}
\ifpdftex
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\else
\usepackage{kpfonts-otf}
\DeclareTextSymbol{\textlangle}\UnicodeEncodingName{"3008}
\DeclareTextSymbol{\textrangle}\UnicodeEncodingName{"3009}
\fi

\begin{document}
\verb|$\langle\rangle$| $=\langle\rangle$
\verb|\textlangle\textrangle| $=$ \textlangle\textrangle
\end{document}

Respuesta2

El registro de luatex muestra

Missing character: There is no 〈 (U+2329) in font [KpRoman-Regular.otf]:mode=n

Funciona en luatex si usas HarfBuzz (como xetex)

\documentclass{article}
\usepackage{iftex}
\ifpdftex
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\else
\usepackage{fontspec}
\ifluatex
\defaultfontfeatures{Renderer=HarfBuzz}
\fi
\usepackage{kpfonts-otf}
\fi
\begin{document}

\verb|$\langle\rangle$| $=\langle\rangle$

\verb|\textlangle\textrangle| $=$ \textlangle\textrangle

\end{document}

En teoría (pero aparentemente no en la práctica) U+2329 no debería usarse, tiene una desafortunada normalización Unicode a un corchete angular de ancho completo en el bloque CJK y U+27E8 se agregó específicamente para evitar este carácter.

información relacionada