返回在 ConTeXt 内加载和定义新字体 字体的定义和加载主要有 2 中方法,通过
definefont或者
Typescript + definefontsynonym。
definefont
使用 ConTeXt 已有的字体(可以通过 mxtrun 查到的字体),先通过 definefont 定义,再通过 \+定义的字体名 来使用。SourceHanSerifSC 使用时要确保 ConTeXt 已经安装这个字体。
\definefont[mysong] [file:SourceHanSerifSC-Regular]
\setupbodyfont[12pt]
\mysong 人之初,性本善。性相近,习相远。\\
{\mysong\bold 苟不教,性乃迁。教之道,贵以专。\\}
\switchtobodyfont[20pt]
\mysong 人之初,性本善。性相近,习相远。\\
文件编译以后可以看到 loaded fonts:sourcehanserifsc-regular.otf 表示字体加载成功。
文件结果:
这种定义方法有一个明显的弊端,不具备粗体样式,导致文字不能显示。并且在设置全文字体时不友好。
Typescript+definefontsynonym
为了在文章中使用字体的完整样式,ConTeXt 提供了typescript来映射电脑内的字体到 ConTeXt 内可以使用的字体。
typescript通过包围命令定义:
\starttypescript[style][name of typescript]
……
\stoptypescript
其中,style 的选项有: serief, sans, mono, math, calligraphy, handwriting
在setup中,有3个步骤定义字体
1. 通过\definefontsynonym[fontname][file:font filename]映射字体文件名到字体名
\starttypescript[serif][SiyuanSong]
\definefontsynonym[sysongregular] [file:SourceHanSerifSC-Regular]
\definefontsynonym[sysongbold] [file:SourceHanSerifSC-Bold]
\stoptypescript
2. 通过\definefontsynonym[style][font name]映射字体族名到字体名
\starttypescript[serif][SiyuanSong]
\definefontsynonym[Serif] [sysongregular] [features=default]
\definefontsynonym[SerifBold] [sysongbold] [features=default]
\stoptypescript
3. 通过\definetypeface创建新字体,连接刚刚创建的fontsynonym到对应的字体样式。
\starttypescript[mySong]
\definetypeface[mySong][rm][serif][SiyuanSong][default]
\stoptypescript
定义好字体以后,可以通过以下代码使用。
\usetypescript[mySong]
\setupbodyfont[mySong,12pt]
人之初,性本善。性相近,习相远。\\
{\bold 苟不教,性乃迁。教之道,贵以专。\\}
\switchtobodyfont[20pt]
昔孟母,择邻处。子不学,断机杼。
以上是一种字体的定义方法,有的文章内可能会同时用到宋体,黑体,楷体。我们可以使用1和2把字体都定义好,然后通过 typeface 把他们映射到 rm,ss 风格上。
\starttypescript[serif][SiyuanSong]
\definefontsynonym[sysongregular] [name:sourcehanserifsc]
\definefontsynonym[sysongbold] [name:sourcehanserifscbold]
\stoptypescript
\starttypescript[serif][SiyuanSong]
\definefontsynonym[Serif] [sysongregular] [features=default]
\definefontsynonym[SerifBold] [sysongbold] [features=default]
\stoptypescript
\starttypescript[siyuan]
\definetypeface[siyuan][rm][serif][SiyuanSong][default]
\definetypeface[siyuan][ss][sans][SiyuanHei][default]
\stoptypescript
这样可以通过rm和ss迅速转换宋体和黑体。
{\rm 人之初,性本善。性相近,习相远。\\
\bf 苟不教,性乃迁。教之道,贵以专。\\}
{\ss 人之初,性本善。性相近,习相远。\\
\bf 苟不教,性乃迁。教之道,贵以专。\\}