У меня, вероятно, довольно простой вопрос: возможно ли использовать пакет 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@minus
when amsmath
is загружена, так и в 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...
командах).