Eu tenho uma pergunta provavelmente bastante simples: é possível usar o unicode-math
pacote 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-math
carregado 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@minus
quando 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 \harrowextender
quando 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}
O segundo código é usado \check@mathfonts
para 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 \setmathfont
está associada à família matemática 2, portanto verificamos se o caracter correspondente a \harrowextender
existe na fonte (veja o manual do e-TeX, texdoc etex
para \iffontchar
). Se o caractere existir, redefinimos \relbar
esse símbolo como relação matemática. Caso contrário, recorremos ao sinal de menos, sob o nome \std@minus
que é utilizado por amsmath
neste contexto.
O que acontece sem o código é que ele \std@minus
se 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@minus
como um caractere matemático com o mesmo código do sinal de menos (consulte o manual do XeTeX, texdoc xetex
para obter mais informações sobre \Umath...
comandos).