Autor Thema: [Tab] Tabulaturlinien beeinflussen  (Gelesen 139 mal)

Hilflos-im-Code

  • Full Member
  • ***
  • Beiträge: 204
[Tab] Tabulaturlinien beeinflussen
« am: Montag, 24. Februar 2020, 08:48 »
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

  • Hero Member
  • *****
  • Beiträge: 729
Antw:[Tab] Tabulaturlinien beeinflussen
« Antwort #1 am: Montag, 24. Februar 2020, 10:46 »
Zitat
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.
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

  • Full Member
  • ***
  • Beiträge: 204
Antw:[Tab] Tabulaturlinien beeinflussen
« Antwort #2 am: Montag, 24. Februar 2020, 11:51 »
Danke. Hat sehr weitergeholfen.