• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

markup rechts am notenkopf ausrichten

Begonnen von MH, Montag, 11. Februar 2013, 15:56

Vorheriges Thema - Nächstes Thema

MH

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

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

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 = #RIGHT
schreiben 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

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

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