[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, 24 May 2018 18:22:03 +0200 |
User-agent: |
K-9 Mail for Android |
Am 24. Mai 2018 14:55:37 MESZ schrieb Federico Bruni <address@hidden>:
>
>
>Il giorno gio 24 mag 2018 alle 9:09, Urs Liska <address@hidden>
>ha scritto:
>>
>>
>> Am 24.05.2018 um 08:52 schrieb Federico Bruni:
>>>
>>>
>>> Il giorno gio 26 apr 2018 alle 8:48, Urs Liska
>>> <address@hidden> ha scritto:
>>>>> [...]
>>>>>
>>>>>> 3)
>>>>>> I think the inclusion in the TeX TOC can (now?) be done in a
>>>>>> simpler way
>>>>>> using the catchfile package:
>>>>>>
>>>>>> \documentclass{article}
>>>>>> \usepackage{pdfpages,catchfile}
>>>>>> \newcommand\includelilypond[1]{%
>>>>>> \begingroup
>>>>>> \CatchFileDef\currentlilypondtoc{#1.toc}{}
>>>>>>
>>>>>>
>\edef\x{\noexpand\includepdf[pages=-,addtotoc={\currentlilypondtoc}]{#1.pdf}}
>
>>>>>>
>>>>>> \expandafter\endgroup\x
>>>>>> }
>>>>>> \begin{document}
>>>>>> \tableofcontents
>>>>>> \includelilypond{test}
>>>>>> \end{document}
>>>>>>
>>>>>>
>>>>>> (Answer from
>>>>>>
>https://tex.stackexchange.com/questions/428239/merge-in-manual-toc-entries-in-a-lualatex-document)
>
>>>>>>
>>>>>>
>>>>>> 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
>>>>>> offset?
>>>>> 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?
>>>>
>>>
>>> +1 for the update!
>>>
>>> Urs, can you show a minimal example using the first-page-number?
>>
>> 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.
>>
>>> How do you use it all the above in combination with lyluatex?
>>
>> I think this should be transparent. lyluatex will assign an arbitrary
>
>> first page number (i.e. the page it assumes the score will start),
>> then the above function will offset the TOC entries to be based on
>> "1", and \includepdf will translate them back to whatever page
>> they'll *actually* happen to be on in the end.
>>
>
>Thanks for the detailed explanation.
>
>However, I cannot make it work with lyluatex.
>You wrote that you wanted to use lyluatex to include the lilypond file
>(not the PDF), in order to use the cache system.
I'm not sure this is what you need, but you should look up raw-pdf and the
section about wrapping commands in the manual.
the
urs
- Re: Make TOC entries available to LaTeX, Federico Bruni, 2018/05/24
- Re: Make TOC entries available to LaTeX, Federico Bruni, 2018/05/25
- Re: Make TOC entries available to LaTeX, Urs Liska, 2018/05/25
- Re: Make TOC entries available to LaTeX, Federico Bruni, 2018/05/25
- Re: Make TOC entries available to LaTeX, Urs Liska, 2018/05/25
- Re: Make TOC entries available to LaTeX, Federico Bruni, 2018/05/25
- Re: Make TOC entries available to LaTeX, Urs Liska, 2018/05/25
- Re: Make TOC entries available to LaTeX, Federico Bruni, 2018/05/25