Hi Stacy, As Lukas said, do you really need the relative mode ? I'd do: \version "2.18.2"
\score { \new TabStaff { \set Staff.stringTunings = \stringTuning <a,,, e,, a,, e, a, cis> \tabFullNotation \transpose c c, { << { s4 \override NoteColumn.ignore-collision = ##t \harmonicByRatio #1/4 <e\3 a\2>2. | } \\ { b,2.\5 b,4\5 | } \\ { r4 \shiftOff \harmonicByFret #7 cis2.\1 | } >> } } } Cheers, Pierre Le sam. 27 juin 2020 à 08:55, Lukas-Fabian Moser <l...@gmx.de> a écrit : > Hi Stacy, > > I'm not familiar with harmonics notation or tabulature, but I think both > of your problems can be solved. > Am 27.06.20 um 01:05 schrieb Stacy Fatemi: > > Hey list, > > I'm notating a piece for 6-string bass with heavy harmonic use, including > chords with different fretted harmonics. Attachment 1 (the hand-drawn bar) > shows how I want this measure to go: root notes in voice 2, harmonics in > voice 1, with a chord composed of a 7th fret harmonic on the 1st string and > 5th fret harmonics on the 2nd and 3rd strings. Here are the problems: > This presents us with two more problems: > > 2. The harmonics in the first voice are severely augmenting the fret > number in the second voice (it's not a huge issue in this tiny example, but > in the full file I'm working on I have a line of 78 commas in a row for the > first note of the second file to get it on the right fret), and > > This is caused by the use of \relative mode. > > Here's why: In \relative mode, the absolute pitch of each note you enter > influences the next entered pitch (insofar as any pitch entered _without_ ' > oder , is taken to be at most a fourth away from the last entered pitch, > and ' and , only add/substract octaves). Now, what you probably did not > expect: This does not keep track of parallel independent voices. Instead, > your very high note \harmonicByRatio #1/4 <e\3 a\2>2. makes LilyPond > assume that the next note encountered in your source file is to be taken > relative to that high note. > > There are verious ways of solving this problem, of adding a bunch of > ,,,,,'s to get back to the normal octave is probably not the best. One way > would be to start a new \relative environment for your lower voice: > > \relative c,, { b'2.\5 b4\5 | } > > But probably it would be best to not use relative mode at all, but instead > use fixed mode. To be honest, I spent the last half an hour trying to > figure out what happens behind the scene for your first command, > \harmonicByRatio #1/4 <e\3 a\2>2. in \relative mode. I'm not sure yet, but > I think that \harmonicByRatio is seriously broken when used for chords in > \relative mode. > > (Anybody who wants to try: Compile #(calc-harmonic-pitch #{ c' #} #{ > \relative <c' f'> #}. The function calc-harmonic-pitch should not do > anything when given c' as "harmonic pitch", if I understand the source code > in tablatura.scm correctly.) > > But I admit that I do not yet understand the logic by which the fret > numbers for harmonics are calculated. I'm not that familiar with the bass > (and so I have to calculate rather a lot), but when I just tried to define > stringTunings for the cello (which I'm very familiar with) I could > understand usual pitches easily, but could not get my head around the > displayed tabs for harmonics. But maybe I will. > > 3. The harmonics don't form a coherent chord, but rather a staggered > display with a collision between the stem from voice 1 and the note from > voice 3. > > This is not a bug but a feature: Normally, you want to be able to > distinguish the first and the third voice. But not here. > > The construction << ... \\ ... \\ >> is a bit involved in that it does > _several_ things: It creates independent voices, yes, but it also sets > defaults for shifting and stem direction (namely, the first voice gets a > \voiceOne, which should be read as "should be layouted as a first voice, > e.g. with \stemUp etc."). In more complicated situations, it's often more > convenient not to use the \\'s but to create the voices for yourself and > setting them up manually: > > << > \new Voice { \voiceOne ... } > \new Voice { \voiceThree .... } > >> > > But the easiest remedy in your situation is: > > \version "2.18.2" > > \score { > \new TabStaff > { > \set Staff.stringTunings = \stringTuning <a,,, e,, a,, e, a, cis> > \tabFullNotation > \relative c,, { > << > { r4 \harmonicByRatio #1/4 <e\3 a\2>2. | } > \\ > \relative c,, { b'2.\5 b4\5 | } > \\ > { s4 \voiceOne \harmonicByFret #7 cis2.\1 | } > >> > } > } > } > > Note that I also changed r4 into s4 - s4 behaves like a rest but does not > print anything, and we only need one actual printed rest. > > Best > Lukas >