Variable donannt accès à la parité des pages

Bonjour à tous,
Pour la mise en page d'un document complexe, je désire placer un nom de pièce (\opus) aligné alternativement à droite de la page, ou à gauche, en fonction de la parité de la page du document, toujours à l'extérieur.
L'un de vous a-t-il une piste ? Je ne sais pas récupérer la parité de la page. Je vois des variables pour gérer cette parité dans un Header seulement.
Merci de votre aide.
Cordialement,
Fr. Benoît-Marie

Je n'ai qu'une piste:

La fonction lambda permet de récupérer la parité de la page, si elle est impaire:

\bookpart {
  \paper {
    oddHeaderMarkup =  ""
    oddFooterMarkup = ""
    #(use-modules (ice-9 match))
    page-breaking =
    #(lambda (paper-book)
       (match-let* (((page) (ly:optimal-breaking paper-book))
                    (num (ly:prob-property page 'page-number)))
                   (if (odd? num)
                       (list page)
                       '())))
  }
  \markup ""
}

Si elle est paire:

\bookpart {
  \paper {
    evenHeaderMarkup =  ""
    evenFooterMarkup = ""
    #(use-modules (ice-9 match))
    page-breaking =
    #(lambda (paper-book)
       (match-let* (((page) (ly:optimal-breaking paper-book))
                    (num (ly:prob-property page 'page-number)))
                   (if (even? num)
                       (list page)
                       '())))
  }
  \markup ""
}

Bon courage,

Ben

Bonjour,
Est-ce que ceci réponds à la question

\version "2.24.3"

 \header { opus = "MaPiece"  }

\paper {   
  ragged-bottom = ##t
  %-----inserer dans paper ---------
  oddHeaderMarkup = \markup
  \fill-line {
   \unless \on-first-page-of-part \fromproperty #'header:opus 
   \null
  }
   evenHeaderMarkup = \markup
  \fill-line {
    \null
    \fromproperty #'header:opus
  }
  %--------------
}

\repeat unfold 7 {  c'1 \pageBreak } 

Cordialement

Je m'a trompé il faut inverser dans les fill-line les \null :
voici le bon code

\version "2.24.3"

 \header { opus = "MaPiece"  }

\paper {   
  ragged-bottom = ##t
  %-----inserer dans paper ---------
   oddHeaderMarkup = \markup 
  \fill-line {
    \null
  \unless \on-first-page  \fromproperty #'header:opus 
   
  }
   evenHeaderMarkup = \markup
  \fill-line {
        \fromproperty #'header:opus
     \null
  }
  %--------------
}
\repeat unfold 7 {  c'1 \pageBreak } 

Cordialement

Merci beaucoup.

Cela ne correspond pas tout-à-fait à ma demande. Il s'agit d'afficher le nom d'opus au-dessus de chaque opus, il y en a plusieurs par page. Et non pas d'insérer alternativement le numéro d'opus dans le header de chaque page.

Cordialement,
fr. B.-M. Fl.

Je ne saisi pas bien la demande (un exemple ou capture écran peut-être ? )
une autre proposition à adapter évidement y compris avec la proposition précédente

\version "2.24"

C=\fixed c' { c1  \break c }
D=\fixed c' { d1  \break d}
E=\fixed c' { e1  \break e }
A=\fixed c' { a1  \break a }

\score { 
  \header { piece = "la piece" opus = "opus C" }
  \new Staff \C
}

\noPageBreak
\score { 
  \header { opus = "opus D" }
  \new Staff \D
}

\noPageBreak
\score { 
  \header { opus = "opus E" }
  \new Staff \E
}

\noPageBreak
\score { 
  \header { opus = "opus A" }
  \new Staff \A
}

Cordialement

Voici un extrait de monde code :

\version "2.24.1"
\language "italiano"

\header {
  title = "Ordre des prêcheurs"
  subtitle = "Temps ordinaire"
  % Supprimer le pied de page par défaut
  tagline = ##f
  %\copyright = "Province de France"
}
ag =  \once \override LyricText.self-alignment-X = #LEFT
dyn = #(make-dynamic-script #{ \markup \text "DynamicText" #})
stemOff = \hide Staff.Stem
stemOn  = \undo \stemOff
\paper {
  two-sided = ##t
  #(set-paper-size "a5")
    system-system-spacing = #'((basic-distance . 0.1) (padding . 4))
  ragged-last-bottom = ##t
  ragged-bottom = ##t
   ragged-right = ##f
   indent = 0

   %%%%%%%%%%%
   %réglage de la table des matières
   %%%%%%%%%%%%%
     tocTitleMarkup =   \markup \huge \column { \vspace #3
    \fill-line { \null "Table des matières" \null  }
    \vspace #3
     }
   tocItemMarkup = \markup \large \fill-line {
  \fromproperty #'toc:text \fromproperty #'toc:page
}
 }

\layout {
  indent = 0
  #(layout-set-staff-size 15)
  \context {
    \Score
    \remove "Bar_number_engraver"
  }
  \context {
    \Voice
    \consists "Melody_engraver"
    \override Stem.neutral-direction = #'()
  }
}




\markuplist \table-of-contents

\pageBreak


\pageBreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Hymnes du sanctoral
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%titre de partie
\tocItem \markup { \huge \smallCaps "HS  Hymnes du sanctoral"  }
 \markup { \vspace#10  \fill-line { \huge \smallCaps "Hymnes du sanctoral"}  }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pageBreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  HS1

\markup{
  \bold \huge HS1
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global = {
  \key re \major
  \time 2/4
}

soprano = \relative do' {
  \global
  % En avant la musique !
  fad2 fad4 sold la2 fad si2. dod4 re2 dod\breathe mi re4 dod si2 fad la2. sol4 fad(mi) re2 fad fad4 sold la2 fad si2. dod4 re2 dod2
  mi re4 dod si2 fad la2. si4 si1\fermata
}

alto = \relative do' {
  \global
  % En avant la musique !
  re2 re4 re dod2 re sol2. mi4 fad2 mi mi fad4 fad mi2 dod2 dod2. dod4 dod2 re re re4 re dod2 re sol2. mi4 fad2 mi mi fad4 fad mi2 dod2 dod2. fad4 red1
}

verseOne = \lyricmode {
  \set stanza = "Réf."
  % Ajouter ici des paroles.
  Joie dans le Ciel et joie sur ter -- re_! Sain -- tes et saints dans la lu  -- miè -- re en leur hon -- neur, que tous les hom -- mes chan -- tent ton nom ô Dieu vi -- vant_!
}
bass = \relative do' {
  \global
  % En avant la musique !
  re2 re4 re fad,2 si  sol2. la4 re2 la2 la re4 re sol,2 la la2. la4 la2 si si si4 si fad2 si sol2. la4 re2 la la re4 re sol,2 la fad2. fad4 si1
}


\score {
  \new ChoirStaff <<
    \new Staff \with {
      midiInstrument = "choir aahs"
    } <<
      \new Voice = "soprano" { \voiceOne \soprano }
      \new Voice = "alto" { \voiceTwo \alto }
      \new Voice = "bass" { \voiceTwo \bass }
    >>
    \new Lyrics \lyricsto "soprano" \verseOne

  >>
  \layout { }

}



soprano = \relative do' {
  \global
  % En avant la musique !
  fad2 si4 si la2 si re dod4 (si) dod( la) fad2\breathe la2 la4 sol fad2. re4 mi2 mi fad1 \breathe  fad2 si4 si la2 si re dod4 (si) dod( la) fad2\breathe la2 la4 sol fad2. re4 mi2 mi fad1\fermata
}

alto = \relative do' {
  \global
  % En avant la musique !

}

verseOne = \lyricmode {
  \set stanza = "1."
  % Ajouter ici des paroles.
  Vois, ô Sei -- gneur ce peuple im -- men -- se; qui de par -- tout s'est ras -- sem -- blé_! Face à l'A -- gneau leur flot s'a -- van -- ce et tous, de -- bout, vont l'ac -- cla -- mer_!
}
bass = \relative do' {
  \global
  % En avant la musique !

}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Ajouter ici des paroles.
   Vois, ô Sei -- gneur, tes grands A -- pô -- tres par qui ton Nom fut an -- non -- cé, qui pour por -- ter ta force aux au -- tres d'un coeur al -- lègre ont tout qui -- té_!
}

verseThree = \lyricmode {
  \set stanza = "3."
  % Ajouter ici des paroles.
  Qui pour -- ra di -- re les dé -- li -- ces que Dieu pré -- pare à ses mar -- tyrs_? Vois, rouge en -- cor des durs sé -- vi -- ces, sous les lau -- riers, la chair flé -- trir_!
}

verseFour = \lyricmode {
  \set stanza = "4."
  % Ajouter ici des paroles.
  Vois s'a -- van -- cer les vier -- ges pu -- res qui dans l'at -- ten -- te de l'é -- poux, se ré -- ser --vèr -- ent sans par -- ju -- re, à son a -- mour tendre et ja -- loux_!
}

verseFive = \lyricmode {
  \set stanza = "5."
  % Ajouter ici des paroles.
  Gloire aux lut -- teurs dont la cons -- tan  -- ce,  a fait scan -- dale aux yeux char -- nels_! Brève i -- ci bas fut leur souf -- fran -- ce, mais leur tri -- omphe est é -- ter -- nel_!
}
verseSix = \lyricmode {
  \set stanza = "6."
  % Ajouter ici des paroles.
  Gloire au Sei -- gneur, hon -- neur au Pè -- re qui de tout temps nous a ai -- més, Gloire à son Fils SAu -- veur du mon -- de_! Gloire à l'Es -- prit_! Al -- lé -- lu -- ia_!
}


\score {
  \new ChoirStaff <<
    \new Staff \with {
      midiInstrument = "choir aahs"
    } <<
      \new Voice = "soprano" { \voiceOne \soprano }
      \new Voice = "alto" { \voiceTwo \alto }
      \new Voice = "bass" { \voiceTwo \bass }
    >>
    \new Lyrics \lyricsto "soprano" \verseOne
    \new Lyrics \lyricsto "soprano" \verseTwo
    \new Lyrics \lyricsto "soprano" \verseThree
    \new Lyrics \lyricsto "soprano" \verseFour
    \new Lyrics \lyricsto "soprano" \verseFive
  >>
  \layout { }

}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  HS2

\markup{
  \bold \huge HS2
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global = {
  \key sol \major
  \numericTimeSignature
  \time 12/8
  \tempo "Vif"
}
\paper{
    system-system-spacing = #'((basic-distance . 0.1) (padding . 1))
}

soprano = \relative do'' {
  \global
  % En avant la musique !
 \repeat volta 2 {sol4 la8 si4 la8 sol8 fad mi4 re \time 14/8 sol la8 si4 do8 si4 la4 sol( sol) \break}
  \time 12/8 si4 si8 re4 do8 si la si4 si \break re4 re8 mi4 re8 do si la4( la)
  si4 re8 do4 si8 sol la si4( si) \break si si8 do4 si8 la sol fad4 sol\fermata
}

alto = \relative do' {
  \global
  % En avant la musique !

}

tenor = \relative do' {
  \global
  % En avant la musique !
  mi4 mi8 fad4 fad8 mi8 re do4 re mi4 mi8 fad4 sol8 fad4 mi re( re)
  sol4 sol8 fad4 sol8 fad mi fad4( fad) si si8 sol4 fad8 mi mi fad4( fad)
  sol4 sol8 sol4 fad8 mi mi fad4( fad) sol sol8 mi4 mi8 mi mi re4 re
}

bass = \relative do' {
  \global
  % En avant la musique !
  mi4 mi8 si4 re8 mi8 si do4 re  mi4 mi8 si4 la8 si4 do sol4 sol
  mi'4 mi8 si4 la8 si do si4( si)
  sol'4 sol8 do,4 re8 la8 la re4( re)
  sol4 fad8 mi4  re8 re do si4 si mi4 mi8 la,4 la8 do mi re4 sol,\fermata
}

verse = \lyricmode {
    \set stanza = "1."
  % Ajouter ici des paroles.
  Jé -- sus -- Christ, Pierre an -- gu -- lai -- re
  Mé -- pri -- sée des bâ -- tis -- seurs
  D'être en toi pier -- res vi -- van -- tes
  É -- di -- fiées dans ta mai -- son_:
  Mys -- tè -- rieu -- se com -- mun -- nion
  Que l'a -- mour fonde et ci -- men  -- te.
}
verseBis = \lyricmode {Mais u -- nique aux yeux du Pè -- re, Nous chan -- tons no -- tre bon -- heur}


\score {
  \new ChoirStaff <<
    \new Staff \with {
      midiInstrument = "choir aahs"
    } <<
      \new Voice = "soprano" { \voiceOne \soprano }
      \new Voice = "alto" { \voiceTwo \alto }
    >>
    \new Lyrics \with {
      \override VerticalAxisGrou.staff-affinity = #CENTER
    } \lyricsto "soprano" \verse
      \new Lyrics \with {
      \override VerticalAxisGrou.staff-affinity = #CENTER
    } \lyricsto "soprano" \verseBis
    \new Staff \with {
      midiInstrument = "choir aahs"
    } <<
      \clef treble
      \new Voice = "tenor" { \voiceOne \tenor }
      \new Voice = "bass" { \voiceTwo \bass }
    >>
  >>
  \layout { }
  }
\markup {
  \fill-line {
    % décalage par rapport à la marge de gauche
    % peut être supprimé si l'espace sur la page est réduit
    \hspace #0.1
    \column {
      \line { \bold "2."
       \small \column {
          "De ces vies que la souffance"
  "À taillées et martelées"
   "De ces pierres où l'espérance"
"A gravé sa nouveauté,"
"Tu construis le sanctuaire"
"où réside l'Esprit Saint"
"Et l'église est le témoin"
"Du salut pour notre terre."
        }
      }
      % ajout d'espace vertical entre les couplets

    }
    % ajout d'espace horizontal entre les colonnes
    \hspace #0.1
    \column {
      \line { \bold "3."
       \small \column {
          "Jésus-Christ, pierre de faîte"
"Où convergent à l'infini"
"Et s'embrassent tous les êtres"
"Que déjà l'amour unit,"
"L'Esprit Saint à ta louange"
"De ces Pierres qui tirent un chant"
"Qui jaillit secrètement"
"Et s'accorde aux voix des anges."
        }
      }

    }
    % décalage par rapport à la marge de droite
    % peut être supprimé si l'espace sur la page est réduit
    \hspace #0.1
  }
}



\pageBreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  HS3
\markup{
  \bold \huge HS3
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global = {
  \key do \major
  \time 2/4
  \partial 8
  \tempo "Lent" 4=76
}

sopranoVoice = \relative do'' {
  \global
  \dynamicUp
 re8 do4 si8 la do4 si8 la sol la si sol la4. mi8 sol4. mi8 mi re do re mi4 mi8 sol la si do la si4.
 re8 do4 si8 la sol si la2.

}

verseOne = \lyricmode {
  \set stanza = "1."
  % Ajouter ici des paroles.
  Pa- ro- le vi- van- te, sa- ges- se du Très- Haut, Toi seule a tra- duit l'in- néf- fa- ble A- vec nos sim- ples mots.

}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Ajouter ici des paroles.
  Tu es la ré- pon-se aux cris des mal- heu- reux, La voix qui ré- veil- le les hom- mes Et fait le- ver les yeux.
}

verseThree = \lyricmode {
  \set stanza = "3."
  % Ajouter ici des paroles.
  Tu es la lu- miè- re, La vie ma- ni- fes- tée, L'A- mour qui trans- for- me le mon- de Et no- tre chair bles- sée.
}

verseFour = \lyricmode {
  \set stanza = "4."
  % Ajouter ici des paroles.
  En- voie tes a- pô- tres Bran- dir des mots de feu Qui seuls chas- se- ront les té- nè- bres Sous le grand jour de Dieu. A  - - - - - men_!
}

\score {
  \new Staff \with {
    midiInstrument = "choir aahs"
  } { \sopranoVoice }
  \addlyrics { \verseOne }
  \addlyrics { \verseTwo }
  \addlyrics { \verseThree }
  \addlyrics { \verseFour }
  \layout { }

}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  HS4

\markup {" "}
\markup{ " "}
\markup{ " "}
\markup{ " "}
\markup{
  \bold \huge HS4
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global = {
  \key fa \major
  \time 4/4
  \partial 4
  \tempo "Modéré, comme une marche" 4=76
}

sopranoVoice = \relative do' {
  \global
  \dynamicUp
  % En avant la musique !
  r8 re8 fa sol la4 fa8 re mi2. mi8 fa sol4 sol8 fa sol4 mi fa re
  r4 la' la re8 do sib4 sib8 la sol2. fa8 sol la4 fa mi do re2 ( re4) r4
}

verseOne = \lyricmode {
  \set stanza = "1."
  % Ajouter ici des paroles.
  Dans la fai -- bles -- se de DIeu, Les mar -- tyrs ont pui -- sé la for -- ce_;
  Leurs pas dans les pas du sau -- veurs, Ils af -- fron -- tent l'ad -- ver -- saire.
}

verseTwo = \lyricmode {
  \set stanza = "2."
  % Ajouter ici des paroles.
  En -- ve -- lop -- pés de tour -- ments, Ils re -- dis -- sent le Nom du Pè -- re_;
  Au long du com -- bat pour la foi, Se con -- som -- me leur bap -- tême.
}

verseThree = \lyricmode {
  \set stanza = "3."
  % Ajouter ici des paroles.
  Près de la croix de Jé -- sus, Ils re -- joi -- gnent Ma -- rie sa Mè -- re_;
  Té -- moins d'un Sei -- gneur hu -- mi -- lié, Ils pé -- nè -- trent son mys -- tère.
}

verseFour = \lyricmode {
  \set stanza = "4."
  % Ajouter ici des paroles.
  Leur dé -- fen -- seur est vi -- vant, La lu -- mière es -- pé -- rée se lè -- ve_;
  La mort a per -- du son pou -- voir, Et la paix les trans -- fi -- gure.
}

\score {
  \new Staff \with {
    midiInstrument = "choir aahs"
  } { \sopranoVoice }
  \addlyrics { \verseOne }
  \addlyrics { \verseTwo }
  \addlyrics { \verseThree }
  \addlyrics { \verseFour }
  \layout { }

}
\pageBreak

[Carnet essai 4.pdf|attachment](upload://bNCNyo4OyeQxa6DKYZhq5ktb7ci.pdf) (309,5 Ko)



Je souhaite que mes étiquettes HS1, HS2, HS3... puissent prendre place soit à gauche au dessus des partitions sur les pages paires, comme c'est le cas, mais à droite, si la page est impaire.

Évidemment, je peux le faire manuellement sur cet extrait, mais le document est très gros. Et je souhaite pouvoir l'enrichir.
Cordialement,
fr. B.-M. Fl.

Je vous remercie.
Ne connaissant Scheme, je ne comprends pas ce que fait ce code.
Cordialement,

Ce n'est pas trivial d'obtenir la parité de la page courante dans un titre de \score, tout simplement parce que la mise en page dépend de la taille de chaque titre, donc les titres sont dessinés avant que la répartition du contenu sur les pages ne soit calculée. Ce n'est pas complètement impossible, mais il faut écrire un peu de code Scheme pour « retarder » cette évaluation jusqu'à l'écriture finale de la sortie, et malheureusement je ne vois pas de moyen de s'en sortir sans rajouter aussi des \label dans le code.

Exemple :

\version "2.24.3"

\paper {
  ragged-bottom = ##t
}

#(define-markup-command (label-parity-placement layout props label arg)
                        (symbol? markup?)
   (let* ((stil-even (interpret-markup layout props #{ \markup \fill-line { #arg \null } #}))
          (stil-odd (interpret-markup layout props #{ \markup \fill-line { \null #arg } #})))
     (ly:make-stencil
      `(delay-stencil-evaluation
        ,(delay
          (ly:stencil-expr
           (let* ((table (ly:output-def-lookup layout 'label-page-table))
                  (page (assv-ref table label)))
             (if (even? page)
                 stil-even
                 stil-odd)))))
      (ly:stencil-extent stil-even X)
      (ly:stencil-extent stil-even Y))))

\label scoreI
\score {
  \header {
    opus = \markup \label-parity-placement #'scoreI "Opus 1"
  }
  { c' }
}

\label scoreII
\score {
  \header {
    opus = \markup \label-parity-placement #'scoreII "Opus 2"
  }
  { d' }
}

\pageBreak

\label scoreIII
\score {
  \header {
    opus = \markup \label-parity-placement #'scoreIII "Opus 3"
  }
  { d' }
}
2 « J'aime »

Ha ben je cherchais une astuce avec un if et/ou modulo page-number 2
Je n’allais pas m'en sortir.
Merci

Merci ! Cela fonctionne parfaitement.
C'est tout-à-fait le résultat escompté.
Bon dimanche.