[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Make TOC entries available to LaTeX

From: Urs Liska
Subject: Re: Make TOC entries available to LaTeX
Date: Thu, 26 Apr 2018 08:48:46 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

Hi Harm,

thanks for looking into this.

Am 25.04.2018 um 23:13 schrieb Thomas Morley:
2018-04-25 16:00 GMT+02:00 Urs Liska <address@hidden>:
Assuming the TOC items are created using \tocItem then it should be
guaranteed that there is the same label present as key in both label-table
and one of the (toc-items) sublists. So (IISC) several further checks could
be removed additionally (or am I missing something?):

              (let* ((label (car toc-item))
                     (text  (caddr toc-item))
                     (page (assoc-ref label-table label)))

should be sufficient? Therefore the whole function could be written as
Being always paranoid, I would do some thorough testings.

OK, I've found the case where my assumption would break. A rare (and pointless) case but an existing one:

#(define (oly:create-toc-file layout pages)
   (format #t "label-page-table:\n~a\n" (ly:output-def-lookup layout 
   (format #t "toc-items:\n~a\n" (toc-items)))

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

\tocItem \markup "A TOC entry"

\tocItem \markup "Another TOC entry"

The \tocItem without anything following it will create an entry in the toc-items list but no label. So this second simplification won't work reliably.


I think the inclusion in the TeX TOC can (now?) be done in a simpler way
using the catchfile package:



(Answer from

There's only one issue: The TOC will create wrong entries when LilyPond's
first page number is not 1. So there should actually be an offset in place.
How can I read the value of the first-page-number variable to set up this
page-post-process has the layout-variable.
(ly:output-def-lookup layout 'first-page-number) should do the trick.

Thanks, this works.
What do you think: this example code is much easier to understand than the one currently in the manual. Should I propose an update?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]