ConTeXt:使用附加的非标准样式、替代和大小定义字体

ConTeXt:使用附加的非标准样式、替代和大小定义字体

如何定义具有其他非标准样式、替代和大小的字体?例如,这些字体:

鸬鹚[1][2]

  • 样式:Cormorant、Garamond、Infant、SC、Unicase、Upright
  • 备择方案:细体、细斜体、常规、斜体、中体、中斜体、半粗体、半粗斜体、粗体、粗斜体
  • 尺寸: 文本

錦[3]

  • 样式:单色、无字体、窄无字体、衬线字体、窄衬线字体
  • 备择方案:常规、斜体、粗斜体
  • 尺寸:文字,标题

利伯提努斯[4]

  • 样式:单色、无衬线、衬线
  • 备择方案:常规、斜体、半粗体、半粗斜体、粗体、粗斜体
  • 尺寸:文本,显示

ConTeXt 参考手册[5] 以及ConTeXt:字体粗细[6] 这个网站上的答案,我试过了(阅读评论,它们很重要):

% I don't know if features go with `definetypeface` or `definefontsynonym`. The
% reference manual shows it both ways. Perhaps it is a MkII vs MkIV thing?
\starttypescript [cormorant]
    \definetypeface[cormorant] [rmcm] [serifcormorant]  [cormorant] [default] [features=default]
    \definetypeface[cormorant] [rmgm] [serifgaramond]   [cormorant] [default] [features=default]
    \definetypeface[cormorant] [rmif] [serifinfant]     [cormorant] [default] [features=default]
    \definetypeface[cormorant] [rmur] [serifupright]    [cormorant] [default] [features=default]
    % Right, so these two are both provided as uppercase-only font files. Since the
    % fonts come this way, we don't need to use `features=smallcaps` to switch
    % smallcaps on. Right?
    \definetypeface[cormorant] [rmuc] [serifunicase]    [cormorant] [default] [features=default]
    \definetypeface[cormorant] [rmsc] [serifsc]         [cormorant] [default] [features=default]
\stoptypescript

% Do this for each style:
% ...
\starttypescript [serifcormorant] [cormorant] [name]
    \definefontsynonym [SerifLight]             [name:CormorantLight]
    \definefontsynonym [SerifLightItalic]       [name:CormorantLightItalic]
    \definefontsynonym [Serif]                  [name:CormorantRegular]
    \definefontsynonym [SerifItalic]            [name:CormorantItalic]
    \definefontsynonym [SerifMedium]            [name:CormorantMedium]
    \definefontsynonym [SerifMediumItalic]      [name:CormorantMediumItalic]
    \definefontsynonym [SerifSemiBold]          [name:CormorantSemiBold]
    \definefontsynonym [SerifSemiBoldItalic]    [name:CormorantSemiBoldItalic]
    \definefontsynonym [SerifBold]              [name:CormorantBold]
    \definefontsynonym [SerifBoldItalic]        [name:CormorantBoldItalic]
\stoptypescript

% Do this for each style:
% ...
\starttypescript [serifcormorant] [default] [size]
    \definebodyfont [default] [rmcm]
        % Additional size/alternative combinations are automatically created by
        % ConTeXt.
        %
        % Also according to the manual `definebodyfont` automatically creates macros
        % for each argument, i.e. the `\lt` macro and the `\li` macro and so on are all
        % automatically created by this command.
        [lt=SerifLight sa 1,
         li=SerifLightItalic sa 1,
         tf=Serif sa 1,
         it=SerifItalic sa 1,
         md=SerifMedium sa 1,
         mi=SerifMediumItalic sa 1,
         sb=SerifSemiBold sa 1,
         si=SerifSemiBoldItalic sa 1,
         bf=SerifBold sa 1,
         bi=SerifBoldItalic sa 1,
        ]

% Here we should probably link the standard style macros to the new variants:
%   \rm -> rmcm
%   \sc -> rmsc
% Somehow...

