Subject: Re: Signets de pages pdf

From: Vincent Gay <[email-masked]>
Date: Sat, 3 Sep 2022 17:44:23 +0200

Le 24/08/2022 à 20:03, Jean Abou Samra a écrit :

Hello toutes et tous,
Je voudrais cacher un \tocItem dans le pdf mais qu'il reste dans le 
contenu. Il est au tout début de mon \book
\book {
   \bookpart {
     \tocItem TOC \markup "Table of Content"
     \markuplist
     ...

Pour la partie contenu ça marche

mais l'item est malheureusement bien visible, curieusement situé à la 
fin de ma table des matières

M'inspirant d'un bout de code de Jean
> #(define-markup-command (hide layout props arg) (markup-list?)
>    (interpret-markup-list layout props arg)
>    empty-stencil)
>
> \markup \hide \table-of-contents 

J'ai essayé de le modifier de la sorte :

#(define-markup-command (hide layout props arg) (markup?)
    (interpret-markup layout props arg)
    empty-stencil)

     \tocItem TOC \markup \hide "Table of Content"

Lily râle un peu mais pas trop,

Avertissement : Détection d'une valeur infini ou non numérique. 
Substitution par 0.0

le markup disparaît mais pas les tirets ni le N° de page (ben oui, je ne 
lui ai pas demandé)

Bref ma solution est vraiment trop simpliste. En existerait-il une autre ?

Merci d'avance et bon week-end

-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
https://myrealbook.vintherine.org/  -http://photos.vintherine.org/

---

From: Jean Abou Samra <[email-masked]>
Date: Sun, 4 Sep 2022 15:07:04 +0200

Bonjour Vincent,

>     \tocItem TOC \markup "Table of Content"

Si l'item se retrouve à la fin de la table des matières, c'est
parce que, à cause de la manière étrange dont la fonction \tocItem
est codée, les items sont dans l'ordre des appels à \tocItem, qui
n'est pas forcément l'ordre de la partition. Exemple :

\version "2.23.12"

\markuplist \table-of-contents

