<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- header_tag --> <html lang="en"> <head> <title>Engravers explained - GNU LilyPond Learning Manual</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="description" content="GNU LilyPond Learning Manual"> <meta name="generator" content="makeinfo 4.11"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="Contexts-and-engravers.html#Contexts-and-engravers" title="Contexts and engravers"> <link rel="prev" href="Creating-contexts.html#Creating-contexts" title="Creating contexts"> <link rel="next" href="Modifying-context-properties.html#Modifying-context-properties" title="Modifying context properties"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- Copyright (C) 1999--2007 by the authors Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections. A copy of the license is included in the section entitled ``GNU Free Documentation License''. --> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family:serif; font-weight:normal; } span.sansserif { font-family:sans-serif; font-weight:normal; } hr { border:0; height:1; color: #000000; background-color: #000000; } /* hr { border: none; height: 1px; color: #666666; background-color: #666666; } body { border-left: 1px solid #666666; border-right: 1px solid #666666; color: #332d28; margin-right: auto; margin-left: auto; width: 60em; list-style-type: square; font-family: Arial,Helvetica,sans-serif; padding-right: 1em; padding-left: 1em; } a { border-bottom: 1px dashed #344242; text-decoration: none; color: #344242; } a:link { text-decoration: none; } a:visited { border-bottom: 1px dashed #666666; color: #666666; } a:active { border-bottom: 1px solid #00cccc; color: #00cccc; } a:hover { border-bottom: 1px solid #1d7b85; color: #1d7b85; } blockquote { border: 1px solid #cccccc; padding: 3px; width: 40em; } .node { border-left: 1px solid #666666; margin: -0.5em 0px 1em; padding: 2px 1px 0px; font-style: italic; } .node a { border: none; text-decoration: underline; font-style: normal; font-weight: bold; } .verbatim { font-family: "Courier New",Courier,monospace; } .unnumberedsubsubsec { font-size: large; color: #1d7b85; } .subsubheading { font-size: large; color: #3b220d; } .contents { border: 1px dashed #339999; margin: 3px 2em; list-style-type: square; padding-right: 1em; width: 40em; background-color: #fcfff9; } .contents a { border-bottom: 1px dashed #423d34; text-decoration: none; color: #423d34; } .contents a:visited { border-bottom: 1px dashed #666666; color: #666666; } .contents a:active { border-bottom: 1px solid #f0d86d; color: #f0d86d; } .contents a:hover { border-bottom: 1px solid #3b220d; color: #3b220d; } .menu { border-left: 1px dashed #339999; margin: 3px 2em 1em; list-style-type: square; padding-left: 1.4em; width: 40em; } .unnumbered { } h2 { font-size: x-large; color: #1d7b85; } */ --></style> </head> <BODY BGCOLOR=WHITE TEXT=BLACK> <div class="node"> <p> <a name="Engravers-explained"></a> Next: <a rel="next" accesskey="n" href="Modifying-context-properties.html#Modifying-context-properties">Modifying context properties</a>, Previous: <a rel="previous" accesskey="p" href="Creating-contexts.html#Creating-contexts">Creating contexts</a>, Up: <a rel="up" accesskey="u" href="Contexts-and-engravers.html#Contexts-and-engravers">Contexts and engravers</a> <hr> </div> <h4 class="subsection">3.3.3 Engravers explained</h4> <p><a name="index-engravers-294"></a> Every mark on the printed output of a score produced by LilyPond is produced by an <code>Engraver</code>. Thus there is an engraver to print staves, one to print note heads, one for stems, one for beams, etc, etc. In total there are over 120 such engravers! Fortunately, for most scores it is not necessary to know about more than a few, and for simple scores you do not need to know about any. <p>Engravers live and operate in Contexts. Engravers such as the <code>Metronome_mark_engraver</code>, whose action and output apply to the score as a whole, operate in the highest level context – the <code>Score</code> context. <p>The <code>Clef_engraver</code> and <code>Key_engraver</code> are to be found in every <code>Staff</code> Context, as different staves may require different clefs and keys. <p>The <code>Note_heads_engraver</code> and <code>Stem_engraver</code> live in every <code>Voice</code> context, the lowest level context of all. <p>Each engraver processes the particular objects associated with its function, and maintains the properties that relate to that function. These properties, like the properties associated with contexts, may be modified to change the operation of the engraver or the appearance of those elements in the printed score. <p>Engravers all have compound names formed from words which describe their function. Just the first word is capitalized, and the remainder are joined to it with underscores. Thus the <code>Staff_symbol_engraver</code> is responsible for creating the lines of the staff, the <code>Clef_engraver</code> determines and sets the pitch reference point on the staff by drawing a clef symbol. <p>Here are some of the most common engravers together with their function. You will see it is usually easy to guess the function from the name, or vice versa. <p><table summary=""><tr align="left"><th valign="top" width="30%">Engraver </th><th valign="top" width="70%">Function <br></th></tr><tr align="left"><td valign="top" width="30%">Accidental_engraver </td><td valign="top" width="70%">Makes accidentals, cautionary and suggested accidentals <br></td></tr><tr align="left"><td valign="top" width="30%">Beam_engraver </td><td valign="top" width="70%">Engraves beams <br></td></tr><tr align="left"><td valign="top" width="30%">Clef_engraver </td><td valign="top" width="70%">Engraves clefs <br></td></tr><tr align="left"><td valign="top" width="30%">Completion_heads_engraver </td><td valign="top" width="70%">Splits notes which cross bar lines <!-- The old Dynamic_engraver is deprecated. -jm --> <br></td></tr><tr align="left"><td valign="top" width="30%">New_dynamic_engraver </td><td valign="top" width="70%">Creates hairpins and dynamic texts <br></td></tr><tr align="left"><td valign="top" width="30%">Forbid_line_break_engraver </td><td valign="top" width="70%">Prevents line breaks if a musical element is still active <br></td></tr><tr align="left"><td valign="top" width="30%">Key_engraver </td><td valign="top" width="70%">Creates the key signature <br></td></tr><tr align="left"><td valign="top" width="30%">Metronome_mark_engraver </td><td valign="top" width="70%">Engraves metronome marking <br></td></tr><tr align="left"><td valign="top" width="30%">Note_heads_engraver </td><td valign="top" width="70%">Engraves note heads <br></td></tr><tr align="left"><td valign="top" width="30%">Rest_engraver </td><td valign="top" width="70%">Engraves rests <br></td></tr><tr align="left"><td valign="top" width="30%">Staff_symbol_engraver </td><td valign="top" width="70%">Engraves the five (by default) lines of the staff <br></td></tr><tr align="left"><td valign="top" width="30%">Stem_engraver </td><td valign="top" width="70%">Creates stems and single-stem tremolos <br></td></tr><tr align="left"><td valign="top" width="30%">Time_signature_engraver </td><td valign="top" width="70%">Creates time signatures <br></td></tr></table> <pre class="sp"> </pre> <p>We shall see later how the output of LilyPond can be changed by modifying the action of Engravers. <p class="noindent"> <h5 class="subsubheading">See also</h5> <p class="indent"> <p>Internals reference: <a name="index-Engravers-and-Performers-295"></a><a href="../lilypond-internals/Engravers-and-Performers.html#Engravers-and-Performers">Engravers and Performers</a>. <!-- footer_tag --><br><hr> <div class="node"> <p> Next: <a rel="next" accesskey="n" href="Modifying-context-properties.html#Modifying-context-properties">Modifying context properties</a>, Previous: <a rel="previous" accesskey="p" href="Creating-contexts.html#Creating-contexts">Creating contexts</a>, Up: <a rel="up" accesskey="u" href="Contexts-and-engravers.html#Contexts-and-engravers">Contexts and engravers</a> </div> <div style="background-color: #e8ffe8; padding: 2; border: #c0ffc0 1px solid;"> <p> <font size="-1"> This page is for LilyPond-2.11.57 (development-branch). <br> <address> Report errors to <a href="http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs">http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs</a>. </address> <br> Your <a href="http://lilypond.org/web/devel/participating/documentation-adding">suggestions for the documentation</a> are welcome. </font> </p> </div> <P> Other languages: <a href="Engravers-explained.fr.html">français</a>, <a href="Engravers-explained.es.html">español</a>. <BR> </P> </BODY></html>