% Right now there are 60 style-alternatives combinations (6 styles * 10
% alternatives). They are duplicated for each `definebodyfont` and
% `definefontsynonym` groups. Alternatively, instead of 6 styles, we can
% keep one style (roman/serif) and define a massive list of 60 alternatives
% in `\definebodyfont` (SerifLight, GaramondSerifLight, InfantSerifLight,
% ..., Serif, GaramondSerif, InfantSerif, ..., SerifBold,
% GaramondSerifBold, InfantSerifBold, ...), which is about half as much
% text. There are enough two-letter combinations (576>60) but they wouldn't
% make sense as abbreviations. Rather, I'd chose alternatives as [aa, ab,
% ac, ad, ..., ba, bb, bc, bd, ...]. I also think it would be confusing to
% mix true *styles* with *alternatives*.

嗯,这确实很令人沮丧,也不起作用,但无论如何,让我们继续讨论不同的字体大小。

\starttypescript [libertinus]
    \definetypeface[libertinus] [rm] [serif] [libertinus] [default]
    \definetypeface[libertinus] [ss] [sans]  [libertinus] [default]
    \definetypeface[libertinus] [tt] [mono]  [libertinus] [default]
\stoptypescript

% Do this for each style:
% ...
% Keep in mind that unlike the cormorant font, each style does not have every
% possible alternative. For example, "Sans" is lacking all SemiBold variations
% as well as BoldItalic.
\starttypescript [serif] [libertinus] [name]
    \definefontsynonym [Serif]                  [name:LibertinusSerifRegular]
    \definefontsynonym [SerifItalic]            [name:LibertinusSerifRegular]
    \definefontsynonym [SerifSemiBold]          [name:LibertinusSerifSemiBold]
    \definefontsynonym [SerifSemiBoldItalic]    [name:LibertinusSerifSemiBoldItalic]
    \definefontsynonym [SerifBold]              [name:LibertinusSerifBold]
    \definefontsynonym [SerifBoldItalic]        [name:LibertinusSerifBoldItalic]
    % And now for the font size variants:
    \definefontsynonym [SerifDisplay]           [name:LibertinusSerifDisplayRegular]
    % ... which happen to be defined only for the regular alternative of the serif style.
\stoptypescript

% Do this for each style. However only the serif style provides the *display*
% sizes, and without any alternatives.
\starttypescript
    % According to the reference manual section 5.8.1, when `\setupbodyfont` and
    % `\switchtobodyfont` are given undefined font sizes, they will extrapolate
    % values from the nearest smaller body font environment. Unfortunately this
    % only applies to relative font environments and not individual fonts. So I
    % have to specify every font size, otherwise the default case is used. Which is
    % impossible.
    %
    % For example, I want:
    %   >=20pt
    % What I have to do:
    %   20pt, 20.001pt, 20.01pt, 20.1pt, 20.101pt, 20.11pt, ..., 20.999pt, ..., 21pt, ..., 22pt, ..., 30pt, ..., 100pt, ..., Infpt
    % What I actually end up doing. Some terminal-foo plus copy-paste:
    %   $ python3 -c 'print("pt, ".join(map(lambda i: str(i/2),range(40,200))) + "pt")'
    \definebodyfont [20.0pt,20.5pt,21.0pt,21.5pt,22.0pt,22.5pt,23.0pt,23.5pt,24.0pt,24.5pt,25.0pt,25.5pt,26.0pt,26.5pt,27.0pt,27.5pt,28.0pt,28.5pt,29.0pt,29.5pt,30.0pt,30.5pt,31.0pt,31.5pt,32.0pt,32.5pt,33.0pt,33.5pt,34.0pt,34.5pt,35.0pt,35.5pt,36.0pt,36.5pt,37.0pt,37.5pt,38.0pt,38.5pt,39.0pt,39.5pt,40.0pt,40.5pt,41.0pt,41.5pt,42.0pt,42.5pt,43.0pt,43.5pt,44.0pt,44.5pt,45.0pt,45.5pt,46.0pt,46.5pt,47.0pt,47.5pt,48.0pt,48.5pt,49.0pt,49.5pt,50.0pt,50.5pt,51.0pt,51.5pt,52.0pt,52.5pt,53.0pt,53.5pt,54.0pt,54.5pt,55.0pt,55.5pt,56.0pt,56.5pt,57.0pt,57.5pt,58.0pt,58.5pt,59.0pt,59.5pt,60.0pt,60.5pt,61.0pt,61.5pt,62.0pt,62.5pt,63.0pt,63.5pt,64.0pt,64.5pt,65.0pt,65.5pt,66.0pt,66.5pt,67.0pt,67.5pt,68.0pt,68.5pt,69.0pt,69.5pt,70.0pt,70.5pt,71.0pt,71.5pt,72.0pt,72.5pt,73.0pt,73.5pt,74.0pt,74.5pt,75.0pt,75.5pt,76.0pt,76.5pt,77.0pt,77.5pt,78.0pt,78.5pt,79.0pt,79.5pt,80.0pt,80.5pt,81.0pt,81.5pt,82.0pt,82.5pt,83.0pt,83.5pt,84.0pt,84.5pt,85.0pt,85.5pt,86.0pt,86.5pt,87.0pt,87.5pt,88.0pt,88.5pt,89.0pt,89.5pt,90.0pt,90.5pt,91.0pt,91.5pt,92.0pt,92.5pt,93.0pt,93.5pt,94.0pt,94.5pt,95.0pt,95.5pt,96.0pt,96.5pt,97.0pt,97.5pt,98.0pt,98.5pt,99.0pt,99.5pt] [rm]
        % Which is sub-par because TeX defaults to oddly specific font-sizes:
        %   12pt, 14.4pt, 17.3pt, 20.7pt, ...
        %
        % I also don't know what concrete sizes to use for suggestions like "caption"
        % or "display". Less than 9pt, 8pt, 5pt? More than 20pt, 30pt, 40pt?
        [tf=SerifDisplay sa 1,
         it=SerifItalic sa 1,
         sb=SerifSemiBold sa 1,
         si=SerifSemiBoldItalic sa 1,
         bf=SerifBold sa 1,
         bi=SerifBoldItalic sa 1,
        ]
    % The catch-all case:
    \definebodyfont [default] [rm]
        [tf=Serif sa 1,
         it=SerifItalic sa 1,
         sb=SerifSemiBold sa 1,
         si=SerifSemiBoldItalic sa 1,
         bf=SerifBold sa 1,
         bi=SerifBoldItalic sa 1,
        ]
