![访问 STIX 字体的所有可能数学样式](https://linux22.com/image/427911/%E8%AE%BF%E9%97%AE%20STIX%20%E5%AD%97%E4%BD%93%E7%9A%84%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD%E6%95%B0%E5%AD%A6%E6%A0%B7%E5%BC%8F.png)
我使用xelatex
plusunicode-math
太久了,忘记怎么用了pdflatex
。听说 STIX 字体是 Times 系列字体的免费替代品。它们有多种样式和大量符号。然而,我反复陷入同一个陷阱,即我不知道如何正确调用不同的样式。
就在今天,我问了如何访问粗体书法风格,得到了这个很好的答案。我以为我的问题已经解决了,但后来我发现
\mathbfit
as well\bm
不会产生粗体倾斜希腊字母。我记得,我已经看到了解决方案。这里也有很多关于不同字体的讨论。我发现去年我有一个类似问题确实得到了很多有用的答案。但再次阅读可能专家解答Davislor 我明白我什么都不懂。为什么让 lambda 变成粗体这么难!?为什么作为用户而不是开发人员,我必须担心字体范围、假粗体和等值线?
但我希望尽可能缩小我的问题,以便得到一个全面的答案。我想知道如何访问全部 17 种可能的风格数学stix
字体以及此语法与访问全部 9 种可能的风格字体cm
。此外,我只对兼容的答案感兴趣pdflatex
。不允许替换字体。
下面是我的最小非工作示例
\documentclass[]{article}
\usepackage{stix}
\usepackage{amssymb,amsmath}
\newcommand{\symb}{aA\psi\Psi12}
\begin{document}
\begin{align}
%\mathup{\symb}\\
%\mathbfup{\symb}\\
\mathit{\symb}\\
\mathbfit{\symb}\\
%\mathsfup{\symb}\\
\mathsfit{\symb}\\
%\mathbfsfup{\symb}\\
\mathbfsfit{\symb}\\
\mathtt{\symb}\\
\mathbb{\symb}\\
\mathbbit{\symb}\\
\mathscr{\symb}\\
\mathbfscr{\symb}\\
\mathcal{\symb}\\
\mathbfcal{\symb}\\
\mathfrak{\symb}\\
\mathbffrak{\symb}
\end{align}
\end{document}
它给了我一个奇怪的错误
!LaTeX 错误:正常版本中使用了太多数学字母。
使其成为悬赏问题的摘要
我的最终目标是使尽可能多的上面介绍的命令以预测的方式在一个文档中发挥作用。
当然,没有人需要全部一个文档中的样式。因此上面引用的错误并不重要。但是一个合理的样式子集会很好。一个例子是除了常规变量之外,向量(粗体斜体,可能是书法)、矩阵、张量(粗体无衬线,有时是书法)、集合(mathbb)、代码(mathtt)。
我想解释一下为什么使用时需要
\mathbfcal
(甚至不在字母表中)DeclareMathAlphabet
,而使用\mathbfit{\psi}
希腊字母时需要选项lcgreekalpha
。特别是对于后者,我假设字体选择命令是一个低级命令,不像例如\emph
,它考虑了其他因素。但为什么需要lcgreekalpha
覆盖呢?
答案1
latex 数学字母表(与数学符号字体不同)是根据需要分配的。这意味着您可以宣布任意数量的数学字母,但您只能使用总共 16 种数学字体(数学符号字体和数学字母)。这 16 是 TeX 程序的硬性限制。
除了在单个文档中尝试使用所有可能的字体的测试文档外,很少需要这么多字母。所以我想说这是一个功能。
如果你真的需要访问那么多字体,您可以(有一些限制)将字体声明为文本字体或(可能更好)声明不同的数学版本(参见普通和粗体数学版本)并安排每个版本中可用的字体子集不同,每个版本不超过 16 个。
也就是说,stix 文档回答了您的问题并显示了所有可用的数学字母命令,它还警告您不能一次使用它们。
可能建议使用该stix2
包(基于Stix Two Math
字体),但命令本质上是相同的,并且其文档本质上具有相同的表格。
请注意,16 种数学字体的硬性限制是针对每个版本的,而不是针对每个文档的,在您的原始示例中,您必须注释掉 3 个数学字母命令以保持低于限制,但您可以声明具有相同初始声明的另一个数学版本,但其中使用不同的 16 个字母集,因此只要我注释掉其他一些字母,我就可以取消注释最后三个数学字母。
\documentclass[]{article}
\DeclareMathVersion{normal2}
\usepackage{amsmath}
\usepackage[lcgreekalpha]{stix}
\DeclareMathAlphabet\mathbfcal{LS2}{stixcal}{b}{n}
\newcommand{\symb}{aA\psi\Psi12}
\begin{document}
\begin{align}
\mathrm{\symb}\\
\mathbf{\symb}\\
\mathit{\symb}\\
\mathbfit{\symb}\\
\mathsfit{\symb}\\
\mathbfsfit{\symb}\\
\mathtt{\symb}\\
\mathbb{\symb}\\
\mathbbit{\symb}\\
\mathscr{\symb}\\
\mathbfscr{\symb}\\
\mathcal{\symb}\\
\mathbfcal{\symb}\\
\mathfrak{\symb}\\
%\mathsf{\symb}\\
%\mathbfsf{\symb}\\
%\mathbffrak{\symb}
\end{align}
\mathversion{normal2}
\begin{align}
\mathrm{\symb}\\
\mathbf{\symb}\\
\mathit{\symb}\\
\mathbfit{\symb}\\
\mathsfit{\symb}\\
\mathbfsfit{\symb}\\
\mathtt{\symb}\\
\mathbb{\symb}\\
\mathbbit{\symb}\\
\mathscr{\symb}\\
%\mathbfscr{\symb}\\
\mathcal{\symb}\\
%\mathbfcal{\symb}\\
%\mathfrak{\symb}\\
\mathsf{\symb}\\
\mathbfsf{\symb}\\
\mathbffrak{\symb}
\end{align}
\end{document}
请注意,有些字母表并不完整,例如 Fraktur 没有希腊文,这并不奇怪,因此如果将希腊文切换到 Fraktur,您将得到无意义的结果。如果没有该lcgreekalpha
选项,小写希腊文将保持无样式,但保持希腊文: