Autor Thema: Schwarzer Kreis mit weißem Text  (Gelesen 2496 mal)

LaLuneNoir

  • Member
Schwarzer Kreis mit weißem Text
« am: Mittwoch, 28. September 2011, 10:39 »
Hallo liebes Forum,

Ich schreibe gerade ein Stück für vier Sprecher mit Megaphonen. Dabei gibt es Passagen, in denen deas Megafon benutzt wird und andere, in denen es nicht zum Einsatz kommt. Ein Wechsel von Megafon zu nicht-Megafon wird mit einem M in einem Kreis dargestellt:

\markup { \circle { \pad-markup #.5 \bold M } }

Ein Wechsel von nicht-Megafon zu Megafon soll durch ein weißes M innerhalb eines gefüllten, schwarzen Kreises dargestellt werden. Kann ich das irgendwie mit Hilfe der \cirlce-Funktion erreichen? Das hier habe ich versucht

\markup { \override #'(filled . #t) \circle { \pad-markup #.5 \bold \with-color #(x11-color 'white) M } }

aber "filled" scheint eine Variable zu sein, die nur \draw-circle betrifft.

Vielleicht wisst ihr was?

Viele Grüße

ding-dong

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #1 am: Mittwoch, 28. September 2011, 11:07 »
vielleicht mit \draw-circle:

\markup {
  \combine \draw-circle #2 #0 ##t
    \bold
    \translate #'(-1 . -1) \with-color #(x11-color 'green)
    M
}

LaLuneNoir

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #2 am: Mittwoch, 28. September 2011, 11:45 »
Ja, das habe ich auch schon überlegt. Dann muss man halt von Hand das M rumschieben, bis es wirklich in der Mitte ist. Mit \cirlce ist es halt wesentlich einfacher und genauer. Aber nun gut, ich denke es würde auch gehen. Die Idee, mit \translate zu arbeite gefällt mir allerdings, die Funktion vergess ich immer. Wesentlich eleganter als \hspace #-x und \lower.

ding-dong

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #3 am: Mittwoch, 28. September 2011, 12:33 »
noch einfacher scheint mir\vcenter \center-align

LaLuneNoir

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #4 am: Mittwoch, 28. September 2011, 12:58 »
Hm… man lernt nie aus, damit habe ich noch nie gearbeitet. Wie muss man das den zusammenbauen?

mm = ^\markup {
   \vcenter \center-align
   \draw-circle #1.7 #0 ##t
   \vcenter \center-align
   \huge
   \with-color #(x11-color 'white)
   \override #'(font-name . "Courier New bold")
      {"M" }
}

funktioniert auf jeden Fall nicht.

harm6

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #5 am: Mittwoch, 28. September 2011, 13:32 »
Hallo,

ich hatte Dein Problem schon auf der englischen Liste gesehen, aber bislang keine Zeit gehabt mich damit zu beschäftigen.

ding-dongs Vorschlag läßt sich so umsetzen:

\markup { 
        \combine
        \draw-circle #1.7 #0 ##t
        \vcenter \center-align
        \huge
        \with-color #(x11-color 'white)
        \override #'(font-name . "Courier New bold") {"M" }
}

Ich selber habe nach einem Weg gesucht das Procedere zu automatisieren. Zu diesem Zweck habe ich circle-stencil aus stencil.scm und circle aus define-markup-commands.scm kopiert und zu circle-stencil-h sowie filled-circle-with-text umdefiniert:

\version "2.14.2"

% see: stencil.scm -> circle-stencil

#(define-public (circle-stencil-h stencil thickness padding)
  (let* ((x-ext (ly:stencil-extent stencil X))
(y-ext (ly:stencil-extent stencil Y))
(diameter (max (interval-length x-ext)
                        (interval-length y-ext)))
(radius (+ (/ diameter 2) padding thickness))
(circle (make-circle-stencil radius thickness #t)))

    (ly:stencil-add
     (ly:stencil-translate circle
   (cons
    (interval-center x-ext)
    (interval-center y-ext)))
     stencil)))
 
% see: define-markup-commands.scm -> circle
     
#(define-markup-command (filled-circle-with-text layout props arg)
  (markup?)
  #:category graphic
  #:properties ((thickness 1)
(font-size 0)
(circle-padding 0.2))
  (let ((th (* (ly:output-def-lookup layout 'line-thickness)
               thickness))
         (pad (* (magstep font-size) circle-padding))
         (m (interpret-markup layout props arg)))
    (circle-stencil-h m th pad)))

\markup { \circle { \pad-markup #.5 \bold "M" } }

\markup { \filled-circle-with-text \pad-markup #.5 \bold \with-color #white "M" }

Gruß,
  Harm

kilgore

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #6 am: Mittwoch, 28. September 2011, 13:34 »
dir fehlte einfach "\combine"  :)


mm = ^\markup {
   \combine
   \vcenter \center-align
   \draw-circle #1.7 #0 ##t
   \vcenter \center-align
   \huge
   \with-color #(x11-color 'white)
   \override #'(font-name . "Courier New bold")
      {"M" }
}



\relative c' {
  r4 r4 r4\mm r4
}

LaLuneNoir

  • Member
Re: Schwarzer Kreis mit weißem Text
« Antwort #7 am: Mittwoch, 28. September 2011, 13:52 »
Aha, wunderbar. Bisher bin ich immer noch um die graphischen Möglichkeiten in \markup herum gekommen. So kompliziert ist es ja eigentlich auch nicht. Bei Scheme steige ich aber nach wie vor aus, da kann ich höchstens einen bestehenden Code leicht anpassen.

Vielen Dank auf jeden Fall für die hilfreichen Antworten!

Gruß

Jonas