Длина стрелки в LuaTeX в сочетании с пакетом unicode-math

Длина стрелки в LuaTeX в сочетании с пакетом unicode-math

У меня, вероятно, довольно простой вопрос: возможно ли использовать пакет unicode-mathв LuaLaTeX таким образом, чтобы стрелки растягивались при написании более длинного выражения над или под ним?

Например, следующий код с unicode-mathзагруженным пакетом не создает растянутых стрелок, а текст над стрелкой намного длиннее самой стрелки:

% TeX engine: LuaLaTeX   
% TeX Live 2014   
% TeX encoding = UTF-8
\documentclass{minimal}
\usepackage{amsmath,
            unicode-math}

\begin{document}

$a \xrightarrow{b \to \infty} c$

\end{document}

решение1

Я бы посчитал это ошибкой как в unicode-math, которая должна предоставлять хороший эквивалент \std@minuswhen amsmathis загружена, так и в Latin Modern Math, которая не предоставляет глиф для \harrowextender(U+23AF ГОРИЗОНТАЛЬНОЕ РАСШИРЕНИЕ ЛИНИИ). См. связанный вопросПочему fontspec ломает пакет extarrows

Для решения вашей проблемы вы можете сделать следующее:

\documentclass{article}
\usepackage{amsmath,unicode-math}

\makeatletter
\AtBeginDocument{\Umathcharnumdef\std@minus\Umathcodenum`- }% \std@minus is minus
\makeatother

\begin{document}

$a \xrightarrow{b \to \infty} c$

\end{document}

Лучшим решением будет использование следующего решения ( \harrowextenderесли оно доступно):

\documentclass{article}
\usepackage{amsmath,unicode-math}
%\setmathfont{Asana Math} % if uncommented, \harrowextender would be used

\makeatletter
\AtBeginDocument{%
  \check@mathfonts
  \iffontchar\textfont\tw@\string"23AF
    \renewcommand{\relbar}{\mathrel\harrowextender}%
  \else
    \Umathcharnumdef\std@minus\Umathcodenum`-
  \fi}
\makeatother

\begin{document}

$a \xrightarrow{b \to \infty} c$

\end{document}

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

Второй код используется \check@mathfontsдля обеспечения связи шрифтов с математическими семействами (LaTeX обычно не делает этого до тех пор, пока не будет набрана первая формула, чтобы избежать использования математических семейств, которые нельзя не использовать в документе).

С unicode-math, шрифт math, определенный с помощью , \setmathfontсвязан с семейством math 2, поэтому мы проверяем, \harrowextenderсуществует ли в шрифте символ, соответствующий , (см. руководство e-TeX texdoc etexдля \iffontchar). Если символ существует, мы переопределяем его \relbarкак этот символ как math relation. В противном случае мы прибегаем к использованию знака минус под именем, \std@minusкоторое используется с помощью amsmathв этом контексте.

Без кода получается \std@minus«выбрать символ 0 в математическом семействе 2», что верно для традиционных математических шрифтов TeX, но уже не верно для unicode-math. Поэтому в этом случае мы переопределяем его \std@minusкак математический символ, имеющий тот же код, что и знак минус (см. руководство XeTeX, texdoc xetex, для получения дополнительной информации о \Umath...командах).

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