In thinking about this some more, it's currently doable, as long as you only
want tablature, not fret diagrams.
Consider a traditional dulcimer with no extra frets.
It has frets that are spaced by the following number of semitones:
2 2 1 2 2 1 2 2.
If we use the following for fretLabels, it will work:
("0" "x" "1" "x" "2" "3" "x" "4" "x" "5" "6" "x" "7" "x" "8")
The frets labeled "x" are frets that don't exist on the dulcimer.
For a 6+ dulcimer, you'd have:
("0" "x" "1" "1+" "2" "3" "x" "4" "x" "5" "6" "x" "7" "x" "8")
For a 1+ and 6+ dulcimer, you'd have
("0" "x" "1" "1+" "2" "3" "x" "4" "x" "5" "6" "6+" "7" "x" "8")
This isn't a perfect solution, because we can still call out pitches for
nonexistent frets. A better solution would define the pitches of frets, and
would call out a warning if the fret didn't exist.
You can see examples of this in input/regression/tablature-letter.ly.
Here's some sample code:
notes = \relative c'' {
d4\1 e\1 fis\1 g\1
a4\1 b\1 c\1 d\1
}
\score {
\new TabStaff
\with {
stringTunings = #`(,(ly:make-pitch 1 1 0)
,(ly:make-pitch 0 5 0)
,(ly:make-pitch -1 1 0))
fretLabels = #'("0" "x" "1" "x" "2" "3" "x" "4" "x" "5" "6" "x" "7" "x"
"8")
tablatureFormat = #fret-letter-tablature-format
}
\new TabVoice {
\notes
}
}