Hallo buur,
herzlich willkommen im Forum.
Zum Thema:
Da macht lilypond einen Fehler.
Nein, sondern das Verhalten ist
intendiert.
Der
TabStaff akzeptiert
keine 'Voice!!!! (siehe engraver-init.ly)
Wenn Du doch
\new Voice schreibst wird halt eine neue
Voice ausgegeben in einem neuen
Staff mit allem drum und dran.
Wenn Du stattdessen
\new TabVoice angäbest würde im
Staff eine neue
TabVoice ausgegeben in einem neuen
TabStaff mit allem drum und dran.
Will man natürlich alles nicht haben.
Hier gibts jetzt verschiedene Lösungsmöglichkeiten.
1. MöglichkeitBenutze das Konstrukt
<<{...}\\{...}>>, wie andere vor mir schon vorgeschlagen haben.
Hier werden dann zwei 'Bottom-contexte erzeugt (weiteres siehe unten 3. Möglichkeit)
2. MöglichkeitVerzichte auf temporäre Polyphonie. Schreib stattdessen zwei Stimmen ohne jegliche Angabe von
Voice oder
TabVoice. Diese kannst Du beim finalen Aufruf dann angeben, obwohl das zumindest in folgendem Beispiel überflüssig ist.
\version "2.18.2"
oben =
\relative c' {
a4 b a b
\voiceOne
c' r c r
\oneVoice
d d d d
\voiceOne
c r c r
\oneVoice
f, f f f
}
unten =
\relative c'' {
s1
\voiceTwo
r4 a r a
\oneVoice
s1
\voiceTwo
r4 a r a
\oneVoice
s1
}
<<
\new Staff <<
\clef "treble_8"
\new Voice \oben
\new Voice \unten
>>
\new TabStaff <<
\new TabVoice \oben
\new TabVoice \unten
>>
>>
3. MöglichkeitWäre (eigentlich) die eleganteste.
Sowohl
Voice als auch
TabVoice sind
beides Bottom-contexte (ganz unten in der context-Hirarchie), allerdings sind sie eindeutig definiert, sodaß sie im jeweiligen Elterncontext (
Staff oder
TabStaff) ungewollte Effekte auslösen, falls Bottom/Eltern nicht zusammen passen.
Optimal wäre es einen neutralen Bottom-context anzugeben. Das geht aber in LilyPond nicht.
...
Eigentlich ...
Falls Dich ein kleines bißchen scheme nicht schreckt:
\version "2.18.2"
\language "deutsch"
C =
\relative c'
#(context-spec-music
#{
\voiceOne
a b a b
<<
{ \voiceOne c' r c r }
%\new Voice { \voiceTwo r a r a }
#(context-spec-music #{ \voiceTwo r a r a #} 'Bottom "foo")
>>
\oneVoice d d d d
<<
{\voiceOne c r c r }
%\new Voice{\voiceTwo r a r a}
#(context-spec-music #{ \voiceTwo r a r a #} 'Bottom "foo")
>>
<<
{ c r c r }
\\
{ r a r a}
>>
\oneVoice
f f f f
#}
'Bottom "my-voice")
\score {
\new StaffGroup <<
\new Staff <<
\clef "treble_8" \C
>>
\new TabStaff = "guitar tab"
\C
>>
\layout {}
}
Geht nicht, gibts nicht

Allerdings empfinde ich die Notwendigkeit zu scheme-Funktionen greifen zu müssen, nicht so dolle. Die Lesbarkeit des Codes wid jetzt nicht gerade verbessert.
Wie wärs wenn Du eine feature-request an die bug-liste schickst?
http://lilypond.org/bug-reports.html ist auch für gewünschte features da, nicht nur für ausgemachte bugs.
HTH,
Harm