Как создать символ в кружке в Mathematica? - PullRequest
11 голосов
/ 30 октября 2011

Я знаю, что Framed используется, чтобы показать рамку вокруг символа, как я могу показать круг вокруг символа?

Ответы [ 5 ]

8 голосов
/ 30 октября 2011

Если вы не против микроуправления параметрами выравнивания, вы можете наложить символ пустого круга на символ:

TraditionalForm @ Style[
  Overlay[{x, Style[\[EmptyCircle], 24]}, Alignment -> {0.075, 0.16}]
, "DisplayFormula"
]

circled

Отображаемый размер шрифта иПараметры выравнивания работают для шрифта на моем компьютере, но вам, возможно, придется настроить их для получения хороших результатов на вашем экране.И подправить их снова для приличной распечатки.Следующие Manipulate могут помочь в этом процессе:

Manipulate[
  TraditionalForm @ Style[
    Overlay[
      {Style[x, xSize], Style[\[EmptyCircle], circleSize]}
    , Alignment -> {xAlign, yAlign}
    ]
  , "DisplayFormula"
  ]
, {{xSize, 12}, 8, 40, 1, Appearance -> "Labeled"}
, {{circleSize, 24}, 8, 40, 1, Appearance -> "Labeled"}
, {{xAlign, 0.075}, -1, 1, Appearance -> "Labeled"}
, {{yAlign, 0.016}, -1, 1, Appearance -> "Labeled"}
]

image adjustment manipulator

8 голосов
/ 30 октября 2011

Вот попытка создать функцию, которая окружает произвольные выражения. Это довольно неуклюже, но сейчас я не могу придумать лучшего способа.

circled =
    With[{m = Max@Rasterize[#,"RasterSize"]},
       Framed[
         Pane[#, {m, m}, Alignment -> Center],
         RoundingRadius -> 1*^6]
    ] &;


circled[1/x + y + z]

enter image description here

6 голосов
/ 30 октября 2011

Framed может принимать значение RoundingRadius.

Framed[expr, RoundingRadius -> radius]

При меньших значениях radius углы рамки просто слегка закруглены, но при больших значенияхрамка становится овалом или кругом.

3 голосов
/ 30 октября 2011

Та же идея WReach, но при попытке автоматического расчета:

cirBeli[x_] := 
 TraditionalForm@
    Style[Overlay[{#, 
       Style[\[EmptyCircle], 
        N@2 Norm[ImageDimensions[Rasterize[#]][[1 ;; 2]]]]}, 
      Alignment -> Center], "DisplayFormula"] &@x

cirBeli[x]

enter image description here

2 голосов
/ 31 октября 2011

Использование Framed [] с RoundingRadius

f = Rasterize[#, "RasterSize"] &;
circledBeli[x_] := Framed[ x,
                    FrameMargins -> (Norm@f@x - Array[1 &, {2, 2}] f@x)/2,
                    RoundingRadius -> Norm@f@x];

circledBeli[Sin[z^2]/Exp[z] + Integrate[Sin[x] Cos[x] Sqrt[x], x]]

enter image description here

circledBeli["3((1/x+y+z)/h)\n2\nm\np"]

enter image description here

Редактировать

Похоже, что лучше работать с TraditionalForm:

f = ImageDimensions[Rasterize[#]][[1 ;; 2]] &;
g = Reverse[ImageDimensions[Rasterize[Rotate[#, Pi/2]]][[1 ;; 2]]] &;
h = Max /@ Transpose@{f@#, g@#} &;
circledBeli[x_] := 
  Framed[x, FrameMargins -> (Norm@h@x - Array[1 &, {2, 2}] h@x)/2, 
   RoundingRadius -> Norm@h@x];
t = TraditionalForm[Sin[z^2]/Exp[z] + Integrate[Sin[x] Cos[x] Sqrt[x], x]]
circledBeli[t]

enter image description here

...