Comprimento da seta no LuaTeX em combinação com o pacote unicode-math

Comprimento da seta no LuaTeX em combinação com o pacote unicode-math

Eu tenho uma pergunta provavelmente bastante simples: é possível usar o unicode-mathpacote dentro do LuaLaTeX de forma que as setas se estiquem ao escrever alguma expressão mais longa acima ou abaixo dele?

Por exemplo, o código a seguir com o pacote unicode-mathcarregado não produz setas esticadas e o texto sobre a seta é muito mais longo que a própria seta:

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

Responder1

Eu consideraria isso um bug tanto no unicode-math, que deve fornecer um bom equivalente de \std@minusquando amsmathé carregado, quanto no Latin Modern Math, que não fornece um glifo para \harrowextender(U+23AF HORIZONTAL LINE EXTENSION). Veja a pergunta relacionadaPor que fontspec quebra o pacote extarrows

Para o seu problema, você pode fazer

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

Uma solução alternativa melhor deve ser usada \harrowextenderquando disponível:

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

insira a descrição da imagem aqui

O segundo código é usado \check@mathfontspara garantir que as fontes sejam associadas às famílias matemáticas (o LaTeX normalmente não faz isso até que a primeira fórmula esteja sendo composta para evitar o uso de famílias matemáticas que não poderiam ser descartadas no documento).

Com unicode-math, a fonte matemática definida por \setmathfontestá associada à família matemática 2, portanto verificamos se o caracter correspondente a \harrowextenderexiste na fonte (veja o manual do e-TeX, texdoc etexpara \iffontchar). Se o caractere existir, redefinimos \relbaresse símbolo como relação matemática. Caso contrário, recorremos ao sinal de menos, sob o nome \std@minusque é utilizado por amsmathneste contexto.

O que acontece sem o código é que ele \std@minusse torna “escolha o caractere 0 na família matemática 2”, o que é correto para as fontes matemáticas tradicionais do TeX, mas não é mais verdadeiro para unicode-math. Portanto, neste caso, redefinimos \std@minuscomo um caractere matemático com o mesmo código do sinal de menos (consulte o manual do XeTeX, texdoc xetexpara obter mais informações sobre \Umath...comandos).

informação relacionada