### 4.1.4 Tweaking methods

#### The `\override` command

We have already met the commands `\set` and `\with`, used to change the properties of contexts and to remove and add engravers, in Modifying context properties, and Adding and removing engravers. We must now introduce some more important commands.

The command to change the properties of layout objects is `\override`. Because this command has to modify internal properties deep within LilyPond its syntax is not as simple as the commands you have used so far. It needs to know precisely which property of which object in which context has to be modified, and what its new value is to be. Let’s see how this is done.

The general syntax of this command is:

>     \override Context.LayoutObject.layout-property = #value

This will set the property with the name layout-property of the layout object with the name LayoutObject, which is a member of the Context context, to the value value.

The Context may be omitted (and usually is) when the required context is unambiguously implied and is one of lowest level contexts, i.e., `Voice`, `ChordNames` or `Lyrics`, and we shall omit it in many of the following examples. We shall see later when it must be specified.

Later sections deal comprehensively with properties and their values, see Types of properties. But in this section we shall use just a few simple properties and values which are easily understood in order to illustrate the format and use of these commands.

LilyPond’s primary expressions are musical items like notes, durations, and markups. More basic expressions like numbers, strings, and lists are processed in ‘Scheme mode’, which is invoked by prefixing the value with ‘`#`’. Although the values may sometimes have a valid representation in LilyPond’s musical mode, this manual will always use ‘`#`’ for their entry for the sake of consistency. For more information about Scheme mode, see LilyPond Scheme syntax.

`\override` is the most common command used in tweaking, and most of the rest of this chapter will be directed to presenting examples of how it is used. Here is a simple example to change the color of the note head:

>     c4 d
>     \override NoteHead.color = #red
>     e4 f |
>     \override NoteHead.color = #green
>     g4 a b c |

#### The `\revert` command

Once overridden, the property retains its new value until it is overridden again or a `\revert` command is encountered. The `\revert` command has the following syntax and causes the value of the property to revert to its original default value; note, not its previous value if several `\override` commands have been issued.

>     \revert Context.LayoutObject.layout-property

Again, just like Context in the `\override` command, Context is often not needed. It will be omitted in many of the following examples. Here we revert the color of the note head to the default value for the final two notes:

>     c4 d
>     \override NoteHead.color = #red
>     e4 f |
>     \override NoteHead.color = #green
>     g4 a
>     \revert NoteHead.color
>     b4 c |

#### The `\once` prefix

Both the `\override` and the `\set` commands may be prefixed by `\once`. This causes the following `\override` or `\set` command to be effective only during the current musical moment before the property reverts back to its previous value (this can be different from the default if another `\override` is still in effect). Using the same example, we can change the color of a single note like this:

>     c4 d
>     \override NoteHead.color = #red
>     e4 f |
>     \once \override NoteHead.color = #green
>     g4 a
>     \revert NoteHead.color
>     b c |

The `\once` prefix may also be used in front of many predefined commands to limit their effect to one musical moment:

>     c4 d
>     \once \stemDown
>     e4 f |
>     g4 a
>     \once \hideNotes
>     b c |

However, predefined commands of the form `\…Neutral`, `\…Off` and `\un…` use `\revert` internally rather than `\override` so prefixing these with `\once` has no effect.

#### The `\overrideProperty` command

There is another form of the override command, `\overrideProperty`, which is occasionally required. We mention it here for completeness, but for details see Difficult tweaks.

#### The `\tweak` command

The final tweaking command which is available is `\tweak`. This should be used when several objects occur at the same musical moment, but you only want to change the properties of selected ones, such as a single note within a chord. Using `\override` would affect all the notes within a chord, whereas `\tweak` affects just the following item in the input stream.

Here’s an example. Suppose we wish to change the size of the middle note head (the E) in a C major chord. Let’s first see what `\once \override` would do:

>     <c e g>4
>     \once \override NoteHead.font-size = #-3
>     <c e g>4
>     <c e g>4

We see the override affects all the note heads in the chord. This is because all the notes of a chord occur at the same musical moment, and the action of `\once` is to apply the override to all layout objects of the type specified which occur at the same musical moment as the `\override` command itself.

The `\tweak` command operates in a different way. It acts on the immediately following item in the input stream. In its simplest form, it is effective only on objects which are created directly from the following item, essentially note heads and articulations.

So to return to our example, the size of the middle note of a chord would be changed in this way:

>     <c e g>4
>     <c \tweak font-size #-3 e g>4

Note that the syntax of `\tweak` is different from that of the `\override` command. The context should not be specified; in fact, it would generate an error to do so. Both context and layout object are implied by the following item in the input stream. Note also that an equals sign should not be present. So the simple form of the `\tweak` command is

>     \tweak layout-property #value

A `\tweak` command can also be used to modify just one in a series of articulations, as shown here:

>     a4^"Black"
>       -\tweak color #red ^"Red"
>       -\tweak color #green _"Green"

Note that the `\tweak` command must be preceded by an articulation mark since the tweaked expression needs to be applied as an articulation itself. In case of multiple direction overrides (`^` or `_`), the leftmost override wins since it is applied last.

Objects such as stems and accidentals are created later, and not directly from the following event. It is still possible to use `\tweak` on such indirectly created objects by explicitly naming the layout object, provided that LilyPond can trace its origin back to the original event:

>     <\tweak Accidental.color #red   cis4
>      \tweak Accidental.color #green es
>      g>

This long form of the `\tweak` command can be described as

>     \tweak layout-object.layout-property value

The `\tweak` command must also be used to change the appearance of one of a set of nested tuplets which begin at the same musical moment. In the following example, the long tuplet bracket and the first of the three short brackets begin at the same musical moment, so any `\override` command would apply to both of them. In the example, `\tweak` is used to distinguish between them. The first `\tweak` command specifies that the long tuplet bracket is to be placed above the notes and the second one specifies that the tuplet number is to be printed in red on the first short tuplet bracket.

>     \tweak direction #up
>     \tuplet 3/4 {
>       \tweak color #red
>       \tuplet 3/2 { c8[ c c] }
>       \tuplet 3/2 { c8[ c c] }
>       \tuplet 3/2 { c8[ c c] }
>     }

If nested tuplets do not begin at the same moment, their appearance may be modified in the usual way with `\override` commands:

>     \tuplet 3/2 { c8[ c c] }
>     \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
>     \tuplet 3/2 {
>       c8[ c]
>       c8[ c]
>       \once \override TupletNumber.transparent = ##t
>       \tuplet 3/2 { c8[ c c] }
>       \tuplet 3/2 { c8[ c c] }
>     }

#### See also

Notation Reference: The tweak command.

其他语言：česky, deutsch, español, français, italiano, 日本語, nederlands。
About automatic language selection.

#### LilyPond — Learning Manual v2.18.2 (稳定分支).