Jump to content

Defining a custom staff context: Difference between revisions

From LilyPond wiki
m New category
mNo edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Instead of having to type the same customization commands every time you need to use a particular type of staff, you can define a custom staff context and use it instead. For example, instead of:
Instead of having to type the same customization commands every time you need to use a particular type of staff, you can define a custom staff context and use it instead. For example, instead of


<code>\new Staff \with { ... }</code>
\new Staff \with { ... }


You would use:
you would use


<code>\new MyCustomStaff</code>
\new MyCustomStaff


A custom staff context can have any customizations that you would use in a Staff's \with block. Note that the custom staff's definition can be saved in a file that you <code>\include</code>, so you do not have to re-create it every time it is needed.
A custom staff context can have any customizations that you would use in a <code>Staff</code> context's <code>\with</code> block. Note that the custom staff's definition can be saved in a file that you <code>\include</code>, so you do not have to re-create it every time it is needed.


<lilypond version="2.24">
<lilypond version="2.24">
%% http://lsr.di.unimi.it/LSR/Item?id=979 (formerly id=882)
% DEFINE A CUSTOM STAFF CONTEXT FOR "LAYOUT"
% DEFINE A CUSTOM STAFF CONTEXT FOR "LAYOUT"
\layout {
\layout {

Latest revision as of 08:07, 3 December 2025

Instead of having to type the same customization commands every time you need to use a particular type of staff, you can define a custom staff context and use it instead. For example, instead of

\new Staff \with { ... }

you would use

\new MyCustomStaff

A custom staff context can have any customizations that you would use in a Staff context's \with block. Note that the custom staff's definition can be saved in a file that you \include, so you do not have to re-create it every time it is needed.

\version "2.24"

% DEFINE A CUSTOM STAFF CONTEXT FOR "LAYOUT"
\layout {
  \context {
    % make a copy of the standard Staff context
    \Staff
    % give this custom context a name of your choice
    \name MyCustomStaff
    % tell LilyPond that commands that work in a standard
    % Staff context should also work in this custom context
    \alias Staff
    % add customizations, these are just examples,
    % they can be anything that can go in a staff's \with block
    \consists "Pitch_squash_engraver"
    squashedPosition = #0
    \override NoteHead.style = #'slash
    \override Stem.transparent = ##t
    \override Flag.transparent = ##t
  }
  % define which "parent" contexts will accept this custom context as a "child"
  \context { \Score      \accepts MyCustomStaff }
  \context { \ChoirStaff \accepts MyCustomStaff }
  \context { \GrandStaff \accepts MyCustomStaff }
  \context { \PianoStaff \accepts MyCustomStaff }
  \context { \StaffGroup \accepts MyCustomStaff }
}

% DEFINE THE CUSTOM STAFF CONTEXT FOR "MIDI" TOO
% to avoid warnings the context has to be defined for each type of output
\midi {
  \context {
    \Staff
    \name MyCustomStaff
    \alias Staff
    % the customizations are not needed for midi 
    % since they are for visual output only
  }
  \context { \Score      \accepts MyCustomStaff }
  \context { \ChoirStaff \accepts MyCustomStaff }
  \context { \GrandStaff \accepts MyCustomStaff }
  \context { \PianoStaff \accepts MyCustomStaff }
  \context { \StaffGroup \accepts MyCustomStaff }
}

% EXAMPLE
\score {
  <<
    \new Staff {
      c' d' e' f'
    }
    \new MyCustomStaff {
      c' d' e' f'
    }
  >>
  \layout { }
  \midi { }
}