为什么当 LaTeX Info 警告数学字体数量时 \tensor 会产生错误?

为什么当 LaTeX Info 警告数学字体数量时 \tensor 会产生错误?

在精算文件中,我们使用很多数学符号,因此我们需要很多数学字体。 “输入行 xxx 上无数学字母表更改为冻结版本正常”是什么意思? David Carlisle 解释说,当加载一定数量的字体时,新的 LaTeX 功能会产生信息消息。
我们观察到使用 tensor 包时存在问题。当使用 \tensor 时,不同数学字体的数量达到警告限制 (14) 时,会抛出 6 个 LaTeX 错误,并且 makro 的内容会被排版 3 次。a
) 这是 LaTeX 核心还是 tensor 的问题?
b) 有没有办法在问题解决之前规避它?

以下最小示例显示 \tensor 产生错误和意外结果。

\documentclass{article}

\RequirePackage{amsfonts}                       % load a range of math fonts
\RequirePackage{mathcomp}
\RequirePackage{MnSymbol}

\RequirePackage{tensor}


\begin{document}

\section{Test}

                                                % approach limit of 14 fonts
$\mathcal{X}$                                   % same result:      \ensuremath{\mathcal{X}}

$\mathtt{X}$                                    % same result       \ensuremath{\mathtt{X}}

$\mathbf{X}$                                    % same result       \ensuremath{\mathbf{X}}


                                                % the following lines typesets X 3 times and produces 6 LaTeX errors
$\tensor*{\mathsf{X}}{}$                        % same result       \ensuremath{\tensor*{\mathsf{X}}{}}
                                                % the following line would produce the same error
% $\tensor*[_{}^{}]{\mathsf{X}}{_{}^{}}$        % same result       \ensuremath{\tensor*[_{}^{}]{\mathsf{X}}{_{}^{}}}
                                                % the following line would produce no error
% $\mathsf{X}$                                  % same result       \ensuremath{\mathsf{X}}

\end{document}

答案1

我不认为你应该加载 amsfonts 因为它们大多被 mnsymbol 隐藏,但它足以确保第一次使用\mathsf不在\tensor(即使该使用是在丢弃的框中,如这里)

\documentclass{article}

\RequirePackage{amsfonts}                       % load a range of math fonts
\RequirePackage{mathcomp}
\RequirePackage{MnSymbol}

\RequirePackage{tensor}


\begin{document}

\section{Test}

                                                % approach limit of 14 fonts
$\mathcal{X}$                                   % same result:      \ensuremath{\mathcal{X}}

$\mathtt{X}$                                    % same result       \ensuremath{\mathtt{X}}

$\mathbf{X}$                                    % same result       \ensuremath{\mathbf{X}}

\sbox0{$\mathsf{X}$}%<<<<<<<<<<<<<<<<<<<<<
                                                % the following lines typesets X 3 times and produces 6 LaTeX errors
$\tensor*{\mathsf{X}}{}$                        % same result       \ensuremath{\tensor*{\mathsf{X}}{}}
                                                % the following line would produce the same error
% $\tensor*[_{}^{}]{\mathsf{X}}{_{}^{}}$        % same result       \ensuremath{\tensor*[_{}^{}]{\mathsf{X}}{_{}^{}}}
                                                % the following line would produce no error
% $\mathsf{X}$                                  % same result       \ensuremath{\mathsf{X}}

\end{document}

一个更简单的无包示例是

\documentclass{article}

\DeclareSymbolFont{letters1}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters2}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters3}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters4}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters5}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters6}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters7}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters8}     {OML}{cmm} {m}{it}
\DeclareSymbolFont{letters9}     {OML}{cmm} {m}{it}

\DeclareSymbolFont{lettersa}     {OML}{cmm} {m}{it}


\begin{document}

\section{Test}

%$\mathsf{X}$

$\mathchoice{\mathsf{X}}{\mathsf{X}}{\mathsf{X}}{\mathsf{X}}$
                     

\end{document}

这会产生相同的错误。不声明lettersa或使用\mathsfbefore\mathchoice可避免此错误。我们也许能够捕获这种情况。

相关内容