[ << Editorial annotations ] | [トップ][目次] | [ Vocal music >> ] |
[ < Editorial annotations: whiteout プロパティを使用する ] | [ 上へ : Top ] | [ Text: Adding a QR code > ] |
Text
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text ] | [ 上へ : Text ] | [ Text: タブ譜にマークアップを追加する > ] |
Adding a QR code
This snippet lets you draw a QR-code, for example to provide a link to the composer’s, or the music editor’s website. Actually encoding the URL into a QR-code is not done here (this just draws the QR-code from a grid of "black" or "white" values), but see the code for a short Python snippet you can use to avoid having to fill for each small square if it’s black or white.
%% Original thread: https://lists.gnu.org/archive/html/lilypond-user-fr/2022-07/msg00005.html %% (snippet author: Jean Abou Samra <jean@abou-samra.fr>) \paper { tagline = ##f } #(define (index-map f . lsts) "Applies @code{f} to corresponding elements of @code{lists}, just as @code{map}, providing an additional counter starting at zero. @code{f} needs to have the counter in its arguments like @code{(index-map (lambda (i arg) <body>) lists)}" (let loop ((lsts lsts) (acc '()) (i 0)) (if (any null? lsts) (reverse! acc) (loop (map cdr lsts) (cons (apply f i (map car lsts)) acc) (1+ i))))) #(define-markup-command (qr-code layout props data) (string?) #:properties ((width 10)) (let* (;; Return lines in reversed order, since translating in Y-axis ;; uses increasing values. Meaning lines will be stacked upwards. (lines (reverse (remove string-null? (map string-trim-both (string-split data #\newline))))) (n (length lines)) (square-width (/ width n)) (box (make-filled-box-stencil `(0 . ,square-width) `(0 . ,square-width)))) ;; Build the final qr-code-stencil from line-stencils list (apply ly:stencil-add ;; Get a list of line-stencils (index-map (lambda (i line) ;; Build a line-stencil from square-stencils list (apply ly:stencil-add ;; Get a list of (already translated) square-stencils ;; per line (index-map (lambda (j char) (ly:stencil-translate (stencil-with-color box (case char ((#\0) white) ((#\1) black) (else (ly:warning "unrecognized character ~a, should be 0 or 1" char) red))) (cons (* j square-width) (* i square-width)))) (string->list line)))) lines)))) %{ A string representation of the QR code. 0 means white, 1 means black. You can generate this automatically using Python and the pyqrcode module ("pip install pyqrcode"). Use this line of code in a Python prompt: >>> import pyqrcode; print(pyqrcode.create("https://lilypond.org").text(quiet_zone=0)) %} lilypondDotOrg = "11111110011100011110101111111 10000010010000010111101000001 10111010010110001000101011101 10111010001010111101001011101 10111010110100000111001011101 10000010011100011001101000001 11111110101010101010101111111 00000000111000111110100000000 00110011101100001000111010000 10101001111000001000001111101 00110111010100000110001011010 01010001100110010111000110001 01111011110010011110010100111 01111101001101010001001101101 01111011000001000011001111011 11001001001011001000111011010 11100110111011011001110111000 00001100010001001011100100100 10111111011001010011001000100 00001100001000101011011011100 01010010000011000000111111111 00000000110011100010100011001 11111110101001101011101010110 10000010000110111110100010011 10111010011010111100111111111 10111010110001101111000011110 10111010100101101010100101001 10000010001001000100000010010 11111110010100110010111100010" \markup \qr-code \lilypondDotOrg \markup \vspace #5 \markup \override #'(width . 15) \qr-code \lilypondDotOrg
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: Adding a QR code ] | [ 上へ : Text ] | [ Text: 楽譜に現在日時を追加する > ] |
タブ譜にマークアップを追加する
デフォルトでは、タブ譜にマークアップは表示されません。表示させるには、\revert TabStaff.TextScript.stencil
を使用します。
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = #(ly:make-moment 1/8) } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: タブ譜にマークアップを追加する ] | [ 上へ : Text ] | [ Text: 歌詞の垂直方向のスペースを調整する > ] |
楽譜に現在日時を追加する
少しの Scheme コードで、楽譜に現在日時を追加することができます。
% first, define a variable to hold the formatted date: date = #(strftime "%d-%m-%Y" (localtime (current-time))) % use it in the title block: \header { title = "Including the date!" subtitle = \date } \score { \relative c'' { c4 c c c } } % and use it in a \markup block: \markup { \date }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 楽譜に現在日時を追加する ] | [ 上へ : Text ] | [ Text: 楽器名を揃える > ] |
歌詞の垂直方向のスペースを調整する
このスニペットは、歌詞をより譜に近づける方法を示しています。
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞の垂直方向のスペースを調整する ] | [ 上へ : Text ] | [ Text: 歌詞音節をメリスマに揃える > ] |
楽器名を揃える
楽器名の水平方向の位置は Staff.InstrumentName.self-alignment-X
プロパティを変更することで調整することができます。\layout
変数は indent
と short-indent
を定義しており、それぞれ最初のシステムとその後のシステムで、楽器名に割くスペースの量を変更することができます。
\paper { left-margin = 3\cm } \score { \new StaffGroup << \new Staff \with { \override InstrumentName.self-alignment-X = #LEFT instrumentName = \markup \left-column { "Left aligned" "instrument name" } shortInstrumentName = "Left" } { c''1 \break c''1 } \new Staff \with { \override InstrumentName.self-alignment-X = #CENTER instrumentName = \markup \center-column { Centered "instrument name" } shortInstrumentName = "Centered" } { g'1 g'1} \new Staff \with { \override InstrumentName.self-alignment-X = #RIGHT instrumentName = \markup \right-column { "Right aligned" "instrument name" } shortInstrumentName = "Right" } { e'1 e'1 } >> \layout { ragged-right = ##t indent = 4\cm short-indent = 2\cm } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 楽器名を揃える ] | [ 上へ : Text ] | [ Text: \whiteout コマンドで譜線を隠す > ] |
歌詞音節をメリスマに揃える
デフォルトでは、メリスマの頭の歌詞音節は音符に左揃えされます。これは lyricMelismaAlignment
プロパティで変更することができます。
\score { << \new Staff { \relative c'' \new Voice = "vocal" { c d~^\markup default d e c d~^\markup "right aligned" d e c d~^\markup "center aligned" d e c d~^\markup "reset to default" d e } } \new Lyrics \lyricsto "vocal" { word word word \set lyricMelismaAlignment = #RIGHT word word word \set lyricMelismaAlignment = #CENTER word word word \unset lyricMelismaAlignment word word word } >> }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞音節をメリスマに揃える ] | [ 上へ : Text ] | [ Text: ヘアピンの下にテキストを中央揃えする > ] |
\whiteout コマンドで譜線を隠す
\whiteout
コマンドは、マークアップの背景を白色の長方形で囲みます。譜線はほとんどの Grob より下のレイヤにあるため、この白色の長方形は他の Grob と重ならなくなります。
\layout { ragged-right = ##f } \relative c' { \override TextScript.extra-offset = #'(2 . 4) c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: \whiteout コマンドで譜線を隠す ] | [ 上へ : Text ] | [ Text: オッターバ囲みのテキストを変更する > ] |
ヘアピンの下にテキストを中央揃えする
この例はヘアピンの (デ) クレッシェンドの下に “molto” や “poco” のようなテキストを追加する機能を提供しています。テキストの向きは、ヘアピンの向きに応じて変更されます。ヘアピンは DynamicText に揃えられます。
この例は Scheme コードを用いて、オブジェクトが通常どのように表示されるかを変更する方法も示しています。
\paper { tagline = ##f } hairpinWithCenteredText = #(define-music-function (text) (markup?) #{ \once \override Voice.Hairpin.after-line-breaking = #(lambda (grob) (let* ((stencil (ly:hairpin::print grob)) (par-y (ly:grob-parent grob Y)) (dir (ly:grob-property par-y 'direction)) (staff-line-thickness (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)) (new-stencil (ly:stencil-aligned-to (ly:stencil-combine-at-edge (ly:stencil-aligned-to stencil X CENTER) Y dir (ly:stencil-aligned-to (grob-interpret-markup grob (make-fontsize-markup (magnification->font-size (+ (ly:staff-symbol-staff-space grob) (/ staff-line-thickness 2))) text)) X CENTER)) X LEFT)) (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space)) (par-x (ly:grob-parent grob X)) (dyn-text (grob::has-interface par-x 'dynamic-text-interface)) (dyn-text-stencil-x-length (if dyn-text (interval-length (ly:stencil-extent (ly:grob-property par-x 'stencil) X)) 0)) (x-shift (if dyn-text (- (+ staff-space dyn-text-stencil-x-length) (* 0.5 staff-line-thickness)) 0))) (ly:grob-set-property! grob 'Y-offset 0) (ly:grob-set-property! grob 'stencil (ly:stencil-translate-axis new-stencil x-shift X)))) #}) hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } \layout { ragged-right = ##f } \relative c' { \hairpinMolto c2\< c\f \hairpinMore c2\ppppp\< c\f \break \hairpinMolto c2^\< c\f \hairpinMore c2\ppppp\< c\f }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: ヘアピンの下にテキストを中央揃えする ] | [ 上へ : Text ] | [ Text: デフォルトのテキスト フォント ファミリを変更する > ] |
オッターバ囲みのテキストを変更する
内部的には、\ottava
は ottavation
プロパティを
(例えば、8va
や 8vb
に) セットし、middleCPosition
プロパティを変更します。オッターバ囲みのテキストを変更するには、\ottava
の後に
ottavation
をセットするようにしてください。
オッターバ囲みが短い場合には、テキストを短くすると良いでしょう。
{ c'2 \ottava #1 \set Staff.ottavation = #"8" c''2 \ottava #0 c'1 \ottava #1 \set Staff.ottavation = #"Text" c''1 }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: オッターバ囲みのテキストを変更する ] | [ 上へ : Text ] | [ Text: 強弱記号をマークアップ テキストと結合する > ] |
デフォルトのテキスト フォント ファミリを変更する
デフォルトでテキストに使われるフォント ファミリは make-pango-font-tree
をオーバライドすることで変更することができます。
%{ You may have to install additional fonts. Red Hat Fedora dejavu-fonts-all Debian GNU/Linux, Ubuntu fonts-dejavu-core fonts-dejavu-extra %} \paper { % change for other default global staff size. myStaffSize = #20 %{ run lilypond -dshow-available-fonts to show all fonts available in the process log. %} #(define fonts (make-pango-font-tree "DejaVu Serif" "DejaVu Sans" "DejaVu Sans Mono" (/ myStaffSize 20))) } { g'''4^\markup { DejaVu Serif: \bold bold \italic italic \italic \bold { bold italic } } g4_\markup { \override #'(font-family . sans) { DejaVu Sans: \bold bold \italic italic \italic \bold { bold italic } } } g''2^\markup { \override #'(font-family . typewriter) { DejaVu Sans Mono: \bold bold \italic italic \italic \bold { bold italic } } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: デフォルトのテキスト フォント ファミリを変更する ] | [ 上へ : Text ] | [ Text: 2 つのパートを 1 つの譜にまとめる > ] |
強弱記号をマークアップ テキストと結合する
強弱記号の中には、テキスト表示を含むものがあります (“più forte” や
“piano subito” など)。これらは \markup
コマンドで作り出すことができます。
piuF = \markup { \italic più \dynamic f } \layout { ragged-right = ##f } \relative c'' { c2\f c-\piuF }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 強弱記号をマークアップ テキストと結合する ] | [ 上へ : Text ] | [ Text: "本当の"括弧付きの強弱記号を作成する > ] |
2 つのパートを 1 つの譜にまとめる
自動パート結合ツール (\partCombine
コマンド) は、いくつかの異なるパートを同じ譜にまとめるものです。“solo” や “a2” といったテキスト指示は、デフォルトで追加されます。これらを削除するには、printPartCombineTexts
プロパティを f
にセットします。賛美歌のような歌曲では、“solo/a2” のテキストを追加する必要は無いため、これらを削除すると良いでしょう。しかしながら、これらを削除した場合、ソロの指示も表示されなくなるため問題があるかもしれません。このような場合は、通常の多声構文を用いると良いでしょう。
このスニペットは、2 つのパートを 1 つの譜に表示する 3 つの方法を示しています:
通常の多声、テキストを削除した \partCombine
、テキストのある
\partCombine
の順です。
%% Combining pedal notes with clef changes musicUp = \relative c'' { \time 4/4 a4 c4.( g8) a4 | g4 e' g,( a8 b) | c b a2. } musicDown = \relative c'' { g4 e4.( d8) c4 | r2 g'4( f8 e) | d2 \stemDown a } \score { << \new Staff \with { instrumentName = "Standard polyphony" } << \musicUp \\ \musicDown >> \new Staff \with { instrumentName = "PartCombine without text" printPartCombineTexts = ##f } \partCombine \musicUp \musicDown \new Staff \with { instrumentName = "PartCombine with text" } \partCombine \musicUp \musicDown >> \layout { indent = 6.0\cm \context { \Score \override SystemStartBar.collapse-height = #30 } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 2 つのパートを 1 つの譜にまとめる ] | [ 上へ : Text ] | [ Text: テキスト スパナを作成する > ] |
"本当の"括弧付きの強弱記号を作成する
強弱記号に括弧を追加する一番簡単な方法は、\markup
ブロックを使用することですが、この方法には欠点があります: このように作成されたオブジェクトは、強弱記号ではなくテキスト マークアップとして振る舞うということです。
しかしながら、(記譜法リファレンスで説明しているように)
make-dynamic-script
関数と共に
Scheme コードを用いることで、似たようなオブジェクトを作り出すことができます。このように作成された記号は強弱記号として振る舞い、\dynamicUp
や
\dynamicDown
といったコマンドと互換性を保ちます。
paren = #(define-event-function (dyn) (ly:event?) (make-dynamic-script #{ \markup \concat { \normal-text \italic \fontsize #2 ( \pad-x #0.2 #(ly:music-property dyn 'text) \normal-text \italic \fontsize #2 ) } #})) \relative c'' { c4\paren\f c c \dynamicUp c\paren\p }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: "本当の"括弧付きの強弱記号を作成する ] | [ 上へ : Text ] | [ Text: 全てのヘッダの例示 > ] |
テキスト スパナを作成する
\startTextSpan
と \stopTextSpan
コマンドは、ペダル記号やオッターバのようにテキスト スパナを容易に作成できます。TextSpanner
オブジェクトのプロパティをオーバライドすることで、出力を変更することができます。
\paper { ragged-right = ##f } \relative c'' { \override TextSpanner.bound-details.left.text = #"bla" \override TextSpanner.bound-details.right.text = #"blu" a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'line \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'dashed-line \override TextSpanner.bound-details.left.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -2) } \once \override TextSpanner.bound-details.right.padding = #-2 a4 \startTextSpan b4 c a4 \stopTextSpan \set Staff.middleCPosition = #-13 \override TextSpanner.dash-period = #10 \override TextSpanner.dash-fraction = #0.5 \override TextSpanner.thickness = #10 a4 \startTextSpan b4 c a4 \stopTextSpan }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: テキスト スパナを作成する ] | [ 上へ : Text ] | [ Text: \markup ブロックにネイティブ PostScript を埋め込む > ] |
全てのヘッダの例示
全てのヘッダの例示です。
\header { copyright = "copyright" title = "title" subtitle = "subtitle" composer = "composer" arranger = "arranger" instrument = "instrument" meter = "meter" opus = "opus" piece = "piece" poet = "poet" texidoc = "All header fields with special meanings." copyright = "public domain" enteredby = "jcn" source = "urtext" } \layout { ragged-right = ##f } \score { \relative c'' { c1 | c | c | c } } \score { \relative c'' { c1 | c | c | c } \header { title = "localtitle" subtitle = "localsubtitle" composer = "localcomposer" arranger = "localarranger" instrument = "localinstrument" metre = "localmetre" opus = "localopus" piece = "localpiece" poet = "localpoet" copyright = "localcopyright" } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 全てのヘッダの例示 ] | [ 上へ : Text ] | [ Text: 歌詞音節をフォーマットする > ] |
\markup ブロックにネイティブ PostScript を埋め込む
\markup
ブロックに直接 PostScript コードを挿入することができます。
% PostScript is a registered trademark of Adobe Systems Inc. \relative c'' { a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" } -\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } s2 a'1 }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: \markup ブロックにネイティブ PostScript を埋め込む ] | [ 上へ : Text ] | [ Text: 歌詞音節の間にタイを入力する > ] |
歌詞音節をフォーマットする
単一の歌詞音節にマークアップ モードを使用することができます。
mel = \relative c'' { c4 c c c } lyr = \lyricmode { Lyrics \markup { \italic can } \markup { \with-color #red contain } \markup { \fontsize #8 \bold Markup! } } << \new Voice = melody \mel \new Lyrics \lyricsto melody \lyr >>
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞音節をフォーマットする ] | [ 上へ : Text ] | [ Text: 歌詞の揃え位置 > ] |
歌詞音節の間にタイを入力する
これは、音節をチルダで分割することで得ることができます。
\lyrics { wa~o~a }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞音節の間にタイを入力する ] | [ 上へ : Text ] | [ Text: Markup list > ] |
歌詞の揃え位置
歌詞の水平方向の揃え位置は、LyricText
オブジェクトの
self-alignment-X
プロパティをオーバライドすることで設定できます。-1
が左、0
が中央、1
が右になります。#LEFT
, #CENTER
, #RIGHT
を用いることもできます。
\layout { ragged-right = ##f } \relative c'' { c1 c1 c1 } \addlyrics { \once \override LyricText.self-alignment-X = #LEFT "This is left-aligned" \once \override LyricText.self-alignment-X = #CENTER "This is centered" \once \override LyricText.self-alignment-X = #1 "This is right-aligned" }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞の揃え位置 ] | [ 上へ : Text ] | [ Text: 複数小節にまたがる休符にマークアップを付加する > ] |
Markup list
Text that can spread over pages is entered with the \markuplist
command.
%% updated/modified by P.P.Schneider on Feb. 2014 #(set-default-paper-size "a6") #(define-markup-list-command (paragraph layout props args) (markup-list?) (interpret-markup-list layout props (make-justified-lines-markup-list (cons (make-hspace-markup 2) args)))) % Candide, Voltaire \markuplist { \override-lines #'(baseline-skip . 2.5) { \paragraph { Il y avait en Westphalie, dans le château de M. le baron de Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné les mœurs les plus douces. Sa physionomie annonçait son âme. Il avait le jugement assez droit, avec l'esprit le plus \concat { simple \hspace #.3 ; } c'est, je crois, pour cette raison qu'on le nommait Candide. Les anciens domestiques de la maison soupçonnaient qu'il était fils de la sœur de monsieur le baron et d'un bon et honnête gentilhomme du voisinage, que cette demoiselle ne voulut jamais épouser parce qu'il n'avait pu prouver que soixante et onze quartiers, et que le reste de son arbre généalogique avait été perdu par l'injure du temps. } \vspace #.3 \paragraph { Monsieur le baron était un des plus puissants seigneurs de la Westphalie, car son château avait une porte et des fenêtres. Sa grande salle même était ornée d'une tapisserie. Tous les chiens de ses basses-cours composaient une meute dans le \concat { besoin \hspace #.3 ; } ses palefreniers étaient ses \concat { piqueurs \hspace #.3 ; } le vicaire du village était son grand-aumônier. Ils l'appelaient tous monseigneur, et ils riaient quand il faisait des contes. } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: Markup list ] | [ 上へ : Text ] | [ Text: Of the ubiquity of markup objects > ] |
複数小節にまたがる休符にマークアップを付加する
複数小節にまたがる休符に付加されるマークアップは、休符の上または下に中央揃えされます。マークアップが長い場合であっても、休符が広げられることはありません。休符をマークアップに合わせて広げる場合は、休符の前に空の和音を追加して、それにマークアップを付加してください。
このような方法で付加されたテキストは、空の和音が本来表示されるべき場所に合わせて左揃えされます。しかし、小節の長さをテキストに合わせるようにすれば、テキストが中央揃えされたように見えます。
\relative c' { \compressMMRests { \textLengthOn <>^\markup { [MAJOR GENERAL] } R1*19 <>_\markup { \italic { Cue: ... it is yours } } <>^\markup { A } R1*30^\markup { [MABEL] } \textLengthOff c4^\markup { CHORUS } d f c } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 複数小節にまたがる休符にマークアップを付加する ] | [ 上へ : Text ] | [ Text: バージョン番号を出力する > ] |
Of the ubiquity of markup objects
Text objects are entered either as simple strings between double quotes
or as \markup
blocks that can accept a variety of advanced text
formatting and graphical enhancements.
As such, markup blocks may be used:
-
in any TextScript object (attached to notes with
-
,^
or_
), -
any
TextMark
introduced with the\textMark
or\textEndMark
command, or other similar objects such as MetronomeMark introduced with\tempo
, -
as standalone markup blocks, entered at the top level outside of any
\score
block, -
in any definition inside the
\header
block (e.g. title, subtitle, composer) or in some variables defined inside the\paper
block such asevenHeaderMarkup
for page numbers.
\markup
may additionally be used for lyrics, in chord names,
and as dynamics. In fact, it is possible to use \markup
to
customize the appearance of virtually any object, as demonstrated in
this example using various methods.
%% Thanks to Aaron Hill https://lists.gnu.org/archive/html/lilypond-user/2019-01/msg00437.html \paper { paper-width = 8\cm paper-height = 8\cm } \header { title = \markup "Header" tagline = \markup "(tagline)" } \markup "Top-level markup" dyn = #(make-dynamic-script #{ \markup \text "DynamicText" #}) \score { << \new ChordNames \with { majorSevenSymbol = \markup "majorSevenSymbol" } \chordmode { c1:maj7 } \new Staff { \tempo \markup "MetronomeMark" \textMark "TextMark" \once \override TupletNumber.text = \markup "TupletNumber" \tuplet 3/2 { \once \override NoteHead.stencil = #ly:text-interface::print \once \override NoteHead.text = \markup \lower #0.5 "NoteHead" c''8^\markup "TextScript" \once \override Rest.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup "Rest" #})) r4 } } \new Lyrics \lyricmode { \markup "LyricText" 1 } \new Dynamics { s1\dyn } >> }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: Of the ubiquity of markup objects ] | [ 上へ : Text ] | [ Text: 中央に歌詞を配置したピアノ テンプレート > ] |
バージョン番号を出力する
lilypond-version
の出力を歌詞に配置することで、楽譜内に、あるいはlilypond-book
で生成されたドキュメント内に LilyPond のバージョン番号を表示することができます。あるいは、以下のようにしてバージョン番号を他の文字列と結合することができます。
\markup { Processed with LilyPond version #(lilypond-version) }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: バージョン番号を出力する ] | [ 上へ : Text ] | [ Text: 小節番号が表示される間隔を変更する > ] |
中央に歌詞を配置したピアノ テンプレート
旋律と歌詞のための総譜ではなく、歌詞をピアノ譜の 2 つの譜の間に配置することができます。
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } text = \lyricmode { Aaa Bee Cee Dee } \score { \new PianoStaff << \new Staff = upper { \new Voice = "singer" \upper } \new Lyrics \lyricsto "singer" \text \new Staff = lower { \lower } >> \layout { } \midi { } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 中央に歌詞を配置したピアノ テンプレート ] | [ 上へ : Text ] | [ Text: リハーサル記号を全ての譜の上に表示する > ] |
小節番号が表示される間隔を変更する
小節番号が表示される間隔は {set-bar-number-visibility}
コンテキスト関数を変更することで変更することもできます。
\relative c' { \override Score.BarNumber.break-visibility = #end-of-line-invisible \context Score \applyContext #(set-bar-number-visibility 4) \repeat unfold 10 c'1 \context Score \applyContext #(set-bar-number-visibility 2) \repeat unfold 10 c }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 小節番号が表示される間隔を変更する ] | [ 上へ : Text ] | [ Text: テキストを右から左へ表示する > ] |
リハーサル記号を全ての譜の上に表示する
リハーサル記号は通常、一番上にある譜の上に表示されますが、全ての譜の上に表示することもできます。
\score { << \new Staff { \mark \default c''1 \textMark "molto" c'' } \new Staff { \mark \default c'1 \textMark "molto" c' } >> \layout { \context { \Score \remove Mark_engraver \remove Text_mark_engraver \remove Staff_collecting_engraver } \context { \Staff \consists Mark_engraver \consists Text_mark_engraver \consists Staff_collecting_engraver } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: リハーサル記号を全ての譜の上に表示する ] | [ 上へ : Text ] | [ Text: 歌詞を譜の内部に表示する > ] |
テキストを右から左へ表示する
以下に示すように、マークアップ オブジェクト内でテキストを右から左へ表示することができます。
{ b1^\markup { \line { i n g i r u m i m u s n o c t e } } f'_\markup { \override #'(text-direction . -1) \line { i n g i r u m i m u s n o c t e } } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: テキストを右から左へ表示する ] | [ 上へ : Text ] | [ Text: 独立したテキストの 2 段組み > ] |
歌詞を譜の内部に表示する
歌詞の垂直方向の位置を移動し、譜の内部に表示させることができます。歌詞は
\override LyricText.extra-offset = #'(0 . dy)
で移動し、延長線やハイフンを移動する同様のコマンドも必要です。必要な移動量は試行錯誤によって決定します。
<< \new Staff << \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 } >> \new Lyrics \with { \override LyricText.extra-offset = #'(0 . 8.6) \override LyricExtender.extra-offset = #'(0 . 8.6) \override LyricHyphen.extra-offset = #'(0 . 8.6) } \lyricsto "voc" { La la -- la __ _ la } >>
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 歌詞を譜の内部に表示する ] | [ 上へ : Text ] | [ Text: 弦番号の延長線 > ] |
独立したテキストの 2 段組み
\markup
コマンドを用いて、独立したテキストを複数段組みにすることができます:
\markup { \fill-line { \hspace #1 \column { \line { O sacrum convivium } \line { in quo Christus sumitur, } \line { recolitur memoria passionis ejus, } \line { mens impletur gratia, } \line { futurae gloriae nobis pignus datur. } \line { Amen. } } \hspace #2 \column \italic { \line { O sacred feast } \line { in which Christ is received, } \line { the memory of His Passion is renewed, } \line { the mind is filled with grace, } \line { and a pledge of future glory is given to us. } \line { Amen. } } \hspace #1 } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 独立したテキストの 2 段組み ] | [ 上へ : Text ] | [ Text: 3 方向ボックス > ] |
弦番号の延長線
弦番号の延長線を追加し、続く音符が全て同じ弦で演奏されることを示します。
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 弦番号の延長線 ] | [ 上へ : Text ] | [ Text: UTF-8 > ] |
3 方向ボックス
この例は、テキスト (や他のマークアップ) の周りの 3 方向のみを囲うボックスを作成するマークアップ コマンドを追加する方法を示しています。
% New command to add a three sided box, with sides north, west and south % Based on the box-stencil command defined in scm/stencil.scm % Note that ";;" is used to comment a line in Scheme #(define-public (NWS-box-stencil stencil thickness padding) "Add a box around STENCIL, producing a new stencil." (let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding)) (y-ext (interval-widen (ly:stencil-extent stencil Y) padding)) (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) (x-rule (make-filled-box-stencil (interval-widen x-ext thickness) (cons 0 thickness)))) ;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0)) (set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0)) stencil)) % The corresponding markup command, based on the \box command defined % in scm/define-markup-commands.scm #(define-markup-command (NWS-box layout props arg) (markup?) #:properties ((thickness 0.1) (font-size 0) (box-padding 0.2)) "Draw a box round @var{arg}. Looks at @code{thickness}, @code{box-padding} and @code{font-size} properties to determine line thickness and padding around the markup." (let ((pad (* (magstep font-size) box-padding)) (m (interpret-markup layout props arg))) (NWS-box-stencil m thickness pad))) % Test it: \relative c' { c1^\markup { \NWS-box ABCD } c1^\markup { \NWS-box \note {4} #1.0 } }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 3 方向ボックス ] | [ 上へ : Text ] | [ Text: 上下に歌詞を配置した合唱譜テンプレート > ] |
UTF-8
タイトルや歌詞における特殊文字は、UTF-8 エンコーディングで入力し、Pango ベースのバックエンドを用いることで使用できます。インストールされているフォントが対応しているかによりますが、このスニペットはブルガリア語 (キリル文字), ヘブライ語, 日本語, ポルトガル語を表示します。
%{ You may have to install additional fonts. Red Hat Fedora linux-libertine-fonts (Latin, Cyrillic, Hebrew) google-noto-serif-jp-fonts (Japanese) Debian GNU/Linux, Ubuntu fonts-linuxlibertine (Latin, Cyrillic, Hebrew) fonts-noto-cjk (Japanese) %} % 'Linux Libertine' fonts also contain Cyrillic and Hebrew glyphs. \paper { #(define fonts (set-global-fonts #:roman "Linux Libertine O, Noto Serif CJK JP, Noto Serif JP" )) } bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } japanese = \lyricmode { いろはにほへど ちりぬるを わがよたれぞ つねならむ うゐのおくや まけふこえて あさきゆめみじ ゑひもせず } % "a nice song for you" portuguese = \lyricmode { à vo -- cê uma can -- ção le -- gal } \relative c' { c2 d e2 f g2 f e2 d } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \japanese } \addlyrics { \portuguese }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: UTF-8 ] | [ 上へ : Text ] | [ Text: repeatCommands を用いて入れ替え部分のテキストにマークアップを使用する > ] |
上下に歌詞を配置した合唱譜テンプレート
このテンプレートは基本的に単純な “合唱” テンプレートと同じですが、歌詞が
alignAboveContext
と alignBelowContext
を用いて配置されています。
global = { \key c \major \time 4/4 } sopMusic = \relative c'' { c4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative c' { e4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative c' { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative c { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics \with { alignAboveContext = #"women" } \lyricsto "sopranos" \sopWords \new Lyrics \with { alignBelowContext = #"women" } \lyricsto "altos" \altoWords % we could remove the line about this with the line below, since % we want the alto lyrics to be below the alto Voice anyway. % \new Lyrics \lyricsto "altos" \altoWords \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics \with { alignAboveContext = #"men" } \lyricsto "tenors" \tenorWords \new Lyrics \with { alignBelowContext = #"men" } \lyricsto "basses" \bassWords % again, we could replace the line above this with the line below. % \new Lyrics \lyricsto "basses" \bassWords >> }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 上下に歌詞を配置した合唱譜テンプレート ] | [ 上へ : Text ] | [ Vocal music > ] |
repeatCommands を用いて入れ替え部分のテキストにマークアップを使用する
入れ替え部分のある繰り返しは \repeat volta
を用いて指定するのが最善ですが、入れ替え部分のテキストを \markup
によってフォーマットする必要がある場合は、repeatCommands
コンテキスト
プロパティを用いる必要があります。
repeatCommands
はリストを取るため、マークアップを含める簡単な方法は、マークアップを変数として定義し、Scheme 構文を用いてリストに埋め込むことです
(#(list (list 'volta textIdentifier))
, textIdentifier
は変数名)。繰り返し小節線の指定を、リストの別の要素から行うことができます。
voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } } \relative c'' { c1 \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat) c4 b d e \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) f1 \set Score.repeatCommands = #'((volta #f)) }
[ << Text ] | [トップ][目次] | [ Vocal music >> ] |
[ < Text: 上下に歌詞を配置した合唱譜テンプレート ] | [ 上へ : Text ] | [ Vocal music > ] |