ConTeXt:typescript 的奇怪问题

ConTeXt:typescript 的奇怪问题

我正在尝试使用我的电脑上安装的一些字体,如下typescript所述在这篇文章中以便创建一些花哨的标题,但我有一个奇怪的问题\setuphead

\switchtobodyfont以下是使用in\setuphead的示例style

\starttypescriptcollection [fira]
  \starttypescript [sans] [fira]
    \setups[font:fallback:sans]
    \definefontsynonym [Sans]           [file:FiraSans-Regular.otf]       [features=default]
    \definefontsynonym [SansItalic]     [file:FiraSans-RegularItalic.otf] [features=default]
    \definefontsynonym [SansBold]       [file:FiraSans-Bold.otf]          [features=default]
    \definefontsynonym [SansBoldItalic] [file:FiraSans-BoldItalic.otf]    [features=default]
    \definefontsynonym [SansCaps]       [file:FiraSans-Regular.otf]       [features={default,smallcaps}]
  \stoptypescript

  \starttypescript [mono] [fira]
    \setups[font:fallback:mono]
    \definefontsynonym [Mono]     [file:FiraMono-Medium.otf] [features=default]
    \definefontsynonym [MonoBold] [file:FiraMono-Bold.otf]   [features=default]
  \stoptypescript

  \starttypescript [math] [fira]
    \definefontsynonym [MathRoman] [file:Fira-Math.otf] [features=mathextra]
  \stoptypescript

  \starttypescript [fira]
    \definetypeface [\typescriptone] [rm] [serif] [modern] [default]
    \definetypeface [\typescriptone] [ss] [sans]  [fira]   [default]
    \definetypeface [\typescriptone] [tt] [mono]  [fira]   [default]
    \definetypeface [\typescriptone] [mm] [math]  [fira]   [default]
    \quittypescriptscanning
  \stoptypescript
\stoptypescriptcollection



\setuphead[section][style={\switchtobodyfont[fira,sans]}]

\starttext
  \section{section 1}
  \section{section 2}
  \section{section 3}
\stoptext

这里发生了什么?

答案1

当您为新字体编写打字稿时,ConTeXt 会存储这些设置,但此时不会加载任何字体,这允许复杂的打字稿定义,其中直立、斜体等样式可以在加载字体时更改,这对于大型字体系列很有用。

一旦您使用命令创建字体,\definetypefaceConTeXt 就会加载所有必要的打字稿,但这在常规文本中执行此操作时可能会出现问题,因为打字稿块中的许多行尾都会产生额外的空格,并出现在输出中。

在下面的示例中,我为TeX Gyre Pagella字体创建了一个简单的打字稿。问题是,我\hbox在水平模式下加载字体时,会清除打字稿中的所有空格。

\starttypescript [serif] [tex-gyre-pagella]
    \definefontsynonym [Serif]           [file:texgyrepagellaregular]    [features=default]
    \definefontsynonym [SerifItalic]     [file:texgyrepagellaitalic]     [features=default]
    \definefontsynonym [SerifBold]       [file:texgyrepagellabold]       [features=default]
    \definefontsynonym [SerifBoldItalic] [file:texgyrepagellabolditalic] [features=default]
\stoptypescript

\starttypescript [tgy]
    \definetypeface [tgy] [rm] [serif] [tex-gyre-pagella]
\stoptypescript

\starttext

\ruledhbox{\strut\space}

\ruledhbox{\strut\space\switchtobodyfont[tgy]}

\ruledhbox{\strut\space\ntimes{\kern\spaceamount}{5}}

\stoptext

我的打字稿中设置末尾的每个换行符\definefontsynonym都会创建一个可见空间,并且会从设置中创建一个额外的空间\definetypeface

在此处输入图片描述

为了避免这个问题,你可以删除在加载字体之前加载所有必要的打字稿typescript的命令环境,例如\definetypeface

\definetypeface [tgy] [rm] [serif] [tex-gyre-pagella]

或者在将要使用的打字稿加载到文档之前先预加载它,例如

\usetypescript[tgy]

相关内容