Command/definefirstline

From Wiki
Jump to navigation Jump to search

\definefirstline

Syntax (autogenerated)

\definefirstline[...][...][...=...,...]
[...]name
[...]name
...=...,...inherits from \setupfirstline


Syntax

\definefirstline[..][]
\definefirstline[...][...][...=...]
[...] name of firstline style
[...] name of firstline style to inherit from
alternative line word
n integer: number of words to affect
style Style Alternative
color IDENTIFIER: color name

Description

Define a style to apply only to the first line of a paragraph. Once defined, the style can be applied by invoking \setfirstline on a paragraph. One of two methods can be requested by setting the keyword alternative:

  • line applies the style to the entire line,
  • word applies the style only to the first n words of the first line.

NB: The style substitution takes place on node level, hence small capitals require a font which implements them as a feature, not as a separate file (e. g. as of 2013 Latin Modern won’t do).

Examples

Bold and Small Caps

Typeset the first line once in bold, and then in small caps:

  • \setupbodyfont [heros] %% important: smallcaps capable font!
    
    \definefirstline [italicfirstline] [
      alternative=line,
      style=italic,
    ]
    
    \definefirstline [smallcapsfirstline] [
      alternative=line,
      color=darkred,
      style=smallcaps,
    ]
    
    \starttext
    
      \setfirstline[italicfirstline]    \input knuth \par
      \setfirstline[smallcapsfirstline] \input knuth \par
    
    \stoptext
    

To affect only the first three or six words change to the alternative word and set the parameter n to the desired value:

  • \definefirstline [threegreenwords] [
      alternative=word,
      color=green,
      n=3,
    ]
    
    \definefirstline [sixbluewords] [
      alternative=word,
      color=blue,
      n=6,
    ]
    
    \starttext
    
        \setfirstline[threegreenwords]  \input ward \par
        \setfirstline[sixbluewords]     \input ward \par
    
    \stoptext
    

Changing Case

Technically, \WORD is not a style, so to configure words in uppercase a different approach is necessary. The style can be defined in terms of a Lua handler, such as:

  • \definealternativestyle[UpperCase][{\bf\uppercasing}][]
    

Where the handler code resembles:

  • \startluacode
    
    fonts.handlers.otf.addfeature {
         name    = "uppercasing",
         type    = "substitution",
         prepend = true,
         data    = characters.uccodes
    }
    
    fonts.handlers.otf.addfeature {
         name    = "lowercasing",
         type    = "substitution",
         prepend = true,
         data    = characters.lccodes
    }
    
    \stopluacode
    
    \definefontfeature[lowercasing][lowercasing=yes]
    \definefontfeature[uppercasing][uppercasing=yes]
    
    \unexpanded\def\uppercasing{\addff{uppercasing}}
    \unexpanded\def\lowercasing{\addff{lowercasing}}
    
    \definealternativestyle[UpperCase][{\bf\uppercasing}][]
    
    \definefirstline [UpperCaseWords] [
      alternative=word,
      style=UpperCase,
      n=1,
    ]
    
    \starttext
      \setfirstline[UpperCaseWords] \input ward
    \stoptext
    

See also

Help from ConTeXt-Mailinglist/Forum

All issues with: