
Estoy usando xelatex y me gustaría usar glifos cirílicos en fórmulas matemáticas como los glifos comunes. Con el siguiente código tengo espacios en blanco en lugar de glifos Cyrilli en la fórmula del PDF resultante:
\documentclass{letter}
\usepackage{fontspec}
\setmainfont{Liberation Serif}
\setmathrm{Liberation Serif}
\begin{document}
Cyrillics: {абВ 0123456789} \it{абВ 0123456789}
$ abC = 1,234567890 = абВ = \sin {1,234567890 {абВ}_{абВ} } \Phi \alpha $
\end{document}
En el archivo de registro dice
Missing character: There is no а in font cmmi10!
Missing character: There is no б in font cmmi10!
Missing character: There is no В in font cmmi10!
Missing character: There is no а in font cmmi7!
Missing character: There is no б in font cmmi7!
Missing character: There is no В in font cmmi7!
Usar \mathit y similares para cada fragmento en cirílico es una especie de solución a medias.
¿Es posible reemplazar la familia 'Latin Modern' en la configuración con, digamos, la familia 'CMU' ('Computer Modern Unicode'), que tiene tanto cirílicos como una cobertura de glifos decente? (Mis intentos de resolver el problema con el paquete 'unicode-math' producen un problema similar).
Respuesta1
Sin hyperref
y polyglossia
(se produce alguna interacción con ellos que no sigo), obtengo esto:
MWE
\documentclass[12pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{unicode-math}
%\usepackage{polyglossia}
%\setdefaultlanguage{russian}
%\setotherlanguage{english}
%\newcommand\cyrillicfont{Noto Serif}
\setmainfont{Liberation Serif}
\setmathrm{Liberation Serif}
%\usepackage[russian]{hyperref}
\setmathfont{XITS Math}
%See: https://tex.stackexchange.com/questions/201239/cant-get-unicode-symbols-in-math-mode
\DeclareSymbolFont{cyrletters}{\encodingdefault}{\familydefault}{m}{it}
\newcommand{\makecyrmathletter}[1]{%
\begingroup\lccode`a=#1\lowercase{\endgroup
\Umathcode`a}="0 \csname symcyrletters\endcsname\space #1
}
\count255="409
\loop\ifnum\count255<"44F
\advance\count255 by 1
\makecyrmathletter{\count255}
\repeat
\begin{document}
\[
(д+ф)^{2}=д^{2}+2дф+ф^{2}м
\]
\[
г л а м н я^{2^{i}}
\]
Inline math mode: $ abC = 1,234 = абВ = \sin ({1,67895 \times {абВ}_{абВ} }) \Phi \alpha $
xxx $а + ц ж + е$ xxx
\end{document}
Compilado con xelatex (miktex en windows):
This is XeTeX, Version 3.14159265-2.6-0.999992 (MiKTeX 2.9.7300 64-bit) entering extended mode (cyrillic_maths_egreg2a.tex LaTeX2e <2020-02-02> patch level 5 L3 programming layer <2020-03-06>
Respuesta2
Lo que realmente responde bastante bien a mi pregunta es el enfoque para la redefinición de glifos sugerido por @Cicada (referencias en el código), combinado con el paquete 'mathfont' (a un clic de la página de inicio de CTAN). También funciona en el complemento TexMaths de OpenOffice.
\documentclass{letter}
\usepackage{mathfont}
\setmainfont{Liberation Serif}
\mathfont{Liberation Serif}
% The glyphs redefinition code by https://tex.stackexchange.com/users/182648/cicada
% as posted at https://tex.stackexchange.com/a/534590/210048
% See also: https://tex.stackexchange.com/questions/201239/cant-get-unicode-symbols-in-math-mode
\DeclareSymbolFont{cyrletters}{\encodingdefault}{\familydefault}{m}{it}
\newcommand{\makecyrmathletter}[1]{%
\begingroup\lccode`a=#1\lowercase{\endgroup
\Umathcode`a}="0 \csname symcyrletters\endcsname\space #1
}
\count255="409
\loop\ifnum\count255<"44F
\advance\count255 by 1
\makecyrmathletter{\count255}
\repeat
\begin{document}
Text: {\it{abC}} = 1,234567890 = {\it{абВ}\footnotesize{абВ}} = {sin} 1,234567890 \, {Φ} {\it{α}}
Math: $ abC = 1,234567890 = {абВ}_{абВ} = \sin {1,234567890} \, \Phi \, \alpha $
\end{document}
ACTUALIZADO: Aún mejor es usar el paquete 'mathspec', que no entra en conflicto con 'amsmath', al igual que 'mathfont'. En el mismo código de muestra sustituir
\usepackage{mathfont}
\setmainfont{Liberation Serif}
\mathfont{Liberation Serif}
con
\usepackage{amsmath}
\usepackage{mathspec}
\setmainfont{Liberation Serif}
\setallmainfonts{Liberation Serif}