\DeclareSymbolFont 的许多实例会导致奇怪的行为

\DeclareSymbolFont 的许多实例会导致奇怪的行为

偶然间,我发现在我的一个大型文档中,有很多 的实例\DeclareSymbolFont会导致奇怪的输出。例如,以下文档包含几个从 TeXSE 拼凑起来的 hack,它不会产生任何警告或错误,但如果后面跟着 ,则会将脚本 F 更改为 fraktur F \smash

\documentclass{article}

\usepackage[only,trianglelefteqslant]{stmaryrd}
\usepackage{kpfonts}
\usepackage[frak=euler]{mathalpha}

%%% better curly braces from Computer Modern
\DeclareSymbolFont{CMsymbols}{OMS}{cmsy}{m}{n}
\DeclareSymbolFont{CMlargesymbols}{OMX}{cmex}{m}{n}
%\DeclareMathDelimiter{\lbrace}{\mathopen}{CMsymbols}{"66}{CMlargesymbols}{"08}
%\DeclareMathDelimiter{\rbrace}{\mathopen}{CMsymbols}{"67}{CMlargesymbols}{"09}

%%% better hat symbol, and check
\DeclareFontFamily{U}{mathx}{}
\DeclareFontShape{U}{mathx}{m}{n}{<-> mathx10}{}
\DeclareSymbolFont{mathx}{U}{mathx}{m}{n}
%\DeclareMathAccent{\widehat}{0}{mathx}{"70}
%\DeclareMathAccent{\widecheck}{0}{mathx}{"71}

%%% borrow \lhook and \rhook from libertinust1math
\makeatletter
\DeclareFontEncoding{LS2}{}{\noaccents@}
\makeatother
\DeclareFontSubstitution{LS2}{libertinust1mathex}{m}{n}
\DeclareSymbolFont{libsymbols}{LS2}{libertinust1mathsym}{m}{n}


\begin{document}
% incorrect
$\mathscr{F}_x\smash{M} \mathfrak{p}$

% correct
$\mathscr{F}_x M \mathfrak{p}$
\end{document}

在此处输入图片描述

我显然实际上并没有\smash这样使用;这只是为了展示这个问题(最初这是由一个涉及的自定义宏引起的\smash)。

\DeclareSymbolFont如果注释掉任何包或行,则输出与预期一致。同样,如果\mathfrak{p}删除了。当然,这些包会做出很多字体声明。请注意,mathalpha不能先加载,kpfonts因为后者会覆盖\mathscr前者的定义。

有人知道这是怎么回事吗?我知道最近有一个涉及数学字体分配的内核更改,但我不确定这是否与此有关。


更简单的 MWE 帮助追踪

\documentclass{article}

\DeclareSymbolFont{abc1}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc2}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc3}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc4}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc5}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc6}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc7}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc8}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abc9}{OT1}{cmr}{m}{n}
\DeclareSymbolFont{abca}{OT1}{cmr}{m}{n}
\DeclareMathAlphabet\mathscr{OT1}{cmr}{m}{it}
\DeclareMathAlphabet\mathfrak{U}{euf}{m}{n}


\def\x#1{\showthe\textfont14 }
\begin{document}
% incorrect
\x0
$\mathscr{F}_x
\hbox{$M\x1$\x2}
 \mathfrak{p}\x3$
\x4

% correct
$\mathscr{F}_x M \mathfrak{p}$
\x5

\end{document}

在此处输入图片描述

相关内容