\textlangle и \textrangle, с kpfonts-otf, не отображаются с lualatex, но отображаются с xelatex

\textlangle и \textrangle, с kpfonts-otf, не отображаются с lualatex, но отображаются с xelatex

Как показано в следующем MCE, \textlangleи \textrangleправильно отображаются с pdflatex+ kpfonts, но не с lualatex+ kpfonts-otf.

Последний случай не так уж и неожиданный, так как Дэниел Флипо, сопровождающий kpfonts-otf, сказал мне, что эти символы в настоящее время отсутствуют (он работает над этим). Но что странно, эти символы правильно отображаются с xelatex+ kpfonts-otf.

Знаете ли вы, почему xelatexих можно успешно выставлять?

\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}
  • Сpdflatex

введите описание изображения здесь

  • Сxelatex

введите описание изображения здесь

  • Сlualatex

введите описание изображения здесь

решение1

\textlangle и \textrangle LaTeX по умолчанию вставляют кодовые точки Unicode U+2329 и U+232A. В вашем шрифте эти глифы отсутствуют, но доступны кодовые точки Unicode U+3008 и U+3009. Согласно таблицам данных Unicode, они канонически эквивалентны (то есть они «должны» всегда выглядеть точно так же) символам U+2329 и U+232A, поэтому HarfBuzz (используемый XeTeX и при явном запросе LuaTex) заменяет их. (Это немного проблематично, поскольку U+3008 и U+3009 являются символами CJK и, следовательно, могут быть шире во многих шрифтах, но это не проблема для kpfonts.)

Чтобы получить правильные глифы и в LuaTeX, вы можете включить HarfBuzz или изменить кодовые точки, используемые 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}

решение2

Журнал luatex показывает

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

Работает в luatex, если вы используете HarfBuzz (например, 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}

Теоретически (но, по-видимому, не на практике) символ U+2329 использовать не следует, поскольку он имеет неудачную нормализацию Unicode до полноширинной угловой скобки в блоке CJK, а U+27E8 был добавлен специально, чтобы избежать этого символа.

Связанный контент