Hajo Baess <ha...@posteo.de> writes:

> This works for the note heads, but if there happen to be accidentals
> around (in my project this is the case), they remain mensural style. Is
> there another override for this, too?
>
> Am Mittwoch, dem 24.01.2024 um 16:14 +0200 schrieb YTG 1234:
>> > I have tried an override ( \override
>> > Staff.NoteHead.style = #'default )
>> 
>> Note heads are drawn in Voice, so you can just omit the context name.
>> \override NoteHead.style = #'default
>> 
>> The more fundamental issue here, though, is that \incipit is
>> hardcoded 
>> to create a MensuralStaff context. Does anyone know how to replicate
>> its 
>> effect with a normal Staff, short of just substituting in its source
>> code?

How about this?

\version "2.24.2"

incipit =
#(define-music-function (incipit-music) (ly:music?)
  (_i "Output @var{incipit-music} as an incipit.

@var{incipit-music} is typeset within a @code{MensuralStaff} context; the result
is positioned before the main staff (as part of an @code{InstrumentName} grob)
to indicate the music's original notation.")
  #{
    \once \override Staff.InstrumentName.stencil =
    #(lambda (grob)
       (let* ((instrument-name (ly:grob-property grob 'long-text))
              (align-x (ly:grob-property grob 'self-alignment-X 0))
              (align-y (ly:grob-property grob 'self-alignment-Y 0)))

         (unless (and (music-is-of-type? incipit-music 'context-specification)
                      (assq (ly:music-property incipit-music 'context-type)
                            (ly:output-find-context-def (ly:grob-layout grob) 'Staff)))
           ;; not a staff-like context
           (set! incipit-music (context-spec-music incipit-music 'MensuralStaff)))
         (set! (ly:music-property incipit-music 'create-new) #t)
         (set! (ly:music-property incipit-music 'property-operations)
               (append (ly:music-property incipit-music 'property-operations)
                       `((push InstrumentName ,align-x self-alignment-X)
                         (push InstrumentName ,align-y self-alignment-Y)
                         (assign instrumentName ,instrument-name))))
         (set! (ly:grob-property grob 'long-text)
               #{ \markup \score { #incipit-music                       
                                   \layout {
                                            $(ly:grob-layout grob)
                                             indent-incipit-default = 15\mm
                                             line-width = #(primitive-eval
                                                            '(or (false-if-exception indent)
                                                                 indent-incipit-default))
                                             indent = #(primitive-eval
                                                        '(or (false-if-exception (- line-width incipit-width))
                                                             (* 0.5 line-width)))
                                             ragged-right = ##f
                                             ragged-last = ##f
                                             system-count = 1
                                             }
                                   }
                  #})
         (set! (ly:grob-property grob 'self-alignment-Y) #f)
         ;; Do 'self-alignment-X RIGHT only for the first InstrumentName, which
         ;; actually is the incipit. Otherwise self-alignment-X for the
         ;; shortInstrumentName is not longer settable.
         (let ((parts (ly:spanner-broken-into (ly:grob-original grob))))
           (if (and (pair? parts) (equal? grob (car parts)))
               (ly:grob-set-property! grob 'self-alignment-X RIGHT)))
         (system-start-text::print grob)))
    #}
  )

\language "deutsch"

Incipit = \relative c'' {
	\clef treble \time 4/4
	\omit Staff.TimeSignature
	\hide Stem
	%\mark "A D FIS CIS"
	< a, d fis cis' >

}

noten =  \relative c'' {
	\clef treble \key f \major \time 4/4
	c4 d e f \bar "|."
}

\score {

	\new Staff
	<<
		\incipit \new Staff \Incipit
		\set Staff.instrumentName = "Violino discordato"
		\noten
	>>


	\layout {
		indent = 4\cm
		incipit-width = 1\cm
	}
}

-- 
David Kastrup

Reply via email to