使用 \mathtt{A} 和包 \usepackage{MnSymbol}

使用 \mathtt{A} 和包 \usepackage{MnSymbol}

如何使用符号 \mathtt{A}和包装\usepackage{MnSymbol}

我的代码以

\PassOptionsToPackage{dvipsnames}{xcolor}
\documentclass[a4paper]{book}
\usepackage{lmodern}
\usepackage{amsmath,amssymb}
\usepackage{amssymb}
\usepackage{amsmath,amscd}
\usepackage{amsfonts}
\usepackage[utf8]{inputenc}
\usepackage{pstricks}
\usepackage{pstricks-add}
\usepackage{tikz}
\usepackage{tensor}
\usepackage{graphicx}
\usepackage{MnSymbol}
\usepackage{stmaryrd}
\usepackage{shuffle}
\usepackage{comment}
\usepackage[frenchb]{babel}
\usepackage{etex}
\usepackage[all]{xy}

\usepackage{float}
\usepackage{blkarray}
\usepackage{lipsum}
%\usepackage{mathtools}
%\usepackage{mathabx}
\usepackage[dvipsnames]{xcolor}
\usepackage{tkz-graph}

\usetikzlibrary{arrows}
\usepackage[french,linesnumbered,algoruled]{algorithm2e}
\usepackage{algorithmic}
\usepackage{pst-node,pstricks,multido,pst-plot,pst-text,pst-3d}%
\usetikzlibrary{arrows}

我收到这些警告和错误

! LaTeX Error: Too many math alphabets used in version normal.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.656 \mathtt B
_{n,k}(P_1,\dots,P_m,\dots)=\mathfrak B_{n,k}[\a^{( P)}_{\Ph...
Your command was ignored.

答案1

我可以用

\documentclass[a4paper]{book}
\usepackage{lmodern}
\usepackage{amsmath,amssymb}
\usepackage{MnSymbol}
\usepackage{stmaryrd}
\usepackage{shuffle}

\begin{document}
$\mathbf{A}\mathit{A}\mathsf{A}\mathbb{A}\mathtt{A}$
\end{document}

其中仅保留了数学字体相关的包。

必须知道,每个\DeclareSymbolFont声明都会使用 16 个可用数学组中的一个。默认设置分配从 0 到 3 的组,然后分配另外两个;四个由、一个由和一个由amssymb使用。总共十二个,因此文档中只能使用三个额外的数学字母表。MnSymbolstmaryrdshuffle

有些\mathX命令实际上并不使用新的数学字母表,例如\mathbb(它与 定义的数学组共享一个数学组amssymb),但 和 等命令并非\mathfrak如此\mathbf。数学字母表(使用 加载\DeclareMathAlphabet)仅在使用时分配一个数学组,因此在上面的代码中,前四个指令耗尽了可用的组,并且\mathtt无法找到分配组的位置。

您可以使用各种技术来避免浪费数学组。例如,shuffle可以通过以不同的方式定义包提供的符号来避免浪费数学组:

\documentclass[a4paper]{book}
\usepackage{lmodern}
\usepackage{amsmath,amssymb}
\usepackage{MnSymbol}
\usepackage{stmaryrd}
%\usepackage{shuffle}

\DeclareRobustCommand{\shuffle}{%
  \mathbin{\text{\usefont{U}{shuffle}{m}{n}\symbol{"001}}}%
}
\DeclareRobustCommand{\cshuffle}{%
  \mathbin{\text{\usefont{U}{shuffle}{m}{n}\symbol{"002}}}%
}


\begin{document}
$x\shuffle y\cshuffle z_{x\shuffle y\cshuffle z}$

$\mathbf{A}\mathit{A}\mathsf{A}\mathfrak{A}\mathtt{A}$
\end{document}

现在\mathtt可以使用了。但这并不能保证数学组不会再次被用完。对于该集合中最不常用的命令,您可以定义(较慢的)替代命令;例如,以下是不分配数学组的前言代码\mathtt

\AtBeginDocument{%
  \DeclareRobustCommand{\mathtt}[1]{%
    \text{\normalfont\ttfamily #1}%
  }%
}

答案2

看起来您那里有一些多余的包,它们占用了数学系列插槽(总共只有 16 个)。(请注意,amsart还会加载占用、等amsfonts更多插槽的包)。\mathfrak\mathbb

我不确定您是否真的需要 MnSymbol 包。如果我没错的话,有这个amssymb包就足够了。

我在网上找到了一个例子:

\documentclass[11pt]{amsart}
\usepackage{amsmath, amssymb, amscd, MnSymbol,mathrsfs}
\DeclareMathAlphabet{\mathbbm}{U}{bbm}{m}{n}% from bbm.sty
\begin{document}
\[
\mathbf A
\mathcal A
\mathfrak A
\mathscr A
\mathsf A
\mathbb A
\mathbbm a
\]
\end{document}

如果它编译通过,请告诉我。

相关内容