Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: viertel am Mittwoch, 17. September 2014, 03:04
-
Hallo zusammen
Bin ich der Einzige mit diesem Notationswunsch?
Weder in der Notationsreferenz noch hier im Forum habe ich gefunden, WIE es geht. Lediglich einige Male in einem Nebensatz die Anmerkung "Anzeige der Taktnummer forcieren".
Und das ist dann auch schon meine Frage:
Wie kann ich Lilypond dazu bringen, an Takten meiner Wahl, z.B. nach langen Pausen, die Taktnummer auszugeben, egal, wo wir gerade in der Zeile sind. Eine Definition etwa so:
showBarNumber = ...
würde dann an entsprechender Stelle mit \showBarNumber die Taktnummer am nächsten Taktstrich ausgeben.
Oder bin ich nur unfähig, den entsprechenden Tip zu finden?
Danke schon mal
Das viertel
-
Hallo Viertel,
Weder in der Notationsreferenz noch hier im Forum habe ich gefunden, WIE es geht. Lediglich einige Male in einem Nebensatz die Anmerkung "Anzeige der Taktnummer forcieren".
dasmit dem suchen und finden ist so eine Sache.
Vielleicht ist das hier das Richtige:
http://lsr.di.unimi.it/LSR/Item?id=431
%% http://lsr.dsi.unimi.it/LSR/Item?id=431
num =
#(define-music-function (parser location musique) (ly:music?)
#{
\override Score.BarNumber.break-visibility = ##(#f #t #t)
$musique
\revert Score.BarNumber.break-visibility
#})
{
a2 a a a
\num a a a a
\num {a a a a}
a a a a
}
-
Hallo,
ingendwo in diesem Forum war schon mal eine ähnliche Frage.
Bevor ich das suche, zuerst mein "einfaches" include (bar-number.ly):
%{
Barnumber Manipulation
%}
\version "2.16.0"
#(define (self-alignment-x-rcc grob) ;; 'rcc' = Right-Center-Center
(let ((break-dir (ly:item-break-dir grob)))
(case break-dir
((1) RIGHT)
((0) CENTER)
((-1) CENTER)
(else CENTER))))
showBarNumberP = #(define-music-function (parser location padding)
(number?)
#{
\once \override Score.BarNumber #'break-visibility = #end-of-line-invisible
\once \override Score.BarNumber #'padding = $padding
#})
showBarNumber = #(define-music-function (parser location) ()
#{
\once \override Score.BarNumber #'break-visibility = #end-of-line-invisible
#})
\layout {
\context { \Score
\override BarNumber #'break-visibility = #begin-of-line-visible
alternativeNumberingStyle = #'numbers-with-letters
barNumberVisibility = #all-bar-numbers-visible
\override BarNumber #'self-alignment-X = #self-alignment-x-rcc
}
}
:
Hier dient \schowBarNumber dazu, die Taktzahlenanzeige zu forcieren. Außderdem werden die Taktzahlen am Zeilenanfang rechtsbündig ausgerichtet, innerhalb der Zeile dann aber mittig.
Und dann habe ich noch einen Scheme-Engraver, welcher automatisch die visibility-mask ändert, falls zuvor eine mindestes dreitaktige Ganztaktpause enschienen ist:
#(define (self-alignment-x-rcc grob) ;; 'rcc' = Right-Center-Center
(let ((break-dir (ly:item-break-dir grob)))
(case break-dir
((1) RIGHT)
((0) CENTER)
((-1) CENTER)
(else CENTER))))
#(define (volta-start-in-repeat-command rcl)
(if (or (null? rcl)
(not (pair? rcl))
(not (pair? (car rcl))))
#f
(let ((cmd (caar rcl))
(pos (cadar rcl)))
(if (and (eq? cmd 'volta)
(not (boolean? pos)))
#t
(volta-start-in-repeat-command (cdr rcl))))))
#(define (Barnumber_additional_visibility_engraver ctx)
(let ((barnums-seen '())
(barline-seen #f)
(notehead-seen #f)
(noteheads-found #f)
(last-barnums '())
(last-bar-barnumber #f)
(show-barnumber-required #f)
(show-by-volta-start #f))
`((acknowledgers
(grob-interface
. ,(lambda (trans grob source)
(let ((grob-name (ly:assoc-get 'name (ly:grob-property grob 'meta))))
(if (eq? grob-name 'NoteHead) (set! notehead-seen #t))
(if (eq? grob-name 'BarNumber) (set! barnums-seen (cons grob barnums-seen)))
(if (eq? grob-name 'BarLine) (set! barline-seen #t))))))
(start-translation-timestep
. ,(lambda (trans)
(let ((current-barnum (ly:context-property ctx 'currentBarNumber)))
(set! barnums-seen '())
(set! barline-seen #f)
(set! notehead-seen #f))))
(stop-translation-timestep
. ,(lambda (trans)
(let
((current-barnum (ly:context-property ctx 'currentBarNumber))
(measure-pos (ly:context-property ctx 'measurePosition))
(rep-cmds (ly:context-property ctx 'repeatCommands))
(volta-starts (volta-start-in-repeat-command (ly:context-property ctx 'repeatCommands))))
(if (volta-start-in-repeat-command (ly:context-property ctx 'repeatCommands))
(set! show-by-volta-start #t))
; before the barline ...
(if (and barline-seen
noteheads-found
(number? last-bar-barnumber)
(> (- current-barnum last-bar-barnumber) 1))
(set! noteheads-found #f))
(if (and barline-seen
(not noteheads-found)
(number? last-bar-barnumber)
(>= (- current-barnum last-bar-barnumber) 3))
(set! show-barnumber-required #t))
; after the barline ...
(if (and (not (null? barnums-seen))
show-barnumber-required
noteheads-found
(not (null? last-barnums))) (begin
(for-each (lambda (g)
(ly:grob-set-property! g 'break-visibility end-of-line-invisible)
; (ly:grob-set-property! g 'color red)
) last-barnums)
(set! show-barnumber-required #f)))
(if (and (not (null? barnums-seen))
show-by-volta-start) (begin
(for-each (lambda (g)
(ly:grob-set-property! g 'break-visibility end-of-line-invisible)
; (ly:grob-set-property! g 'color magenta)
) barnums-seen)
(set! show-barnumber-required #f)
(set! show-by-volta-start #f)))
(if (not (null? barnums-seen)) (begin
(set! last-barnums barnums-seen)
(set! barnums-seen '())))
(if barline-seen (begin
(set! last-bar-barnumber current-barnum)
(set! noteheads-found #f)
(if notehead-seen (set! noteheads-found #t))))
(if notehead-seen (set! noteheads-found #t))))))))
% \defineBarLine "S.|:-||" #'("||" "S.|:" " .|")
% \allowVoltaHook "||"
% \allowVoltaHook ".|:"
% \allowVoltaHook ".|:-||"
% \allowVoltaHook "S.|:"
% \allowVoltaHook "S.|:-||"
\layout {
\context { \Score
\consists #Parenthesis_on_cautionary_accidentals_purger
\consists #Barnumber_additional_visibility_engraver
restNumberThreshold = 0
barNumberVisibility = #all-bar-numbers-visible
\override BarNumber #'break-visibility = #begin-of-line-visible
\override BarNumber #'self-alignment-X = #self-alignment-x-rcc
% startRepeatType = ".|:-||"
% startRepeatSegnoType = "S.|:-||"
}
}
Das Setzen der Barline-Stile wie ich sie bevorzuge habe ich noch schnell auskommentiert. Und auch etwas wild aussehende Klammersetzungen im Scheme-Code habe ich zum Zeilenende hin zusammegefaßt - hoffentlich ohne Fehler.
P.S. Bei mir können die Antworten schon mal eine Woche auf sich warten lassen.
Arnold
-
Hallo
Ich kam noch nicht dazu, für die Antworten zu danken.
Der Vorschlag von Steuloh funktioniert schon mal. Allerdings ist die Plazierung der Nummer verbesserungsbedürftig (mittig über Taktstrich und nicht nach oben verschieben), siehe Anhang.
Der Vorschlag von Arnold regelt wohl die horizontale Ausrichtung, aber ich stehe leider mit der Scheme-Lilypond-Syntax auf Kriegsfuß und krieg es nicht in Steulohs einfache Version integriert.
Allerdings hilft das
\override Score.BarNumber.self-alignment-X = #CENTER
auch schon mal. Und solange die Taktnummen nicht vierstellig werden ist das auch für die Nummern am Zeilenanfang ok.
-
Hallo,
die Verschiebung der Taktnummern liegt an deinem gedrängten Notentext.
Entweder kannst du einzelne Takte verbreitern:
http://lsr.di.unimi.it/LSR/Item?id=629
Oder du kannst allgemein jedem Takt mehr Platz geben:
http://www.lilypond.org/doc/v2.18/Documentation/notation/changing-horizontal-spacing
Grüße
-
Der "gedrängte Text" stammt von Lilypond selbst. Ich habe nichts dazu getan, es ist die Standardaufbereitung.
Den Takten mehr Platz einzuräumen ist m.M.n. der falsche Weg. Wie viel Platz muß ich denn zugeben, damit die Taktnummer dazwischen paßt?
Eher müßte die Zahl selbst das Recht haben, andere grobs beiseite zu schieben, um seinen Platz direkt über dem Taktstrich zu verteidigen. Mit
\once \override Score.BarNumber.outside-staff-priority = #-100
passiert aber nichts.
Wo/wie muß ich das - wenn überhaupt möglich - einsetzen?
Optimal wäre natürlich, die Taktnummer mit \bar oder \mark anzufordern, und Lilypod "weiß", dann schon, was zu tun ist.
-
Wie viel Platz muß ich denn zugeben, damit die Taktnummer dazwischen paßt?
Hallo,
deine gewünschten Taktnummern an diesen Stellen sind ja keine übliche Schreibweise. Selbst wenn man die Taktnummern in deinem Beispiel weiter nach unten zwingt, sähe das viel zu gedrängt und unübersichtlich aus. Also würde ich die Takte einfach einzeln so verbreitern, dass das Layout ins Gesamtbild passt. Die Taktzahlen würde ich auch mittig ausrichten, das erleichtert das Lesen. Bei überladenem Layout macht Lily schon mal etwas Grafiksalat, aber das kann man in der Regel schnell beheben. Notensatz ist eine Kunst, das wird oft vergessen. Kein Programm ist ein Künstler.
Was deinen Code betrifft, so ist es hier üblich ein Minimalbeispiel als Code zu posten. Es gibt in einem langen Code einfach zu viele Abhängigkeiten und Schreibmöglichkeiten, als dass man mal schnell eine Lösung posten kann.
Grüße