musA = { \tocItem \markup "A" a' }
musB = { \tocItem \markup "B" b' }

{ \musB }
{ \musA }

La table des matières affiche d'abord A, puis B.

Pour revenir à ta question, voici une version légèrement modifiée du
fichier toc-multicol.ly que je t'ai fourni dans l'autre fil
[https://lists.gnu.org/archive/html/lilypond-user-fr/2022-08/msg00106.html]
adaptée pour contenir une commande \tocGhostItem qui fait cela.
L'idée est très simple, il faut faire comme pour tocAct, avec
un markup vide. Le seul souci, c'est que le markup vide prend quand
même de la place (à cause des espacements inter-items), donc
il faut le retirer complètement, d'où la modification du code.

(Au fait, pour info, on dit en anglais « Table of Contents »,
avec un S.)

Cordialement,
Jean

---

From: Vincent Gay <[email-masked]>
Date: Sun, 4 Sep 2022 22:02:03 +0200

Le 04/09/2022 à 15:07, Jean Abou Samra a écrit :
> voici une version légèrement modifiée du
> fichier toc-multicol.ly 
Nickel, Merci

-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
https://myrealbook.vintherine.org/ - http://photos.vintherine.org/

---

From: Ya Gloops <[email-masked]>
Date: Sun, 4 Sep 2022 22:50:35 +0000 (UTC)

Salut !
Je m'y prend mal quelque part mais je ne sais pas où...

 \version "2.23.12"
\paper {
  #(use-modules (ice-9 match)
     (srfi srfi-1))
  page-breaking =
  #(lambda (paper-book)
     (let* ((paper (ly:paper-book-paper paper-book))
            (parent (ly:output-def-parent paper))
            (top-paper (if (null? parent)
                           paper
                           parent))
            (alist-before (ly:output-def-lookup top-paper 'label-page-table))
            (result (ly:optimal-breaking paper-book))
            (alist-after (ly:output-def-lookup top-paper 'label-page-table))
            (alist-part (let loop ((after alist-after)
                                   (acc '()))
                          (if (eq? after alist-before)
                              (reverse! acc)
                              (loop (cdr after)
                                (cons (car after)
                                  acc)))))
            (new-alist (let loop ((alist alist-part)
                                  (acc '())
                                  (same-pgnum '())
                                  (last-pgnum #f))
                         (match alist
                           (()
                            (append-reverse same-pgnum acc))
                           (((label . page) . rest)
                            (if (or (not last-pgnum)
                                    (eqv? last-pgnum page))
                                (loop rest
                                  acc
                                  (acons label page same-pgnum)
                                  page)
                                (loop rest
                                  (append-reverse same-pgnum acc)
                                  (list (cons label page))
                                  page)))))))
       (ly:output-def-set-variable! top-paper 'label-page-table (append-reverse new-alist alist-before))
       result))
}

% Voir https://lists.gnu.org/archive/html/lilypond-user-fr/2022-08/msg00074.html
% et https://gitlab.com/lilypond/lilypond/-/issues/6355
#(let ((default-table-of-contents make-table-of-contents-markup-list))
   (define-markup-list-command (table-of-contents layout props) ()
     (let* ((result (interpret-markup-list layout props (default-table-of-contents)))
            (alist (ly:output-def-lookup layout 'label-alist-table))
            (parent (ly:output-def-parent layout)))
       (when (not (null? parent))
         (ly:output-def-set-variable! parent 'label-alist-table alist))
       result)))

#(use-modules (ice-9 match))

#(define (group-to-fill-partial-sums lst weight threshold initial)
   (let loop ((lst lst)
              (i 0)
              (partial-sum (initial 0))
              (acc '()))
     (match lst
       (()
        (reverse! (map reverse! acc)))
       ((elt . rest)
        (let* ((elt-weight (weight elt))
               (new-sum (+ partial-sum elt-weight)))
          (cond
           ((null? acc)
            (loop rest i new-sum (list (list elt))))
           ((<= new-sum threshold)
            (loop rest i new-sum (cons (cons elt (car acc))
                                   (cdr acc))))
           (else
            (loop rest
              (1+ i)
              (+ (initial (1+ i))
                elt-weight)
              (cons (list elt)
                acc)))))))))

#(define (index-map f . lsts)
   (let loop ((lsts lsts)
              (i 0))
     (if (any null? lsts)
         '()
         (cons (apply f i (map car lsts))
           (loop (map cdr lsts)
             (1+ i))))))

#(ly:register-stencil-expression 'new-toc-group)
#(define-markup-command (new-toc-group layout props arg) (markup?)
   (let* ((stil (interpret-markup layout props arg))
          (expr (ly:stencil-expr stil))
          (x (ly:stencil-extent stil X))
          (y (ly:stencil-extent stil Y)))
     (ly:make-stencil `(new-toc-group ,expr)
       x
       y)))

#(define-markup-list-command (multicolumn-toc layout props columns) (index?)
   #:properties ((baseline-skip)
                 (padding 5)
                 (line-width))
   (let ((width (/ (- line-width (* padding (1- columns)))
                  columns))
         (height (- (ly:output-def-lookup layout 'paper-height)
                   (ly:output-def-lookup layout 'top-margin)
                   (ly:output-def-lookup layout 'bottom-margin))))
     (let ((mkup (ly:output-def-lookup layout 'tocItemMarkup)))
       (ly:output-def-set-variable! layout 'tocItemMarkup (make-override-markup
                                                           `(line-width . ,width)
                                                           mkup)))
     (match-let*
      (((title . ungrouped-unfiltered-stils)
        (interpret-markup-list layout
          props
          (make-table-of-contents-markup-list)))
       (ungrouped-stils (remove ly:stencil-empty? ungrouped-unfiltered-stils))
       (stils
        (let loop ((ungrouped-stils ungrouped-stils)
                   (group '())
                   (acc '()))
          (match ungrouped-stils
            (()
             (reverse!
              (map (lambda (group-elts)
                     (let ((rev-group-elts (reverse! group-elts)))
                       (stack-stencils Y DOWN baseline-skip rev-group-elts)))
                (cons group acc))))
            ((stil . rest)
             (match (ly:stencil-expr stil)
               (('new-toc-group expr)
                (let* ((x (ly:stencil-extent stil X))
                       (y (ly:stencil-extent stil Y))
                       (unwrapped (ly:make-stencil expr x y)))
                  (loop rest
                    (list unwrapped)
                    (cons group acc))))
               (_
                (loop rest
                  (cons stil group)
                  acc)))))))
       (split (group-to-fill-partial-sums
               stils
               (lambda (stil)
                 (+ (interval-length (ly:stencil-extent stil Y))
                   baseline-skip))
               height
               (let ((title-height (interval-length (ly:stencil-extent title Y))))
                 (lambda (i)
                   (if (< i columns)
                       title-height
                       0)))))
       (cols (group-to-fill-partial-sums
              split
              (const 1)
              columns
              (const 0))))
      (cons title
        (map (lambda (page-cols)
               (apply ly:stencil-add
                 (index-map
                  (lambda (i col-stils)
                    (ly:stencil-translate-axis
                     (stack-stencils Y DOWN baseline-skip col-stils)
                     (* i (+ width padding))
                     X))
                  page-cols)))
          cols)))))

\paper {
  ragged-last-bottom = ##t
  ragged-last = ##f
  %% Attention : s'il y a plusieurs Ã©lÃ©ments Ã  l'intÃ©rieur du tocActMarkup,
  %% ne pas faire \new-toc-group { ... } mais \new-toc-group \line { ... }
  tocActMarkup = \markup \new-toc-group \line {
  \vspace #1
  \hspace #-4
  \italic \fromproperty #'toc:text
}
tocGhostItemMarkup = ""
tocItemMarkup = \markup
\fontsize #-2
\fill-line {
  \fill-with-pattern #1.5 #CENTER .
  \line {
    \hspace #-6.5 %% Cancelling the first level's tocIndentMarkup
    \fromproperty #'toc:indent \fromproperty #'toc:text
    \hspace #2
  }
  \fromproperty #'toc:page
}
tocTitleMarkup =
\markup {
  \column {
    \vspace #3
    \fill-line { \fontsize #9 "My Real Book" }
    \vspace #1
    \fill-line { \fontsize #3 "For C Instruments" }
    \vspace #2
  }
}
}

tocAct =
#(define-music-function (label text) (symbol-list-or-symbol? markup?)
   (add-toc-item! 'tocActMarkup text label))

tocGhostItem =
#(define-music-function (label text) (symbol-list-or-symbol? markup?)
   (add-toc-item! 'tocGhostItemMarkup text label))

\bookpart {
  \paper {
    left-margin = 20
    right-margin = 15
  }
  \tocGhostItem TOC "Table of Contents"
  \markuplist
  % les \override sont facultatifs
  \override #'(padding . 10)
  \override #'(baseline-skip . 1)
  \multicolumn-toc #2
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

\bookpart {
  \tocItem \markup  {Title}
  \score {
   c'1
  }
}

Le dimanche 4 septembre 2022 à 22:02:18 UTC+2, Vincent Gay <[email-masked]> a écrit : 

Nickel, Merci

-- 
Vincent Gay

---

From: Jean Abou Samra <[email-masked]>
Date: Mon, 5 Sep 2022 00:59:39 +0200

Le 05/09/2022 à 00:50, Ya Gloops a écrit :
> [...]

Deux soucis ici. D'abord, il faut mettre tocItemMarkup et consorts
à l'intérieur du bloc \paper. Ensuite, conformément à ce que souhaitait
Vincent, les sauts de colonne et de page ne sont permis qu'avant un
\tocAct, et comme tu ne mets pas de \tocAct du tout, aucun saut
ne se fait. Soit tu utilises \tocAct au lieu de \tocItem (sûrement
en lui donnant un nom qui a plus de sens par rapport à ce que la
fonction représente dans ta partition, par exemple \tocPiece),
soit tu rajoutes \new-toc-group à l'intérieur de la définition du
tocItemMarkup, comme dans cet exemple :

  \version "2.23.12"
\paper {
   #(use-modules (ice-9 match)
      (srfi srfi-1))
   page-breaking =
   #(lambda (paper-book)
      (let* ((paper (ly:paper-book-paper paper-book))
             (parent (ly:output-def-parent paper))
             (top-paper (if (null? parent)
                            paper
                            parent))
             (alist-before (ly:output-def-lookup top-paper 
'label-page-table))
             (result (ly:optimal-breaking paper-book))
             (alist-after (ly:output-def-lookup top-paper 
'label-page-table))
             (alist-part (let loop ((after alist-after)
                                    (acc '()))
                           (if (eq? after alist-before)
                               (reverse! acc)
                               (loop (cdr after)
                                 (cons (car after)
                                   acc)))))
             (new-alist (let loop ((alist alist-part)
                                   (acc '())
                                   (same-pgnum '())
                                   (last-pgnum #f))
                          (match alist
                            (()
                             (append-reverse same-pgnum acc))
                            (((label . page) . rest)
                             (if (or (not last-pgnum)
                                     (eqv? last-pgnum page))
                                 (loop rest
                                   acc
                                   (acons label page same-pgnum)
                                   page)
                                 (loop rest
                                   (append-reverse same-pgnum acc)
                                   (list (cons label page))
                                   page)))))))
        (ly:output-def-set-variable! top-paper 'label-page-table 
(append-reverse new-alist alist-before))
        result))
}

% Voir 
https://lists.gnu.org/archive/html/lilypond-user-fr/2022-08/msg00074.html
% et https://gitlab.com/lilypond/lilypond/-/issues/6355
#(let ((default-table-of-contents make-table-of-contents-markup-list))
    (define-markup-list-command (table-of-contents layout props) ()
      (let* ((result (interpret-markup-list layout props 
(default-table-of-contents)))
             (alist (ly:output-def-lookup layout 'label-alist-table))
             (parent (ly:output-def-parent layout)))
        (when (not (null? parent))
          (ly:output-def-set-variable! parent 'label-alist-table alist))
        result)))

        (ly:output-def-set-variable! layout 'tocItemMarkup 
(make-override-markup
        (ungrouped-stils (remove ly:stencil-empty? 
ungrouped-unfiltered-stils))
                        (stack-stencils Y DOWN baseline-skip 
rev-group-elts)))
                (let ((title-height (interval-length (ly:stencil-extent 
title Y))))

\paper {
   ragged-last-bottom = ##t
   ragged-last = ##f
   %% Attention : s'il y a plusieurs Ã©lÃ©ments Ã  l'intÃ©rieur du 
tocActMarkup,
   tocItemMarkup = \markup \new-toc-group

tocAct =

tocGhostItem =

\bookpart {
   \paper {
     left-margin = 20
     right-margin = 15
   }

$@(map (lambda (i)
          #{
            \bookpart {
              \tocItem \markup  {Title}
              \score {
                c'1
              }
            }
          #})
         (iota 100))

---

From: Ya Gloops <[email-masked]>
Date: Mon, 5 Sep 2022 10:35:27 +0000 (UTC)

Merci Jean !
C'est cool... 

Le lundi 5 septembre 2022 à 00:59:44 UTC+2, Jean Abou Samra <[email-masked]> a écrit : 

 \version "2.23.12"
\paper {

% Voir 

\paper {
  ragged-last-bottom = ##t
  ragged-last = ##f

tocAct =

tocGhostItem =

\bookpart {
  \paper {
    left-margin = 20
    right-margin = 15
  }

$@(map (lambda (i)
         #{
           \bookpart {
             \tocItem \markup  {Title}
             \score {
               c'1
             }
           }
         #})
        (iota 100))

---

From: Ya Gloops <[email-masked]>
Date: Mon, 5 Sep 2022 10:57:38 +0000 (UTC)

Es-ce-que j'ai loupé quelque chose ou le first-page-number ne fonctionne plus ?
Gilles

\version "2.23.12"
\paper {

tocGhostItem =

\bookpart {
  \paper {
    first-page-number = #-1
    ragged-last-bottom = ##t
    ragged-last = ##f
    tocTitleMarkup = \markup  \bold \fontsize #10  \column {
      \fill-line { \null "Table of Contents" \null }
      \null
    }
    tocGhostItemMarkup =  ""
    tocItemMarkup = 
    \markup \bold
    { \new-toc-group
      \fontsize #-2
      \fill-line {
        \fill-with-pattern #1.5 #CENTER -
        \line {    
          \fromproperty #'toc:indent \fromproperty #'toc:text
        }
        \fromproperty #'toc:page
      }
    }
  }
  \tocGhostItem TOC  "Table of Contents"
  \markuplist %\table-of-contents
  % les \override sont facultatifs
  \override #'(padding . 10)
  \override #'(baseline-skip . 1)
  \multicolumn-toc #2
}

Title = \markup "Titles"

$@(map (lambda (i)
#{
  \bookpart {
    \tocItem \markup  {\Title}
    \header {   
    }
    \score {
      <<
        \context ChordNames { c }
        \context Staff = top { c }
  
      >>
      \layout {
        indent = 0
        \context {
          \Score
       
        }
      }
    }
  }
  #})
(iota 150))

Le lundi 5 septembre 2022 à 12:35:27 UTC+2, Ya Gloops <[email-masked]> a écrit : 

Merci Jean !
C'est cool... 

 \version "2.23.12"
\paper {

% Voir 

\paper {
  ragged-last-bottom = ##t
  ragged-last = ##f

tocAct =

tocGhostItem =

\bookpart {
  \paper {
    left-margin = 20
    right-margin = 15
  }

$@(map (lambda (i)
         #{
           \bookpart {
             \tocItem \markup  {Title}
             \score {
               c'1
             }
           }
         #})
        (iota 100))

---

From: Jean Abou Samra <[email-masked]>
Date: Wed, 7 Sep 2022 18:57:32 +0200

> Es-ce-que j'ai loupé quelque chose ou le first-page-number ne fonctionne plus ?

Comme tu n'utilises pas bookpart-level-page-numbering, la
numérotation des pages est gérée au niveau du book entier,
pas des bookparts, donc il faut mettre first-page-number
dans un \paper à l'intérieur du \book mais en dehors d'un
bookpart.

Par contre, il y a des problèmes avec l'outline du PDF,
que j'ai ajouté au tracker :
https://gitlab.com/lilypond/lilypond/-/issues/6419
(mais je n'ai pas le temps de chercher une solution de
contournement pour l'instant).

Cordialement,
Jean

---

From: Ya Gloops <[email-masked]>
Date: Thu, 8 Sep 2022 06:27:50 +0000 (UTC)

Merci Jean pour ta réponse !
Il me sembla avoir trouvé une incompatibilité entre une partie du code "page-number" et "toc-colonne"

 \version "2.23.0"

#(define-markup-command (page-number layout props) ()
   (if (ly:output-def-lookup layout 'print-page-total #f)
       (let* ((make-stil
               (lambda (total-string)
                 (stack-stencils
                  X
                  RIGHT
                  0.0
                  (map (lambda (m)
                         (interpret-markup layout props m))
                         (list (chain-assoc-get 'page:page-number-string props)
                               "/"
                               total-string)))))
              (gauge-stil (make-stil "0")))
         (ly:make-stencil
          `(delay-stencil-evaluation
            ,(delay
              (ly:stencil-expr (make-stil (ly:output-def-lookup layout 
'page:page-total)))))
          (ly:stencil-extent gauge-stil X)
          (ly:stencil-extent gauge-stil Y)))
       (interpret-markup layout props (make-fromproperty-markup 
'page:page-number-string))))

\paper {
  #(use-modules (srfi srfi-2) ; and-let*
                (lily page))
  page-post-process =
  #(lambda (paper pages)
     (let ((per-bookpart (ly:output-def-lookup paper 
'bookpart-level-page-numbering #f)))
       (for-each
        (lambda (page)
          (let ((numbering-paper
                 (or (and-let* (((not per-bookpart))
                                (parent (ly:output-def-parent paper))
                                ((not (null? parent))))
                        parent)
                     paper))
                (page-number (page-property page 'page-number)))
            (ly:output-def-set-variable!
             numbering-paper
             'page:page-total
             (number->string
              (max (if per-bookpart
                       (1+ (- page-number (ly:output-def-lookup numbering-paper 
'first-page-number)))
                       page-number)
                   (string->number (ly:output-def-lookup numbering-paper 'page:page-total 
"0")))))))
       pages)))
  oddHeaderMarkup = \markup {
    \if \should-print-page-number {
      \fill-line { \null \concat { \page-number } }
    }
  }
  evenHeaderMarkup = \markup {
    \if \should-print-page-number {
      \fill-line { \concat { \page-number } \null }
    }
  }
}

%Plus d'erreur si commenté...

%jusqu'ici !

\paper {
  number-pages-per-bookpart = ##f %% à décommenter si souhaité
  print-page-total = ##t %% à enlever si non souhaité
  first-page-number = -3
}

\bookpart{
  \tocItem \markup A
  { c' }
  \pageBreak
  { c' }
}
\bookpart{
  \tocItem \markup B
  { c' }
  \pageBreak
  { c' }
}

Le mercredi 7 septembre 2022 à 18:57:35 UTC+2, Jean Abou Samra <[email-masked]> a écrit : 

Cordialement,
Jean