这是一个基本问题,但坦白说,我真的不明白字体在 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