Autor Thema: markup rechts am notenkopf ausrichten  (Gelesen 2050 mal)

MH

  • Member
markup rechts am notenkopf ausrichten
« 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

eluze

  • Member
Re: markup rechts am notenkopf ausrichten
« Antwort #1 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

harm6

  • Member
Re: markup rechts am notenkopf ausrichten
« Antwort #2 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.

MH

  • Member
Re: markup rechts am notenkopf ausrichten
« Antwort #3 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ß?

eluze

  • Member
Re: markup rechts am notenkopf ausrichten
« Antwort #4 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