我在 Linux 上使用 TeXLive。我已经安装了esstix 包。在查看esstixfrak.sty
和之后stix2.sty
,我现在知道了在同一个文档中使用三种不同的 mathfrak 字体的一种方法。这是一个 MWE:
\documentclass{article}
\usepackage{newtxtext}
\usepackage{newtxmath}
% setting up mathfrak from stix2
\DeclareFontEncoding{LS1}{}{}
\DeclareFontSubstitution{LS1}{stix2}{m}{n}
\DeclareSymbolFont{STIX2symbols2} {LS1}{stix2frak} {m} {n}
\SetSymbolFont{STIX2symbols2} {bold}{LS1}{stix2frak} {b}{n}
\DeclareSymbolFontAlphabet{\STIXTwoMathfrak}{STIX2symbols2}
% setting up mathfrak from esstix
\DeclareMathAlphabet{\EsstixMathFrak}{U}{esstixfrak}{m}{n}
\begin{document}
$\mathfrak{E}\STIXTwoMathfrak{E}\EsstixMathFrak{E}$
\end{document}
txmiaX
这将使用字体按顺序、、STIXTwoMath
和生成 mathfrak“E” ESSTIX-Fifteen
。
\STIXTwoMathfrak
请注意和\EsstixMathFrak
的定义方式不同。
问题:
- 定义这些替代 mathfrak 命令的这两种方式有哪些优点和缺点?
- 是否可以
\EsstixMathFrak
以类似于定义的方式进行定义\STIXTwoMathfrak
,特别是无需声明新的数学字母表?
答案1
classic tex 每个数学表达式只有 16 个数学系列(luatex 有更多),符号字体必须预先分配一个数字作为命令,\Rightarrow
最终通过以下方式定义
\mathchardef\Rightarrow="3229
因此字体系列 2(第二个十六进制数字)必须是位置十六进制 29 用箭头编码的字体。
相反,如果命令(例如\mathbb
仅用作\mathbb{Q}
而从不用作符号)\mathchardef
LaTeX 可以按需分配这些命令(如果它们被使用),因此您可以宣布超过 16 个数学字母,但如果不使用,就不会分配。\DeclareMathAlphabet
有时,特别是\mathrm
在标准设置中,已为某些符号预先分配的字体在字母槽中也有一个数学字母,\DeclareSymbolFontAlphabet
设置数学字母以重新使用现有的分配。
因此,如果添加与主数学符号设置没有密切联系的“额外”数学字母,则几乎总是应该使用 \DeclareMathAlphabet rather than
\DeclareSymbolFontAlphabet`
在您的示例中,您声明了两个数学字母表,但如果您不使用 esstix 字母表,则它不会影响 16 个数学字体限制。当您通过 stix 2 分配时,\DeclareSymbolFont
它始终占用 16 个插槽中的一个(或 2 个,如果您加载bm
包)