\textlangle und \textrangle, mit kpfonts-otf, werden nicht mit lualatex, sondern mit xelatex angezeigt

\textlangle und \textrangle, mit kpfonts-otf, werden nicht mit lualatex, sondern mit xelatex angezeigt

Wie das folgende MCE zeigt, werden \textlangleund \textranglekorrekt mit pdflatex+ angezeigt kpfonts, aber nicht mit lualatex+ kpfonts-otf.

Der letztere Fall ist nicht so unerwartet, da Daniel Flipo, der Betreuer von kpfonts-otf, mir sagte, dass diese Zeichen derzeit fehlen (er arbeitet daran). Aber was seltsam ist, ist, dass diese Zeichen mit xelatex+ korrekt angezeigt werden kpfonts-otf.

Wissen Sie, warum xelatexsie erfolgreich angezeigt werden?

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

Bildbeschreibung hier eingeben

  • Mitxelatex

Bildbeschreibung hier eingeben

  • Mitlualatex

Bildbeschreibung hier eingeben

Antwort1

\textlangle und \textrangle von LaTeX fügen standardmäßig die Unicode-Codepunkte U+2329 und U+232A ein. In Ihrer Schriftart sind diese Glyphen nicht vorhanden, aber die Unicode-Codepunkte U+3008 und U+3009 sind verfügbar. Laut Unicode-Datentabellen sind diese kanonisch äquivalent (was bedeutet, dass sie „immer genau gleich erscheinen“ sollten) zu U+2329 und U+232A, daher ersetzt HarfBuzz (von XeTeX verwendet und wenn von LuaTex ausdrücklich angefordert) diese. (Dies ist ein wenig problematisch, da U+3008 und U+3009 CJK-Zeichen sind und daher in vielen Schriftarten breiter sein können, aber das ist bei kpfonts kein Problem.)

Um auch in LuaTeX die richtigen Glyphen zu erhalten, können Sie HarfBuzz aktivieren oder ändern, welche Codepunkte LaTeX verwendet:

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

Antwort2

Das Luatex-Protokoll zeigt

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

Es funktioniert in Luatex, wenn Sie HarfBuzz verwenden (wie 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}

Theoretisch (aber anscheinend nicht in der Praxis) sollte U+2329 nicht verwendet werden, da es im CJK-Block eine unglückliche Unicode-Normalisierung auf eine spitze Klammer in voller Breite aufweist und U+27E8 speziell hinzugefügt wurde, um dieses Zeichen zu vermeiden.

verwandte Informationen