
Como se muestra en el siguiente MCE, \textlangle
se \textrangle
muestran correctamente con pdflatex
+ kpfonts
pero 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é xelatex
mostrarlos 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}
- Con
pdflatex
- Con
xelatex
- Con
lualatex
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.