Difference between revisions of "Command/definefirstline"

From Wiki
Jump to navigation Jump to search
Line 148: Line 148:
  
 
\definefirstline [UpperCaseWords] [
 
\definefirstline [UpperCaseWords] [
   alternative=UpperCase,
+
   alternative=word,
 +
  style=UpperCase,
 
   n=1,
 
   n=1,
 
]
 
]

Revision as of 01:53, 6 March 2020

\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

Uppercase

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 knuth
\stoptext

See also

Help from ConTeXt-Mailinglist/Forum

All issues with: