ConTeXt:使用系统安装的 TrueType/OpenType 字体

ConTeXt:使用系统安装的 TrueType/OpenType 字体

我尝试在 ConTeXt 文档中使用 Cambria 作为文本,使用 Calibri 作为标题,但我完全不明白发生了什么,似乎没有任何效果,最后它又回到了 LMRoman/LMSans。

作为一个最小起点,我正在尝试重新创建此文档。我只需编译它,lualatex它就会找到我的字体,它们通过 fontconfig 在系统范围内安装。pdffonts显示嵌入了每个系列的两个 TrueType 字体,仅此而已。

\documentclass{minimal}
\usepackage{fontspec}
\setmainfont{Cambria}
\setsansfont{Calibri}
\begin{document}
Cambria \textsf{Calibri}
\emph{Cambria \textsf{Calibri}}
\end{document}

输出1

如何使用 ConTeXt 创建此文档?我尝试过这个:

\setupbodyfont[Cambria]
%no idea how to set sans
\starttext
Cambria \sans{Calibri}
\em{Cambria \sans{Calibri}}
\stoptext

输出2

但只得到了 LM,日志包含一个关于 的错误loc,而我的文件中没有提到,这是类型文件中的错误吗?它似乎试图对参数执行某些操作,但在加载之前失败了……

fonts           > typescripts > unknown library 'loc'
(/usr/local/texlive/2013/texmf-dist/tex/context/base/type-imp-cambria.mkiv)

据我所知,fontspec 和 ConTeXt 都使用 luatex 的工具来定位和加载字体,所以我不必手动安装它们,是这样的吗?在我的安装中,type-otf.mkiv除了一条注释声称这是不必要的,因为可以通过名称找到 OTF 字体外,其余内容为空。


\setupbodyfont[libertine]
\starttext ...

输出3

我得到 Biolinum 作为罗马字体,Libertine 作为无衬线字体,但仅仅是第一个\sans,里面的一切\em都是罗马字体。

答案1

有三种使用系统字体的方法。

  1. 编写自己的 typescript。ConTeXt 附带了大多数系统字体的 typescript。type-imp-*.mkiv详情请参阅。例如,calibra 的 typescript 定义在type-imp-calibra.mkiv,而 的 typescriptcalibiri定义在type-imp-cleartype.mkiv。要使用它们,您需要定义自己的 typescript 来设置衬线和无衬线字体。例如(这不是\em字体开关,也不是字体命令):

    \usetypescriptfile[cleartype]
    
    \starttypescript[mainface]
      \definetypeface  [mainface] [rm] [serif] [cambria] [default]
      \definetypeface  [mainface] [ss] [sans]  [calibri] [default]
      \definetypeface  [mainface] [tt] [mono]  [consolas][default]
      \definetypeface  [mainface] [mm] [math]  [cambria] [default]
    \stoptypescript
    
    \setupbodyfont[mainface]
    
    \starttext
    Cambria \sans{Calibri}
    {\em Cambria \sans{Calibri}}
    \stoptext
    

    这使

    在此处输入图片描述

  2. 另一个选项是使用simplefonts模块,它将自动创建适当的 TypeScript 字体。例如:

    \usemodule[simplefonts]
    
    \setmainfont[Cambria]
    \setsansfont[Calibri]
    

    其结果与之前相同。

  3. 在 ConTeXt MKIV 的最新版本中,该simplefonts模块已经被取代,\definefontfamily它是核心的一部分。

    \definefontfamily [mainface] [rm] [Cambria]
    \definefontfamily [mainface] [ss] [Calibri]
    \definefontfamily [mainface] [tt] [Consolas]
    \definefontfamily [mainface] [mm] [Asana Math]
    
    \setupbodyfont[mainface]
    

    这与上面的效果相同。但请记住,您必须设置全部字体,即rmssttmm。否则可能会发生奇怪的事情。

答案2

就像执行以下命令一样简单...

如果你的OSFONTDIR环境变量是正确设置,那么在现代版本的 ConTeXt 中安装(新)系统字体应该就像执行以下命令一样简单:

$ mtxrun --script fonts --reload

相关内容