Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: MH am Montag, 11. Februar 2013, 15:56

Titel: markup rechts am notenkopf ausrichten
Beitrag von: MH am Montag, 11. Februar 2013, 15:56
Hallo,
ist es möglich ein Markup rechts und nicht links am Notenkopf auszurichten? Ich benutze Lilypond für Schlagzeug Notation und benutze unterschiedlich große Notenköpfe und Handsätze sehen dann immer sehr "krumm" aus.
Danke
Titel: Re: markup rechts am notenkopf ausrichten
Beitrag von: eluze am Montag, 11. Februar 2013, 17:29
schau mal in http://lsr.dsi.unimi.it/LSR/Item?id=637

dort wäre dann

\override TextScript #'self-alignment-X = #CENTER
in #LEFT zu ändern.

Eluze
Titel: Re: markup rechts am notenkopf ausrichten
Beitrag von: harm6 am Montag, 11. Februar 2013, 17:50
Hallo,

das grundsätzliche Problem liegt in der Tatsache begründet, daß die NoteColumn und ihre NoteHeads nicht das "Eltern"-Objekt für TextScript sind.

Folgender Code liest die "Eltern" aus:

\version "2.16.1"

writeParents =
\override TextScript #'after-line-breaking =
  #(lambda (grob)
    (let* ((X-parent (ly:grob-parent grob X))
           (Y-parent (ly:grob-parent grob Y)))
    (display "\n\nX-parent        ")(write X-parent)
    (display "\nY-parent        ")(write Y-parent)
    (newline)))
   
{ \writeParents c''1-"abc" }

Im Terminal kann man dann:
   
                X-parent        #<Grob PaperColumn >
                Y-parent        #<Grob VerticalAxisGroup >
lesen.

Das kann man allerdings mithilfe des von Eluze schon erwähnten LSR-Snippets ändern .

Ich meine allerdings, daß man
\override TextScript #'self-alignment-X = #RIGHTschreiben muß, falls ich Dein Anliegen richtig verstanden habe [1].

Darüberhinaus muß man in \layout \Voice durch \DrumVoice ersetzen oder Modifikationen für \DrumVoice hinzufügen (so hab ich es gemacht):

\version "2.16.1"

% LSR-snippet 637
% http://lsr.dsi.unimi.it/LSR/Item?id=637

#(define (Text_align_engraver ctx)
  (let ((scripts '())
        (note-column #f))

    `((acknowledgers
       (note-column-interface
        . ,(lambda (trans grob source)
             ;; cache NoteColumn in this Voice context
             (set! note-column grob)))

       (text-script-interface
        . ,(lambda (trans grob source)
             ;; whenever a TextScript is acknowledged,
             ;; add it to `scripts' list
             (set! scripts (cons grob scripts)))))

      (stop-translation-timestep
       . ,(lambda (trans)
            ;; if any TextScript grobs exist,
            ;; set NoteColumn as X-parent
            (and (pair? scripts)
                 (for-each (lambda (script)
                               (set! (ly:grob-parent script X) note-column))
                           scripts))
            ;; clear scripts ready for next timestep
            (set! scripts '()))))))

\layout {
  \context {
    \Voice
    \consists #Text_align_engraver
    \override TextScript #'X-offset =
      #ly:self-alignment-interface::aligned-on-x-parent
    \override TextScript #'self-alignment-X = #RIGHT
  }
  \context {
    \DrumVoice
    \consists #Text_align_engraver
    \override TextScript #'X-offset =
      #ly:self-alignment-interface::aligned-on-x-parent
    \override TextScript #'self-alignment-X = #RIGHT
  }
}

\new Staff
\relative c'' {
        <c d e>1^"XYxyxyxyxyxyxy"
}
 
\new DrumVoice
\drummode {
        hh4^"xyxyxyxyxyxyxy"
}


Gruß,
  Harm

[1] Bitte poste immer ein kurzes, kompilierbares Beispiel mit Versionsangabe.
Titel: Re: markup rechts am notenkopf ausrichten
Beitrag von: MH am Montag, 11. Februar 2013, 18:39
hey leute, danke für die schnellen antworten.
das mit den Eltern Objekten hab ich noch nicht so ganz verstanden. Heißt dass, das Lilypond dann der verkleinerten Notenkopf so behandelt als wäre er groß?
Titel: Re: markup rechts am notenkopf ausrichten
Beitrag von: eluze am Montag, 11. Februar 2013, 23:39
danke Harm für deine ausführliche analyse!

natürlich hast du recht mit \override TextScript #'self-alignment-X = #RIGHT (ich muss immer überlegen ob es nun rechts anliegen muss oder ob es rechtsbündig sein muss… - und das gelingt in der eile nicht immer, sorry)

Eluze