\stoptypescript

更令人沮丧的是:这也不起作用。

链接:

  1. https://github.com/CatharsisFonts/Cormorant
  2. https://www.behance.net/gallery/28579883/Cormorant-an-open-source-display-font-family
  3. https://company.paratype.com/pt-sans-pt-serif
  4. https://github.com/libertinus-fonts/libertinus
  5. http://pmrb.free.fr/contextref.pdf
  6. https://tex.stackexchange.com/a/324318/174577

答案1

以下是我为 Cormorant 设计打字稿的方式。这并没有映射所有不同的粗细和样式组合,因为其中很多组合都不太合理。

\starttypescriptcollection[cormorant]

  \starttypescript [cormorant,cormorant-light,cormorant-garamond,cormorant-infant,cormorant-unicase]
    \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default]
    \definetypeface [\typescriptone] [ss] [sans]  [modern]         [default]
    \definetypeface [\typescriptone] [tt] [mono]  [modern]         [default]
    \definetypeface [\typescriptone] [mm] [math]  [modern]         [default]
    \quittypescriptscanning
  \stoptypescript

  \starttypescript [serif] [cormorant,cormorant-light,cormorant-garamond,cormorant-infant,cormorant-unicase]

    \definefontsynonym [Cormorant-BoldItalic]             [file:Cormorant-BoldItalic]             [features=default]
    \definefontsynonym [Cormorant-Bold]                   [file:Cormorant-Bold]                   [features=default]
    \definefontsynonym [CormorantGaramond-BoldItalic]     [file:CormorantGaramond-BoldItalic]     [features=default]
    \definefontsynonym [CormorantGaramond-Bold]           [file:CormorantGaramond-Bold]           [features=default]
    \definefontsynonym [CormorantGaramond-Italic]         [file:CormorantGaramond-Italic]         [features=default]
    \definefontsynonym [CormorantGaramond-LightItalic]    [file:CormorantGaramond-LightItalic]    [features=default]
    \definefontsynonym [CormorantGaramond-Light]          [file:CormorantGaramond-Light]          [features=default]
    \definefontsynonym [CormorantGaramond-MediumItalic]   [file:CormorantGaramond-MediumItalic]   [features=default]
    \definefontsynonym [CormorantGaramond-Medium]         [file:CormorantGaramond-Medium]         [features=default]
    \definefontsynonym [CormorantGaramond-Regular]        [file:CormorantGaramond-Regular]        [features=default]
    \definefontsynonym [CormorantGaramond-SemiBoldItalic] [file:CormorantGaramond-SemiBoldItalic] [features=default]
    \definefontsynonym [CormorantGaramond-SemiBold]       [file:CormorantGaramond-SemiBold]       [features=default]
    \definefontsynonym [CormorantInfant-BoldItalic]       [file:CormorantInfant-BoldItalic]       [features=default]
    \definefontsynonym [CormorantInfant-Bold]             [file:CormorantInfant-Bold]             [features=default]
    \definefontsynonym [CormorantInfant-Italic]           [file:CormorantInfant-Italic]           [features=default]
    \definefontsynonym [CormorantInfant-LightItalic]      [file:CormorantInfant-LightItalic]      [features=default]
    \definefontsynonym [CormorantInfant-Light]            [file:CormorantInfant-Light]            [features=default]
    \definefontsynonym [CormorantInfant-MediumItalic]     [file:CormorantInfant-MediumItalic]     [features=default]
    \definefontsynonym [CormorantInfant-Medium]           [file:CormorantInfant-Medium]           [features=default]
    \definefontsynonym [CormorantInfant-Regular]          [file:CormorantInfant-Regular]          [features=default]
    \definefontsynonym [CormorantInfant-SemiBoldItalic]   [file:CormorantInfant-SemiBoldItalic]   [features=default]
    \definefontsynonym [CormorantInfant-SemiBold]         [file:CormorantInfant-SemiBold]         [features=default]
    \definefontsynonym [Cormorant-Italic]                 [file:Cormorant-Italic]                 [features=default]
    \definefontsynonym [Cormorant-LightItalic]            [file:Cormorant-LightItalic]            [features=default]
    \definefontsynonym [Cormorant-Light]                  [file:Cormorant-Light]                  [features=default]
    \definefontsynonym [Cormorant-MediumItalic]           [file:Cormorant-MediumItalic]           [features=default]
    \definefontsynonym [Cormorant-Medium]                 [file:Cormorant-Medium]                 [features=default]
    \definefontsynonym [Cormorant-Regular]                [file:Cormorant-Regular]                [features=default]
    \definefontsynonym [CormorantSC-Bold]                 [file:CormorantSC-Bold]                 [features=smallcaps]
    \definefontsynonym [CormorantSC-Light]                [file:CormorantSC-Light]                [features=smallcaps]
    \definefontsynonym [CormorantSC-Medium]               [file:CormorantSC-Medium]               [features=smallcaps]
    \definefontsynonym [CormorantSC-Regular]              [file:CormorantSC-Regular]              [features=smallcaps]
    \definefontsynonym [CormorantSC-SemiBold]             [file:CormorantSC-SemiBold]             [features=smallcaps]
    \definefontsynonym [Cormorant-SemiBoldItalic]         [file:Cormorant-SemiBoldItalic]         [features=default]
    \definefontsynonym [Cormorant-SemiBold]               [file:Cormorant-SemiBold]               [features=default]
    \definefontsynonym [CormorantUnicase-Bold]            [file:CormorantUnicase-Bold]            [features=default]
    \definefontsynonym [CormorantUnicase-Light]           [file:CormorantUnicase-Light]           [features=default]
    \definefontsynonym [CormorantUnicase-Medium]          [file:CormorantUnicase-Medium]          [features=default]
    \definefontsynonym [CormorantUnicase-Regular]         [file:CormorantUnicase-Regular]         [features=default]
    \definefontsynonym [CormorantUnicase-SemiBold]        [file:CormorantUnicase-SemiBold]        [features=default]
    \definefontsynonym [CormorantUpright-Bold]            [file:CormorantUpright-Bold]            [features=default]
    \definefontsynonym [CormorantUpright-Light]           [file:CormorantUpright-Light]           [features=default]
    \definefontsynonym [CormorantUpright-Medium]          [file:CormorantUpright-Medium]          [features=default]
    \definefontsynonym [CormorantUpright-Regular]         [file:CormorantUpright-Regular]         [features=default]
    \definefontsynonym [CormorantUpright-SemiBold]        [file:CormorantUpright-SemiBold]        [features=default]

  \stoptypescript

  \starttypescript [serif] [cormorant] [name]

    \definefontsynonym [Serif]            [Cormorant-Regular]
    \definefontsynonym [SerifItalic]      [Cormorant-Italic]
    \definefontsynonym [SerifBold]        [Cormorant-Bold]
    \definefontsynonym [SerifBoldItalic]  [Cormorant-BoldItalic]
    \definefontsynonym [SerifSlanted]     [SerifItalic]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
    \definefontsynonym [SerifCaps]        [CormorantSC-Regular]

  \stoptypescript

  \starttypescript [serif] [cormorant-light] [name]

    \definefontsynonym [Serif]            [Cormorant-Light]
    \definefontsynonym [SerifItalic]      [Cormorant-LightItalic]
    \definefontsynonym [SerifBold]        [Cormorant-SemiBold]
    \definefontsynonym [SerifBoldItalic]  [Cormorant-SemiBoldItalic]
    \definefontsynonym [SerifSlanted]     [SerifItalic]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
    \definefontsynonym [SerifCaps]        [CormorantSC-Light]

  \stoptypescript

  \starttypescript [serif] [cormorant-garamond] [name]

    \definefontsynonym [Serif]            [CormorantGaramond-Regular]
    \definefontsynonym [SerifItalic]      [CormorantGaramond-LightItalic]
    \definefontsynonym [SerifBold]        [CormorantGaramond-Bold]
    \definefontsynonym [SerifBoldItalic]  [CormorantGaramond-BoldItalic]
    \definefontsynonym [SerifSlanted]     [SerifItalic]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]

  \stoptypescript

  \starttypescript [serif] [cormorant-infant] [name]

    \definefontsynonym [Serif]            [CormorantInfant-Regular]
    \definefontsynonym [SerifItalic]      [CormorantInfant-LightItalic]
    \definefontsynonym [SerifBold]        [CormorantInfant-Bold]
    \definefontsynonym [SerifBoldItalic]  [CormorantInfant-BoldItalic]
    \definefontsynonym [SerifSlanted]     [SerifItalic]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]

  \stoptypescript

  \starttypescript [serif] [cormorant-unicase] [name]

    \definefontsynonym [Serif]            [CormorantUnicase-Regular]
    \definefontsynonym [SerifItalic]      [CormorantUnicase-LightItalic]
    \definefontsynonym [SerifBold]        [CormorantUnicase-Bold]
    \definefontsynonym [SerifBoldItalic]  [CormorantUnicase-BoldItalic]
    \definefontsynonym [SerifSlanted]     [SerifItalic]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]

  \stoptypescript

