
Conforme mostrado pelo MCE a seguir, \textlangle
e \textrangle
são exibidos corretamente com pdflatex
+ kpfonts
mas 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 xelatex
exibi-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}
- Com
pdflatex
- Com
xelatex
- Com
lualatex
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.