在 ConTeXt 中设置数学字体

在 ConTeXt 中设置数学字体

这是一个基本问题,但坦白说,我真的不明白字体在 ConTeXt 中是如何工作的。我看过 ConTeXt Garden wiki,但我想没什么收获。

我正在尝试 ConTeXt,我想像在 LaTeX 中一样设置我的数学模式字体,即:

\mathrm{A} % for Roman font
\mathcal{B} % for default calligraphic font
\mathscr{C} % for RSFS calligraphic font
\mathfrak{D} % for default fraktur / gothic font
\mathsf{E} % for default sans-serif font
\EuScr{F} % for Euler script calligraphic font

我可以让 A、B 和 D 工作,但我不知道如何在不覆盖的情况下添加 rsfs \mathcal,我根本不知道如何让\mathsf欧拉脚本工作。如果相关的话,我会使用 ConTeXt Mk IV。

答案1

我们从最简单的开始,\mathsf因为这个其实已经存在了,只是名字是\mathss,就像文本开关一样\ss。如果你愿意\mathsf,你可以使用指定不同的名称\let

对于 RSFS 和 EuScript 字体来说,这有点棘手,因为它们是旧版 TFM 字体,因此必须修改低级字体设置才能使它们正常工作。对于 RSFS,在 Garden [1] 中还有一个 Wiki 页面,您可以从中直接复制粘贴设置。EuScript 设置的工作原理相同,但 TFM 名称和 skewchar 不同。

请记住,OpenType 中的拉丁现代数学数学脚本字母表只是 EuScript 字母表,但有倾斜,因此很容易混淆!您可以使用不同的数学字体,也可以使用不同的脚本字体作为后备字体。当然,您也可以加载另一种旧字体\mathcal。在下面的 MWE 中,我加载了 Computer Modern 脚本字体。

警告:如果您需要粗体或小写,那么所有这些都将完全崩溃。


[1]https://wiki.contextgarden.net/Rsfs这里只适用“字体使用不当”一节。第一节仅适用于 MKII。

% Sans-serif math is there, it just has a different macro name

\let\mathsf=\mathss

% Load legacy fonts

\font\tensy  =cmsy10 at \mathstyleface\textstyle
\font\sevensy=cmsy7  at \mathstyleface\scriptstyle
\font\fivesy =cmsy5  at \mathstyleface\scriptscriptstyle

\font\tenscr  =rsfs10 at \mathstyleface\textstyle
\font\sevenscr=rsfs7  at \mathstyleface\scriptstyle
\font\fivescr =rsfs5  at \mathstyleface\scriptscriptstyle

\font\teneuscr  =eusm10 at \mathstyleface\textstyle
\font\seveneuscr=eusm7  at \mathstyleface\scriptstyle
\font\fiveeuscr =eusm5  at \mathstyleface\scriptscriptstyle

% \skewchar

\skewchar\tensy  ='60
\skewchar\sevensy='60
\skewchar\fivesy ='60

\skewchar\tenscr  ='177
\skewchar\sevenscr='177
\skewchar\fivescr ='177

\skewchar\teneuscr  ='60
\skewchar\seveneuscr='60
\skewchar\fiveeuscr ='60

% Allocate family

\newfam\calfam
\newfam\scrfam
\newfam\euscrfam

% Assign font families

\textfont        \calfam=\tensy
\scriptfont      \calfam=\sevensy
\scriptscriptfont\calfam=\fivesy

\textfont        \scrfam=\tenscr
\scriptfont      \scrfam=\sevenscr
\scriptscriptfont\scrfam=\fivescr

\textfont        \euscrfam=\teneuscr
\scriptfont      \euscrfam=\seveneuscr
\scriptscriptfont\euscrfam=\fiveeuscr

% Make a macro wrapper

% Backup original definition of \cal and \mathcal
\let\normalcal\cal
\let\normalmathcal\mathcal

\def\cal{\fam\calfam}
\unexpanded\def\mathcal#1{{\cal#1}}

\def\scr{\fam\scrfam}
\unexpanded\def\mathscr#1{{\scr#1}}

\def\euscr{\fam\euscrfam}
\unexpanded\def\EuScr#1{{\euscr#1}}

\starttext
\startformula
\mathrm{A} % for Roman font
\mathcal{B} % for default calligraphic font
\mathscr{C} % for RSFS calligraphic font
\mathfrak{D} % for default fraktur / gothic font
\mathsf{E} % for default sans-serif font
\EuScr{F} % for Euler script calligraphic font
\stopformula
\stoptext

在此处输入图片描述

相关内容