ConTeXt:字体粗细

ConTeXt:字体粗细

在 ConTeXt 中,除了常规和粗体之外,还有其他规范的方法来访问字体粗细吗?有不是工作:

\definefontfamily [myfamily] [serif][Calluna]
\definefontfamily [myfamily] [sans] [Calluna Sans Light]

\setupbodyfont [myfamily]

\starttext
1. Avec Serif\\
{\ss 2. Sans Serif}
\blank
\it 3. Avec Serif\\
\ss\bi 4. Sans Serif
\stoptext

第 1 行和第 3 行显示正常,分别为常规衬线和常规斜体衬线;包含的行\ss显示为常规衬线。如果我在系列定义中省略,则Light一切都按预期工作,即第 2 行显示为常规无衬线,第 4 行显示为粗体无衬线斜体。

我确实有这些字体,Gnome 字体管理器也知道它们,而且mtxrun --script fonts --list --all --pattern=Calluna*

calluna                     callunablack                /home/thomas/.local/share/fonts/exljbris - Calluna-Black.otf
callunablack                callunablack                /home/thomas/.local/share/fonts/exljbris - Calluna-Black.otf
callunabold                 callunabold                 /home/thomas/.local/share/fonts/exljbris - Calluna-Bold.otf
callunaboldit               callunaboldit               /home/thomas/.local/share/fonts/exljbris - Calluna-BoldIt.otf
callunabolditalic           callunaboldit               /home/thomas/.local/share/fonts/exljbris - Calluna-BoldIt.otf
callunait                   callunait                   /home/thomas/.local/share/fonts/exljbris - Calluna-It.otf
callunaitalic               callunait                   /home/thomas/.local/share/fonts/exljbris - Calluna-It.otf
callunalight                callunalight                /home/thomas/.local/share/fonts/exljbris - Calluna-Light.otf
callunanormal               callunait                   /home/thomas/.local/share/fonts/exljbris - Calluna-It.otf
callunaregular              callunaregular              /home/thomas/.local/share/fonts/exljbris - Calluna-Regular.otf
callunasans                 callunasansblack            /home/thomas/.local/share/fonts/CallunaSansBlack.otf
callunasansblack            callunasansblack            /home/thomas/.local/share/fonts/CallunaSansBlack.otf
callunasansblackitalic      callunasansblackitalic      /home/thomas/.local/share/fonts/CallunaSansBlackItalic.otf
callunasansbold             callunasansbold             /home/thomas/.local/share/fonts/CallunaSansBold.otf
callunasansbolditalic       callunasansbolditalic       /home/thomas/.local/share/fonts/CallunaSansBoldItalic.otf
callunasansdemibold         callunasanssemibold         /home/thomas/.local/share/fonts/CallunaSansSemiBold.otf
callunasansitalic           callunasansitalic           /home/thomas/.local/share/fonts/exljbris - CallunaSans-Italic.otf
callunasanslight            callunasanslight            /home/thomas/.local/share/fonts/CallunaSansLight.otf
callunasanslightitalic      callunasanslightitalic      /home/thomas/.local/share/fonts/CallunaSansLightItalic.otf
callunasansnormal           callunasansitalic           /home/thomas/.local/share/fonts/exljbris - CallunaSans-Italic.otf
callunasansregular          callunasansregular          /home/thomas/.local/share/fonts/exljbris - CallunaSans-Regular.otf
callunasanssemibold         callunasanssemibold         /home/thomas/.local/share/fonts/CallunaSansSemiBold.otf
callunasanssemibolditalic   callunasanssemibolditalic   /home/thomas/.local/share/fonts/CallunaSansSemiBoldItalic.otf
callunasemibold             callunasemibold             /home/thomas/.local/share/fonts/exljbris - Calluna-Semibold.otf
callunasemiboldit           callunasemiboldit           /home/thomas/.local/share/fonts/exljbris - Calluna-SemiboldIt.otf

callunasanslight代替Calluna Sans Light也行不通。我试图使用 Sans Light 和 Sans Semibold 代替 Sans 和 Sans Bold。但除了 和 之外,如果能有 light、semibold 和 heavy 字体切换就更好\bf\tf

顺便说一句:更大的问题实际上是:在 ConTeXt 中哪里可以找到关于此类内容的文档???ConTeXt对于谷歌来说这是一个很难找到的词!

编辑:我找到了一种解决此问题的方法,至少是部分解决此问题:

\definefontfamily [myfamily][sans] [Calluna Sans]
                  [tf=Calluna Sans Light,
                   it=Calluna Sans Light Italic,
                   bf=Calluna Sans SemiBold,
                   bi=Calluna Sans SemiBold Italic,
                   sc=Calluna Sans Light]

它不在定义或描述\definefontfamily语境花园。那里根本没有描述,只有一些例子。

无论如何,我仍然缺少(a)半粗体小型大写字母和(b)一种使所有粗细“同时”可访问的方法。

答案1

要使用单一字体访问更多替代方案,您必须先使用命令创建其他替代方案\definefontalternative。在我的示例中,我为浅色和中等样式添加了新定义,对于替代方案本身的名称,每个名称只能有两个字母,并且您应确保不会覆盖任何重要命令,例如,下面我覆盖了语言切换,您lithuanian可以忽略它,因为您仍然可以\language[lt]在文档中使用。

\definefontalternative[lt] % light
\definefontalternative[li] % lightitalic
\definefontalternative[md] % medium
\definefontalternative[mi] % mediumitalic

现在,您可以在打字稿中添加浅色和中等样式的条目,并将同义词映射到字体文件,对于同义词的名称,您应该坚持默认名称,例如,我使用的SerifLight字体是浅色样式。

