如何全局设置 ConTeXt 中所有 MetaPost 绘图的字体?

如何全局设置 ConTeXt 中所有 MetaPost 绘图的字体?

当我在 ConTeXt 中向 MetaPost 绘图添加标签时,它不会使用文档其余部分的字体,而是使用数学字体或 ConTeXt 使用的默认字体。例如,我可以为特定项目设置字体,但似乎不符合 ConTeXt 的label("\sourcefont This will appear with the correct font", (25,75));理念,我必须为每个标签设置字体(我有数百个标签)。有没有一种全局设置方法,要么在文档中的所有 MetaPost 绘图中设置,要么至少在 MetaPost 的开头设置,它将在放置标签的任何地方使用?

答案1

Metafun 标签的默认字体设置为meta-ini.mkivto MetafunDefaultwhich 是 which 的同义词Regular,通常是衬线文本字体,默认为拉丁现代罗马字体。

因此,您有两种选择来更改字体。

  1. 将同义词重置MetafunDefault为您选择的字体:

    \definefontsynonym [MetafunDefault] [file:texgyrepagella-regular*default]
    \starttext
    This is the text font
    
    \startMPcode
    label("This is the Metafun font", origin) ;
    \stopMPcode
    \stoptext
    
  2. 使用MPinitializationsdo 将defaultfont变量设置为不同的值。这是记录的方法,请参阅 10.3“标签”Metafun 手册

    \startMPinitializations
    defaultfont := "file:texgyrepagella-regular*default" ;
    \stopMPinitializations
    \starttext
    This is the text font
    
    \startMPcode
    label("This is the Metafun font", origin) ;
    \stopMPcode
    \stoptext
    

答案2

textstyle我使用MPinstance用于更改字体。默认的 metapost 图形是使用实例绘制的metafun。因此,您只需执行以下操作:

\setupMPinstance[metafun][textstyle={\sourcefont}]

这是一个完整的例子:

\setupbodyfont[modern,10pt]

\setupMPinstance[metafun][textstyle={\switchtobodyfont[pagella,10pt]}]

\starttext
This is the text font

\startMPcode
label("This is the Metafun font", origin) ;
\stopMPcode
\stoptext

这使

在此处输入图片描述

答案3

我犹豫着是否该回答这个问题,因为我读过MetaFun 手册仅适用\startMPenvironemnt \stopMPenvironment于 mkii,mkiv 不需要(参见第 10.2 节)。

无论如何,我已经成功地使用这种方法多年了:

\setupbodyfont[bonum]

\startbuffer[lefigure]
\startplacefigure[location=nonumber]
\startMPcode
draw fullcircle scaled 2cm;
label.rt(textext("east"),(1cm,0));
label.top(textext("north"),(0,1cm));
label.lft(textext("west"),(-1cm,0));
label.bot(textext("south"),(0,-1cm));
\stopMPcode
\stopplacefigure
\stopbuffer

\startTEXpage[offset=0.25in]
Normal text set with bonum. MetaPost figures uses the same font:

\getbuffer[lefigure]

\startMPenvironment
\setupbodyfont[latinmodern,ss,6pt]
\stopMPenvironment

Efter we have changed the bodyfont inside a \tex{startMPenvironment} \tex{stopMPenvironment}
we get this new font in our MetaPost figures:

\getbuffer[lefigure]
\stopTEXpage

该图显示了不同部分使用不同字体的结果

我不建议多次进行此类更改,而是一劳永逸。通常:

\setupbodyfont[bonum]
\startMPenvironment
\setupbodyfont[6pt]
\stopMPenvironment

\starttext
...
\stoptext

相关内容