[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Changing Header Mid-Score
From: |
Jean Abou Samra |
Subject: |
Re: Changing Header Mid-Score |
Date: |
Sat, 10 Dec 2022 12:09:13 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 |
Le 09/12/2022 à 23:04, Kieren MacMillan a écrit :
As far as I know:
1. a separate bookpart is required to change the properties that the titling
mechanism can read; and
2. a bookpart will always force a page break.
Cue Jean providing code to contradict my claim in 3… 2… 1… ;)
[Although 2.23 is the unstable release series, the stable
release 2.24 is going to come out of it very soon, so I
will stick with it.]
For a start, you can use \if \on-page #2 to print some
text only on page 2, so you could get along manually with
\if \on-page #1 ...
\if \on-page #2 ...
...
Doing that automatically is ... not exactly straightforward,
but possible too.
\version "2.23.82"
sceneMark = \tweak details.is-scene-mark ##t \textMark \etc
\layout {
\context {
\Score
\consists
#(lambda (context)
(let ((scene-text ""))
(make-engraver
(acknowledgers
((text-mark-interface engraver grob source-engraver)
(when (assq-ref (ly:grob-property grob 'details)
'is-scene-mark)
(set! scene-text (ly:grob-property grob 'text)))))
((stop-translation-timestep engraver)
(let ((col (ly:context-property context
'currentCommandColumn)))
(ly:grob-set-nested-property!
col
'(details scene-text)
scene-text))))))
}
}
#(define-markup-command (scene-text layout props gauge) (markup?)
(let ((page-number (chain-assoc-get 'page:page-number props))
(gauge-stil (interpret-markup layout props gauge)))
(ly:make-stencil
`(delay-stencil-evaluation
,(delay
(ly:stencil-expr
(interpret-markup
layout
props
(hashv-ref (ly:output-def-lookup layout
'page-number-scene-text-table)
page-number)))))
(ly:stencil-extent gauge-stil X)
(ly:stencil-extent gauge-stil Y))))
\paper {
oddHeaderMarkup = \markup
\fill-line {
""
\unless \on-first-page-of-part \fontsize #2 \concat {
\fromproperty #'header:title
": "
%% The argument to \scene-text is used to approximate the dimensions
%% of the final text.
\scene-text "Act X, Scene X"
}
\if \should-print-page-number \fromproperty #'page:page-number-string
}
evenHeaderMarkup = \markup
\fill-line {
\if \should-print-page-number \fromproperty #'page:page-number-string
\unless \on-first-page-of-part \fontsize #2 \concat {
\fromproperty #'header:title
": "
\scene-text "Act X, Scene X"
}
""
}
#(use-modules (srfi srfi-1))
page-post-process =
#(lambda (paper pages)
(for-each
(lambda (page)
(let* ((page-number (ly:prob-property page 'page-number))
(lines (ly:prob-property page 'lines))
(table (or (ly:output-def-lookup paper
'page-number-scene-text-table #f)
(let ((table (make-hash-table)))
(ly:output-def-set-variable! paper
'page-number-scene-text-table table)
table)))
(first-system
(any (lambda (line)
(ly:prob-property line 'system-grob #f))
lines))
(scene-text
(if first-system
(let ((first-column (ly:spanner-bound
first-system LEFT)))
(assq-ref (ly:grob-property first-column 'details)
'scene-text))
"")))
(hashv-set! table page-number scene-text)))
pages))
}
%%%%%%% EXAMPLE
\header {
title = "Silly Opera"
}
{
\sceneMark "Act I, Scene i"
c'1 1 1
\pageBreak
c'1 1 1
\pageBreak
c'1 1 \sceneMark "Act I, Scene ii" 1
\pageBreak
c'1 1 1
}
Cheers,
Jean
OpenPGP_signature
Description: OpenPGP digital signature
- Changing Header Mid-Score, brin solomon, 2022/12/09
- Re: Changing Header Mid-Score, Kieren MacMillan, 2022/12/09
- Re: Changing Header Mid-Score, brin solomon, 2022/12/09
- Re: Changing Header Mid-Score, Kieren MacMillan, 2022/12/09
- Re: Changing Header Mid-Score, brin solomon, 2022/12/09
- Re: Changing Header Mid-Score, Kieren MacMillan, 2022/12/09
- Re: Changing Header Mid-Score,
Jean Abou Samra <=
- Re: Changing Header Mid-Score, brin solomon, 2022/12/10
- Re: Changing Header Mid-Score, Jacques Menu, 2022/12/11
- Re: Changing Header Mid-Score, Lukas-Fabian Moser, 2022/12/11
- Re: Changing Header Mid-Score, Jean Abou Samra, 2022/12/11
- Re: Changing Header Mid-Score, Pierre-Luc Gauthier, 2022/12/12