Il giorno ven 25 mag 2018 alle 7:55, Urs Liska <li...@openlilylib.org>
ha scritto:
Am 25. Mai 2018 07:48:58 MESZ schrieb Federico Bruni
<f...@inventati.org>:
Il giorno gio 24 mag 2018 alle 9:09, Urs Liska
<li...@openlilylib.org>
ha scritto:
This is the function as it ended up in my project files:
% Print table of contents entries to <basename>.toc
% Based on
%
http://lilypond.org/doc/v2.19/Documentation/usage-big-page#sharing-the-table-of-contents
% Pointed to by "Thomas Morley"
#(define (oly:create-toc-file layout pages)
(let*
((label-table (ly:output-def-lookup layout 'label-page-table))
(toc-items (toc-items)))
(if (not (null? label-table))
(let*
( ;; We need a page-offset so entries are offset to begin
with p.1
;; (for use in \includepdf)
(page-offset (- (ly:output-def-lookup layout
'first-page-number) 1))
(format-line
(lambda (toc-item)
(let*
((label (car toc-item))
(text (caddr toc-item))
(page (- (assoc-ref label-table label)
page-offset)))
(format #f "~a,subsection,2,{~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 "~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)))))
page-offset calculates the offset of the first-page-number versus
'1'
and subtracts that from the actual page number of the TOC entry.
That
means when your score starts on page 16 a TOC item on the third
page
of the score will still get a TOC entry with page 3, and
\includepdf
will generate the appropriate TOC entry in the enclosing LaTeX
document.
I get an error:
Drawing systems....brani.ly:35:23: In procedure - in expression (-
(assoc-ref label-table label) page-offset):
brani.ly:35:23: Wrong type argument in position 1: #f
The offending line is:
(page (- (assoc-ref label-table label) page-offset)))
Can you tell what toc-item contains by inserting a display between
the lambda and let lines immediately before that line?
I have a minimal example, see attachment.
The problem is triggered by wrapping each \tocItem within a \bookpart
block (instead of the implicit \book, which works fine).
Here's what display shows:
Drawing systems.../home/fede/tmp/lilypond/toc-latex/test.ly:18:15: In
procedure memoization in expression (let* (# # #) (format #f
"~a,subsection,2,{~a},~a" ...)):
/home/fede/tmp/lilypond/toc-latex/test.ly:18:15: In file
"/home/fede/tmp/lilypond/toc-latex/test.ly", line 19: Bad binding
(display text (caddr toc-item)) in expression (let* ((label (car
toc-item)) (display text (caddr toc-item)) (page (- (assoc-ref
label-table label) page-offset))) (format #f "~a,subsection,2,{~a},~a"
page text label)).
\version "2.19.81"
% Print table of contents entries to <basename>.toc
% Based on
% http://lilypond.org/doc/v2.19/Documentation/usage-big-page#sharing-the-table-of-contents
% Pointed to by "Thomas Morley"
#(define (oly:create-toc-file layout pages)
(let*
((label-table (ly:output-def-lookup layout 'label-page-table))
(toc-items (toc-items)))
(if (not (null? label-table))
(let*
( ;; We need a page-offset so entries are offset to begin with p.1
;; (for use in \includepdf)
(page-offset (- (ly:output-def-lookup layout 'first-page-number) 1))
(format-line
(lambda (toc-item)
(let*
((label (car toc-item))
(display text (caddr toc-item))
(page (- (assoc-ref label-table label) page-offset)))
(format #f "~a,subsection,2,{~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 "~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 {
first-page-number = 20
print-first-page-number = ##t
#(define (page-post-process layout pages) (oly:create-toc-file layout pages))
}
\bookpart {
\tocItem \markup "A TOC entry"
{ c' }
}
\bookpart {
\tocItem \markup "Another TOC entry"
{ d' e' }
}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user