[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: No pdf marks with bookparts?
From: |
Thomas Morley |
Subject: |
Re: No pdf marks with bookparts? |
Date: |
Sun, 2 Aug 2020 11:31:23 +0200 |
Am So., 2. Aug. 2020 um 10:22 Uhr schrieb Thomas Morley
<thomasmorley65@gmail.com>:
>
> Am Sa., 1. Aug. 2020 um 23:06 Uhr schrieb David Kastrup <dak@gnu.org>:
> >
> > Thomas Morley <thomasmorley65@gmail.com> writes:
> >
> > > Hi,
> > >
> > > the following code generates outlined nested pdf-marks, see attached.
> > >
> > > \version "2.21.4"
> > >
> > > \book {
> > > \markuplist \table-of-contents
> > > \tocItem x #"foo"
> > > \tocItem x.y #"foo-1"
> > > { R1 }
> > > }
> > >
> > > Though, if I switch from \book to \bookpart pdf-marks are gone (while
> > > the table-of-content is still unaffected).
> >
> > Wouldn't that warrant putting the \bookpart inside of a \book? That's
> > sort of it's point, isn't it?
> >
> > --
> > David Kastrup
>
> Sure. My code-example was intended to be as short as possible.
> Nevertheless, if you add something like
>
> (write (ly:output-def-lookup paper 'label-alist-table))
>
> to `output-framework' in framework-ps.scm and compile this example you
> get (manually refomated):
>
> ((toc104
> (name . x)
> (text . "foo")
> (toc-markup . tocItemMarkup)
> (parents)
> (children y)
> (level . 0))
> (toc105
> (name . y)
> (text . "foo-1")
> (toc-markup . tocItemMarkup)
> (parents x)
> (children)
> (level . 1)))
>
> Which is ok.
>
> Though, doing the same with
>
> \book {
> \bookpart {
> \markuplist \table-of-contents
> }
> \bookpart {
> \tocItem x #"foo"
> \tocItem x.y #"foo-1"
> { R1 }
> }
> }
>
> Returns an empty list for 'label-alist-table
>
> Thanks,
> Harm
Well, I've found a workaround, sort of...
Changing output-framework in framework-ps.scm to (modified code is marked):
(define-public (output-framework basename book scopes fields)
(let* ((port (make-tmpfile basename))
(tmp-name (port-filename port))
(outputter (ly:make-paper-outputter port 'ps))
(paper (ly:paper-book-paper book))
(header (ly:paper-book-header book))
(systems (ly:paper-book-systems book))
(page-stencils (map page-stencil (ly:paper-book-pages book)))
(landscape? (eq? (ly:output-def-lookup paper 'landscape) #t))
(page-number (1- (ly:output-def-lookup paper 'first-page-number)))
(page-count (length page-stencils)))
(cond-expand
(guile-2 (set-port-encoding! port "Latin1"))
(else))
(initialize-font-embedding)
(if (ly:get-option 'clip-systems)
(clip-system-EPSes basename book))
(if (ly:get-option 'dump-signatures)
(write-system-signatures basename (ly:paper-book-systems book) 1))
(output-scopes scopes fields basename)
(display (file-header paper page-count #t) port)
;; don't do BeginDefaults PageMedia: A4
;; not necessary and wrong
(write-preamble paper #t port)
(handle-metadata header port)
(for-each
(lambda (page)
(set! page-number (1+ page-number))
(dump-page outputter page page-number page-count landscape?))
page-stencils)
(if (ly:get-option 'outline-bookmarks)
(dump-pdf-bookmarks
;;;;;;;;;;;;;; changed:
(let* ((lat (ly:output-def-lookup paper 'label-alist-table)))
(if (pair? lat)
lat
(ly:output-def-lookup
(ly:parser-lookup '$defaultpaper)
'label-alist-table)))
(ly:output-def-lookup paper 'label-page-table)
port))
(display "%%Trailer\n%%EOF\n" port)
(ly:outputter-close outputter)
(postprocess-output book framework-ps-module (ly:output-formats)
basename tmp-name #f)))
and compiling with a post-process-hook like below works with and
without \bookpart:
\version "2.21.4"
#(define (set-paper-label-page-table layout pages)
(let* ((label-table (ly:output-def-lookup layout 'label-page-table)))
(if (null? label-table)
(ly:output-def-set-variable!
$defaultpaper 'label-alist-table
(append
(ly:output-def-lookup $defaultpaper 'label-alist-table)
(toc-items))))))
\book {
\paper {
#(define (page-post-process layout pages)
(set-paper-label-page-table layout pages))
}
\bookpart {
\markuplist \table-of-contents
}
\bookpart {
\tocItem x #"foo"
\tocItem x.y #"foo-1"
{ R1 }
}
}
Not exactly what I'd call pretty...
Cheers,
Harm