这段代码为什么不起作用?(使用 {mathspec} 和 \DeclareMathSymbol)

这段代码为什么不起作用?(使用 {mathspec} 和 \DeclareMathSymbol)

我正在研究字体和符号的工作原理,但不明白引用的代码如何给我附加的输出。

记录如下:感谢这个社区的友善之人,我已经有了数学中西里尔字母的合理解决方案,包括mathspecunicode-math包。我想让它们更加通用。

为什么不backtick + Cyrillic glyph工作?

为什么我使用的字体中的一些符号(实际上字体中存在的字符),类似于标准 TeX 字形long integral sign parts并被其取代?plusminus

我正在使用 XeTeX 3.141592653-2.6-0.999994(Slackware 上的 TeX Live 2022)。

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathspec}

\setmainfont{Liberation Serif}
\SetMathAlphabet{\mathrm}{normal}{TU}{\familydefault}{m}{n}
\SetMathAlphabet{\mathit}{normal}{TU}{\familydefault}{m}{it}
\SetMathAlphabet{\mathbf}{normal}{TU}{\familydefault}{b}{n}

% looking at mathspec sources
\DeclareSymbolFont{Cyrillic:m:n}{TU}{\familydefault}{m}{n}
\DeclareMathSymbol{А}{\mathalpha}{Cyrillic:m:n}{`А}
\DeclareMathSymbol{а}{\mathalpha}{Cyrillic:m:n}{`а}
\DeclareMathSymbol{Я}{\mathalpha}{Cyrillic:m:n}{`Я}
\DeclareMathSymbol{я}{\mathalpha}{Cyrillic:m:n}{`я}

\setmathsfont(Digits,Latin,Greek){Liberation Serif}
\setmainfont{Liberation Serif}

\begin{document}
% text mode, to see proper outlines
А ~ Б ~ С ~ Д ~ 123 ~ ± ~ µ ~ υ ~ ζ ~ ∫ 1/x

% this is in \mathnormal
$ А_а ~ АаЯя $ ~~~<--- should be \it{ А\textsubscript{а} АаЯя}

% this is in \mathalpha's
$\mathrm{Б_б \zeta} ~ \mathit{C_с \zeta} ~ \mathbf{Д_д \zeta} ~ 123 ~ \pm ~ \mu ~ \upsilon ~ \zeta ~ 1.2 , 2.3  \int 1/x $

\end{document}

输出为这里

答案1

该命令\DeclareMathSymbol未超出插槽 255。您需要\Umathcode

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathspec}

\setmainfont{Liberation Serif}
\DeclareMathAlphabet{\mathrm}{TU}{\familydefault}{m}{n}
\DeclareMathAlphabet{\mathit}{TU}{\familydefault}{m}{it}
\DeclareMathAlphabet{\mathbf}{TU}{\familydefault}{b}{n}

% looking at mathspec sources
\DeclareSymbolFont{Cyrillic}{TU}{\familydefault}{m}{it}
\Umathcode`А="0 \symCyrillic `А
\Umathcode`а="0 \symCyrillic `а
\Umathcode`Я="0 \symCyrillic `Я
\Umathcode`я="0 \symCyrillic `я

\setmathsfont(Digits,Latin,Greek){Liberation Serif}


\begin{document}
% text mode, to see proper outlines
А ~ Б ~ С ~ Д ~ 123 ~ ± ~ µ ~ υ ~ ζ ~ ∫ 1/x

% this is in \mathnormal
$ А_а АаЯя $ ~~~<--- should be \textit{А\textsubscript{а}АаЯя}

% this is in \mathalpha's
$\mathrm{Б_б \zeta} ~ \mathit{C_с \zeta} ~ \mathbf{Д_д \zeta} ~ 
  123 ~ \pm ~ \mu ~ \upsilon ~ \zeta ~ 1.2 , 2.3  \int 1/x $

\end{document}

在此处输入图片描述

另外:您似乎认为这\it是一个带参数的命令。但事实并非如此,因为它是一个声明,所以{\it ...}语法应该是正确的,但事实是\it(以及其他两个字母的字体更改命令)已被弃用近 30 年了。

相关内容