14

Is there a canonical way to access font weights other than regular and bold in ConTeXt? This does not work:

\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

Line 1 and 3 come out OK, serif regular and serif regular italic; the lines containing \ss come out as serif regular. If I leave out the Light in the family definition everything works as expected, i.e. line 2 as sans serif regular and line 4 as sans serif bold italic.

I do have the fonts, Gnome Font Manager knows them and mtxrun --script fonts --list --all --pattern=Calluna* too:

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

Saying callunasanslight instead of Calluna Sans Light doesn't work either. What I'm trying to do is using Sans Light and Sans Semibold instead of Sans and Sans Bold. But it would also be nice to have font switches for light, semibold and heavy in addition to \bf and \tf.

BTW: The bigger question is really: Where does one find documentation on such stuff in ConTeXt??? ConTeXt is such a difficult word to google!

Edit: I found one way to work this, at least partially:

\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]

It is not in the definition or the description of \definefontfamily on contextgarden. There is no description there at all, just a number of examples.

Anyway, I'm still missing (a) the semibold smallcaps and (b) a way to make all the weights accessible "at the same time".

6
  • 2
    Make the edit an answer then and accept it. BTW: googling "context mkiv" helps ;)
    – DG'
    Commented Apr 11, 2016 at 12:26
  • Sorry, it's only a partial solution. Edited again to make things clearer.
    – Blackface
    Commented Apr 11, 2016 at 14:21
  • Yes, "context mkiv" indeed helps with the search.
    – Blackface
    Commented Apr 11, 2016 at 15:57
  • 1
    Again, I would suggest that you ask this on the context mailing list. There are only a few context users here
    – Aditya
    Commented Apr 14, 2016 at 17:23
  • Thank you, yes I will, just waiting for the confirmation of list membership.
    – Blackface
    Commented Apr 15, 2016 at 6:37

3 Answers 3

6

To access more alternatives with a single typeface you have to create first additional alternatives with the \definefontalternative command. For my example I add new definitions for a light and a medium style, for the name of the alternative itself you’re limited to two letter for each and you should ensure no important commands are overwritten, e.g. below I overwrite the language switch for lithuanian which can be ignored because you can still use \language[lt] in a document.

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

Now you can add entries for the light and medium styles in your typescript and map synonyms to the font files, for the names of the synonyms you should stick close the the default names, e.g. I used SerifLight for the light style if the font.

\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

Now comes the important part where I assign the files for the light and medium styles to the additional alternatives which is done with the \definebodyfont command.

\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

After this is done you I can now create a new typeface which supports alternatives than the one provided by default (\tf, \it etc.).

\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

Example with new font alternatives for ConTeXt

2
  • Can this be made to work with the \em command, so that {\lt light text can be {\em emphasised} in the usual way}?
    – user31316
    Commented Sep 27, 2017 at 10:03
  • 1
    @TEV The \em command works only with the default alternatives and there is no way to add the additional ones. Commented Jul 3, 2018 at 15:23
2

I am relatively new to ConTeXt but I think the canonical solution to any font loading problem is writing a typescript. To access semibold small caps you have to do \setff{smallcaps}\bf. This is due to the fact that \sc and \bf are not additive (just like in Plain TeX). Once you switch to small caps using \setff you can access all the different styles using the mnemonic font switches.

I don't have the proprietary Calluna fonts, so I'm using TeX Gyre Termes and TeX Gyre Heros. Just substitute the files and it should work.

\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

enter image description here

3
  • Your synonyms for SansItalicCaps etc. are useless because they aren’t mapped to a alternative switch like \sc. To get these fonts working you have to create first a new switch with \definefontalternative[...] and assign then a synonym to the switch with \definebodyfont. Commented Aug 8, 2016 at 0:09
  • 1
    @Metafox Indeed, removing them doesn't affect the output. But then, I wonder why the TeX Gyre typescript defines all those. Can you maybe point out an example for \definefontalternative? I found the standard ones in the ConTeXt source, but couldn't infer from these how to define my own ones. Commented Aug 8, 2016 at 17:16
  • The TeX Gyre typescript add have all Caps synonyms because you can define a smallcaps only typeface (e.g. \definetypeface[...][rm][serif][pagella-caps][default]). Commented Aug 11, 2016 at 10:25
1

If you’d rather avoid typescripts:

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

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

\setupbodyfont [calluna]

Similarly you can define any other weights you need, but keep in mind you are limited to two characters (the next characters set the size of the font).

To also use small caps, a simple \MD\smallcaps will do.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .