Autor Thema: Studierzeichen : Kombination von \circle und \box  (Gelesen 2216 mal)

chf

  • Member
Studierzeichen : Kombination von \circle und \box
« am: Samstag, 15. Dezember 2012, 19:33 »
Liebe Freunde,

in meinem "Würfelspiel" brauche ich Studierzeichen in folgender Form:
circle in box (im Unterschied zu den beiden einfachen)
Sicher könnt ihr mir helfen...

Gruß
chf





« Letzte Änderung: Samstag, 15. Dezember 2012, 19:36 von chf »

Be-3

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #1 am: Samstag, 15. Dezember 2012, 20:12 »
Hallo Christa,

also wie im letzten Beispiel (appoggiatura...) die umkringelte 12. und 13. - nur eben jetzt noch eine Box drumherum?
Die \box- und \circle-Befehle lassen sich doch wunderbar schachteln:

\version "2.16.0"

\relative c' {
  \mark \markup \box \circle "14."
  c1
}

Viele Grüße
Torsten

chf

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #2 am: Sonntag, 16. Dezember 2012, 17:16 »
Hallo Torsten,

jaaa, das schien mir viel zu einfach, deshalb hab ich's gar nicht erst probiert. So kann's gehen!  - Danke!
Nun hat sich allerdings gezeigt, dass die  b o x e s  mit zweistelligen Ordnungszahlen rechteckig werden. Wie das?
Ich hätte sie gern weiter quadratisch.

Gruß
Christa

eluze

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #3 am: Sonntag, 16. Dezember 2012, 23:58 »
na - zeig uns erstmal was du  m e i n s t; mit  c  o  d  e!!! und output!

Be-3

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #4 am: Montag, 17. Dezember 2012, 00:31 »
Nun hat sich allerdings gezeigt, dass die  b o x e s  mit zweistelligen Ordnungszahlen rechteckig werden. Wie das?
Ich hätte sie gern weiter quadratisch.

Hallo Christa,

eine \box ist einfach nur ein Rechteck, welches mit einem gewissen Abstand (padding) das nachfolgende Markup umschließt.
Daß dieses Rechteck bei einstelligen Zahlen mit Punkt dahinter zufällig (!) ziemlich quadratisch aussieht, liegt nur daran, daß eine Ziffer mit Punkt ungefähr so breit wie hoch ist.

Eigentlich hattest Du aber doch gefragt, wie man ein Quadrat um einen Kreis zeichnet: Ein \circle ist ein Kreis. Eine Box um einen Circle ist demzufolge immer quadratisch, weil der eingeschlossene Kreis definitionsgemäß so hoch wie breit ist (sonst wäre es ja kein Kreis).

Möglichkeiten für (kreislose) Quadrate:
a) Padding links, rechts, unten, oben einzeln nach Belieben einstellen: \markup \box \pad-to-box #'(0 . 3) #'(-1 . 3) "10."
b) einen unsichtbaren/weißen Kreis einpflanzen
c) überhaupt einen eigenen \square-Befehl definieren

Ich muß Eluze beipflichten: ein Beispiel täte not. Sähe es nicht komisch aus, wenn die Quadrate um Ordnungszahlen immer größer würden, wenn die Ordnungszahlen länger werden?


Viele Grüße
Torsten

harm6

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #5 am: Montag, 17. Dezember 2012, 00:34 »
Hallo Christa,

Eluze hat schon recht. Sonst muß man raten was Du vielleicht meinen könntest.
Insbesondere, da \box immer ein Rechteck liefert. Falls dieses Rechteck zufällig ein Quadrat sein sollte, so ist das ein Sonderfall.

Falls Du wirklich ein Quadrat haben willst, so gibt es in LilyPond keinen speziellen Befehl dafür.
Aber man kann natürlich einen schaffen:

\version "2.16.1"

#(define-public (make-square-stencil stencil thickness padding)
  "Add a square box around @var{stencil}, producing a new stencil."
  (let* ((x-ext (ly:stencil-extent stencil X))
         (y-ext (ly:stencil-extent stencil Y))
         (x-length (interval-length x-ext))
         (y-length (interval-length y-ext))
         (new-x-ext (interval-widen x-ext  padding))
         (new-y-ext (interval-widen y-ext (+ (/ (- x-length y-length) 2) padding)))
         (y-rule (make-filled-box-stencil (cons 0 thickness) new-y-ext))
         (x-rule (make-filled-box-stencil
                   (interval-widen new-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 -1 y-rule padding))
    (set! stencil (ly:stencil-combine-at-edge stencil Y 1 x-rule 0.0))
    (set! stencil (ly:stencil-combine-at-edge stencil Y -1 x-rule 0.0))
    ;; Uncomment to print x- and y-length
    ;; (newline)(write (interval-length (ly:stencil-extent stencil X)))
    ;; (newline)(write (interval-length (ly:stencil-extent stencil Y)))
    stencil))

#(define-markup-command (square layout props arg)
  (markup?)
  #:properties ((thickness 1)
                (font-size 0)
                (square-padding 0.2))
  "
@cindex enclosing text within a square box

Draw a square box round @var{arg}.  Looks at @code{thickness},
@code{square-padding} and @code{font-size} properties to determine line
thickness and padding around the markup.

@lilypond[verbatim,quote]
\\markup {
  \\override #'(square-padding . 0.5)
  \\square
  \\line { V. S. }
}
@end lilypond"
  (let* ((th (* (ly:output-def-lookup layout 'line-thickness)
                thickness))
         (pad (* (magstep font-size) square-padding))
         (m (interpret-markup layout props arg)))
    (make-square-stencil m th pad)))
   

bxmrkp =
\markup \override #'(thickness . 1.5) {
          \override #'(square-padding . 0.3)
          \square {
                  \override #'(box-padding . 0.2 )
                  \box 
                  "Rechteckige Box in einem Quadrat"
          }
}

\relative c' {
  \mark \markup \square "140."
  c1_\bxmrkp
}


HTH,
  Harm
« Letzte Änderung: Montag, 17. Dezember 2012, 00:41 von harm6 »

chf

  • Member
Re: Studierzeichen : Kombination von \circle und \box
« Antwort #6 am: Montag, 17. Dezember 2012, 01:37 »
...Dann hatte ich bis jetzt immer den Zufall zu Gast bzw. kleine Zahlen - ich wusste es nicht besser.
Danke! Mit Torstens Variante werde ich zurechtkommen.

Gute Nacht!
chf