\starttypescript [serif] [antykwa-torunska-extended]
  \definefontsynonym [SerifLight]        [file:antykwatorunskalightregular] [features=default]
  \definefontsynonym [SerifLightItalic]  [file:antykwatorunskalightitalic]  [features=default]
  \definefontsynonym [Serif]             [file:antykwatorunskaRegular]      [features=default]
  \definefontsynonym [SerifItalic]       [file:antykwatorunskaitalic]       [features=default]
  \definefontsynonym [SerifMedium]       [file:antykwatorunskamedregular]    [features=default]
  \definefontsynonym [SerifMediumItalic] [file:antykwatorunskameditalic]   [features=default]
  \definefontsynonym [SerifBold]         [file:antykwatorunskabold]         [features=default]
  \definefontsynonym [SerifBoldItalic]   [file:antykwatorunskabolditalic]   [features=default]
  \definefontsynonym [SerifCaps]         [file:antykwatorunskaregular]      [features=smallcaps]
\stoptypescript

现在到了重要的部分,我将使用命令将轻量和中等样式的文件分配给其他替代方案\definebodyfont

\starttypescript [serif] [antykwa-torunska-extended]
  \definebodyfont [default] [rm]
     [lt=SerifLight sa 1,
      li=SerifLightItalic sa 1,
      tf=Serif sa 1,
      it=SerifItalic sa 1,
      md=SerifMedium sa 1,
      mi=SerifMediumItalic sa 1,
      bf=SerifBold sa 1,
      bi=SerifBoldItalic sa 1,
      sc=SerifCaps sa 1]
\stoptypescript

完成后,我现在可以创建一种支持除默认提供的字体之外的替代字体的新字体(\tf\it)。

\definetypeface[antykwa-torunska-extended][rm][serif][antykwa-torunska-extended][default]

\setupbodyfont[antykwa-torunska-extended]

\starttext

\starttabulate[|l|l|]
\NC \tex{lt} \NC \lt Light        \NC\NR
\NC \tex{li} \NC \li LightItalic  \NC\NR
\NC \tex{tf} \NC \tf Regular      \NC\NR
\NC \tex{it} \NC \it Italic       \NC\NR
\NC \tex{md} \NC \md Medium       \NC\NR
\NC \tex{mi} \NC \mi MediumItalic \NC\NR
\NC \tex{bf} \NC \bf Bold         \NC\NR
\NC \tex{bi} \NC \bi BoldItalic   \NC\NR
\NC \tex{sc} \NC \sc SmallCaps    \NC\NR
\stoptabulate

\stoptext

ConTeXt 的新字体替代示例

答案2

我对 ConTeXt 还比较陌生,但我认为解决任何字体加载问题的规范方法是编写 typescript。要访问半粗体小写字母,您必须执行\setff{smallcaps}\bf。这是因为\sc\bf不是可加的(就像在 Plain TeX 中一样)。一旦您使用 切换到小写字母,\setff您就可以使用助记符字体开关访问所有不同的样式。

我没有专有的 Calluna 字体,所以我使用 TeX Gyre Termes 和 TeX Gyre Heros。只需替换文件即可应该工作。

\starttypescriptcollection [calluna]

  \starttypescript [serif] [calluna]
    \definefontsynonym [Serif]           [file:texgyretermes-regular.otf]    [features=default]
    \definefontsynonym [SerifItalic]     [file:texgyretermes-italic.otf]     [features=default]
    \definefontsynonym [SerifBold]       [file:texgyretermes-bold.otf]       [features=default]
    \definefontsynonym [SerifBoldItalic] [file:texgyretermes-bolditalic.otf] [features=default]
    \definefontsynonym [SerifCaps]       [file:texgyretermes-regular.otf]    [features=smallcaps]
  \stoptypescript

  \starttypescript [sans] [calluna]
    \definefontsynonym [Sans]           [file:texgyreheros-regular.otf]    [features=default]
    \definefontsynonym [SansItalic]     [file:texgyreheros-italic.otf]     [features=default]
    \definefontsynonym [SansBold]       [file:texgyreheros-bold.otf]       [features=default]
    \definefontsynonym [SansBoldItalic] [file:texgyreheros-bolditalic.otf] [features=default]
    \definefontsynonym [SansCaps]       [file:texgyreheros-regular.otf]    [features=smallcaps]
  \stoptypescript

  \starttypescript [calluna]
    \definetypeface [calluna] [rm] [serif] [calluna] [default] [features=default]
    \definetypeface [calluna] [ss] [sans]  [calluna] [default] [features=default]
  \stoptypescript

\stoptypescriptcollection

\setupbodyfont[calluna]

\starttext
{
  \tf Serif
  \it SerifItalic
  \bf SerifBold
  \bi SerifBoldItalic
}

{
  \setff{smallcaps}
  \tf serifcaps
  \it serifitaliccaps
  \bf serifboldcaps
  \bi serifbolditaliccaps
}

{
  \ss Sans
  \it SansItalic
  \bf SansBold
  \bi SansBoldItalic
}

{
  \setff{smallcaps}
  \ss SansCaps
  \it SansItalicCaps
  \bf SansBoldCaps
  \bi SansBoldItalicCaps
}
\stoptext

在此处输入图片描述

答案3

如果你不想使用打字稿:

\definefontalternative[LT] % Using capitals avoids command shadowing
\definefontalternative[MD]

\definefontfamily [calluna]
  [sans]
  [Calluna Sans]
  [
    LT=Calluna Sans Light,
    MD=Calluna Sans Medium,
  ]

\setupbodyfont [calluna]

类似地,你可以定义你需要的任何其他权重,但请记住你限制为两个字符(下一个字符设置字体的大小)。

也要使用小型大写字母,简单\MD\smallcaps就可以了。

相关内容