[Tab] Tabulaturlinien beeinflussen

Begonnen von Hilflos-im-Code, Montag, 24. Februar 2020, 08:48

« vorheriges - nächstes »

Hilflos-im-Code

Also hier das Minimalbeispiel
\version "2.19.65"

\score{
       
   ,\new TabStaff  {a -\tweak extra-offset #'( 1 . 4) _\markup "A"}
       
\layout {
   
    \context {
      \TabStaff

       \revert TextScript.stencil
     

    }
  }     
       
}


Es ist anscheinend so, dass die Linien der Tabulatur unterbrochen wird, wenn ein Zeichen dort auftaucht, welches zur Tabulatur gehört, weil es eine Note ist.

Das sieht aber etwas komisch aus, wenn ich einen Text in die Tabulaturzeile schiebe. Denn dann wird die Linie nicht unterbrochen.

Wie bekomme ich ein einheitliches Verhalten hin? Also entweder Linie auch für Markup unterbrochen oder Linie geht auch durch das Tabulaturzeichen.

harm6

ZitatEs ist anscheinend so, dass die Linien der Tabulatur unterbrochen wird, wenn ein Zeichen dort auftaucht, welches zur Tabulatur gehört, weil es eine Note ist.
Nein, die Linie der Tabulatur wird nicht unterbrochen. Vielmehr ist das whiteout-property für TabNoteHead #t.

Das kann man natürlich auch für TextScript machen. Allerdings ist die Verschiebung mittels extra-offset ungeeignet, da die folgende NoteColumn davon unbeeindruckt bleibt. Da hilft auch \textLengthOn nicht:


\score {
  \new TabStaff {
  \textLengthOn
    a -\tweak extra-offset #'(1 . 4)
      -\tweak whiteout ##t
      _\markup "A"
    bes
  }
  \layout {
    \context {
      \TabStaff
      \revert TextScript.stencil
    }
  }   
}


Besser ist es,
(1) TextScript zu erlauben im (Tab)Staff zu erscheinen, d.h. staff-padding und outside-staff-priority auf '() zu  setzen.
(2) die Verschiebung mittels X/Y-offset einzuregeln
(3) \textLengthOn zu setzen, damit die nächste NoteColumn nach rechts gedrückt wird.
(4) und natürlich whiteout auf #t zu setzen


\version "2.19.84"

\score {
  \new TabStaff {
    a -\tweak staff-padding #'()
      -\tweak outside-staff-priority #'()
      -\tweak Y-offset 0
      -\tweak X-offset 1.7
      -\tweak whiteout ##t
      -\single \textLengthOn
      _\markup "A"
    bes
  }
  \layout {
    \context {
      \TabStaff
      \revert TextScript.stencil
    }
  }   
}


Das kann man dann als event-function codieren:

\version "2.19.84"

ts =
#(define-event-function (x-y-offset mrkp)(pair? ly:music?)
#{
  \tweak staff-padding #'()
  \tweak outside-staff-priority #'()
  \tweak Y-offset #(car x-y-offset)
  \tweak X-offset #(cdr x-y-offset)
  \tweak whiteout ##t
  \single \textLengthOn
  $mrkp
#})

\score {
  \new TabStaff {
    a \ts #'(0 . 1.7) _\markup "ABC"
    bes
  }
  \layout {
    \context {
      \TabStaff
      \revert TextScript.stencil
    }
  }   
}


Ich bin etwas unentschieden, ob \textLengthOn wirklich in die function sollte, denn je nach Verschiebung wird man es möglicherweise auch nicht haben wollen.
Hängt von der Verwendung ab.
Aber man kann es ja problemlos aus der function löschen und nach Bedarf einfügen. Syntax wäre wie im zweiten Codebeispiel.

Gruß,
  Harm

Hilflos-im-Code