\textlangle e \textrangle, com kpfonts-otf, não exibido com lualatex mas exibido com xelatex

\textlangle e \textrangle, com kpfonts-otf, não exibido com lualatex mas exibido com xelatex

Conforme mostrado pelo MCE a seguir, \textlanglee \textranglesão exibidos corretamente com pdflatex+ kpfontsmas não com lualatex+ kpfonts-otf.

O último caso não é tão inesperado já que Daniel Flipo, o mantenedor do kpfonts-otf, me disse que esses personagens estão desaparecidos (ele está trabalhando nisso). Mas o que é estranho é que esses caracteres são exibidos corretamente com xelatex+ kpfonts-otf.

Você sabe por que xelatexexibi-los com sucesso?

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

insira a descrição da imagem aqui

  • Comxelatex

insira a descrição da imagem aqui

  • Comlualatex

insira a descrição da imagem aqui

Responder1

\textlangle e \textrangle do LaTeX inserem pontos de código Unicode U+2329 e U+232A por padrão. Na sua fonte, esses glifos não existem, mas os pontos de código Unicode U+3008 e U+3009 estão disponíveis. De acordo com as tabelas de dados Unicode, estes são canonicamente equivalentes (o que significa que "devem" sempre aparecer exatamente iguais) a U+2329 e U+232A, então HarfBuzz (usado por XeTeX e quando solicitado explicitamente por LuaTex) os substitui. (Isso é um pouco problemático porque U+3008 e U+3009 são caracteres CJK e, portanto, podem ser mais largos em muitas fontes, mas isso não é um problema com kpfonts.)

Para obter os glifos corretos também no LuaTeX você pode ativar o HarfBuzz ou alterar quais codepoints o LaTeX usa:

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

Responder2

O log luatex mostra

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

Funciona em luatex se você usar 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}

Em teoria (mas aparentemente não na prática) U+2329 não deveria ser usado, ele tem uma infeliz normalização Unicode para um colchete angular de largura total no bloco CJK e U+27E8 foi adicionado especificamente para evitar esse caractere.

informação relacionada