3.7 Compartir l’índex general

Aquestes funcions ja existeixen al paquet OrchestralLily:

http://repo.or.cz/w/orchestrallily.git

Per aconseguir més flexibilitat en el processament del text, alguns usuaris prefereixen exporta l’índex general o taula de continguts des del Lilypond i llegir-lo dins del LaTeX.

Exportació de l’index general des del LilyPond

Això suposa que la nostra partitura té diversos moviments dins del mateix fitxer de sortida del LilyPond.

#(define (oly:create-toc-file layout pages)
  (let* ((label-table (ly:output-def-lookup layout 'label-page-table)))
    (if (not (null? label-table))
      (let* ((format-line (lambda (toc-item)
             (let* ((label (car toc-item))
                    (text  (caddr toc-item))
                    (label-page (and (list? label-table)
                                     (assoc label label-table)))
                    (page (and label-page (cdr label-page))))
               (format #f "~a, section, 1, {~a}, ~a" page text label))))
             (formatted-toc-items (map format-line (toc-items)))
             (whole-string (string-join formatted-toc-items ",\n"))
             (output-name (ly:parser-output-name))
             (outfilename (format #f "~a.toc" output-name))
             (outfile (open-output-file outfilename)))
        (if (output-port? outfile)
            (display whole-string outfile)
            (ly:warning (_ "Unable to open output file ~a for the TOC information") outfilename))
        (close-output-port outfile)))))

\paper {
  #(define (page-post-process layout pages) (oly:create-toc-file layout pages))
}

Importació de l’índex general dins del LaTeX

Al LaTeX, la capçalera ha d’incloure el següent:

\usepackage{pdfpages}
\includescore{nombredelapartitura}

donde \includescore està definit com:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \includescore{PossibleExtension}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Llegir els budells de l'índex genera per a un fitxer PDF
% a partir del fitxer .toc corresponent.
% Això requereix de força ajustaments del LaTeX, perquè no és
% fàcil llegir coses d'un fitxer i inserir-les dins dels arguments
% d'un macro.

% Solució del Patrick Fimml en el canal #latex el 18 d'abril de 2009:
% \readfile{filename}{\variable}
% llegeix el contingut del fitxer en \variable (no definida si el
% fitxer no existeix)
\newread\readfile@f
\def\readfile@line#1{%
{\catcode`\^^M=10\global\read\readfile@f to \readfile@tmp}%
\edef\do{\noexpand\g@addto@macro{\noexpand#1}{\readfile@tmp}}\do%
\ifeof\readfile@f\else%
\readfile@line{#1}%
\fi%
}
\def\readfile#1#2{%
\openin\readfile@f=#1 %
\ifeof\readfile@f%
\typeout{No TOC file #1 available!}%
\else%
\gdef#2{}%
\readfile@line{#2}%
\fi
\closein\readfile@f%
}%


\newcommand{\includescore}[1]{
\def\oly@fname{\oly@basename\@ifmtarg{#1}{}{_#1}}
\let\oly@addtotoc\undefined
\readfile{\oly@xxxxxxxxx}{\oly@addtotoc}
\ifx\oly@addtotoc\undefined
\includepdf[pages=-]{\oly@fname}
\else
\edef\includeit{\noexpand\includepdf[pages=-,addtotoc={\oly@addtotoc}]
{\oly@fname}}\includeit
\fi
}

LilyPond: manual d’utilització del programa v2.25.14 (branca de desenvolupament).