如何在Mathematica中创建带圆圈的符号?

时间:2011-10-29 22:10:42

标签: wolfram-mathematica typesetting mathematical-typesetting

我知道Framed用于显示符号周围的框架,如何在符号周围显示圆圈?

5 个答案:

答案 0 :(得分:8)

如果您不介意对对齐参数进行微观管理,可以将空圆圈字符覆盖在符号上:

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

circled "x"

展示的字体大小和对齐参数适用于我的机器上的字体,但您可能需要调整它们以在屏幕上获得良好的效果。并再次调整它们以获得合适的打印效果。以下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

答案 1 :(得分:8)

这是尝试创建一个圈出任意表达式的函数。它相当笨拙,但我现在想不出更好的方法。

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


circled[1/x + y + z]

enter image description here

答案 2 :(得分:6)

Framed可以选择RoundingRadius

Framed[expr, RoundingRadius -> radius]

radius的较小值处,框架的角部略微呈圆形,但在较大的值处,框架变为椭圆形或圆形。

答案 3 :(得分:3)

与Reach相同的想法,但试图自动计算:

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

cirBeli[x]

enter image description here

答案 4 :(得分:2)

使用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