\stoptypescriptcollection

使用方法如下:

\setupbodyfont[cormorant]
\setupbodyfont[cormorant-light]
\setupbodyfont[cormorant-garamond]
\setupbodyfont[cormorant-infant]
\setupbodyfont[cormorant-unicase]

\setupwhitespace[medium]

\starttext

\switchtobodyfont[cormorant]
\samplefile{ward}

\bold{\samplefile{ward}}

\italic{\samplefile{ward}}

\smallcaps{\samplefile{ward}}

\page

\switchtobodyfont[cormorant-light]
\samplefile{ward}

\bold{\samplefile{ward}}

\italic{\samplefile{ward}}

\smallcaps{\samplefile{ward}}

\page

\switchtobodyfont[cormorant-garamond]
\samplefile{ward}

\bold{\samplefile{ward}}

\italic{\samplefile{ward}}

\smallcaps{\samplefile{ward}}

\page

\switchtobodyfont[cormorant-infant]
\samplefile{ward}

\bold{\samplefile{ward}}

\italic{\samplefile{ward}}

\smallcaps{\samplefile{ward}}

\page

\switchtobodyfont[cormorant-unicase]
\samplefile{ward}

\bold{\samplefile{ward}}

\italic{\samplefile{ward}}

\smallcaps{\samplefile{ward}}

\stoptext

点击放大图片:

在此处输入图片描述

相关内容