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

Wolfram mathematica 如何在Mathematica中创建带圆圈的符号?,wolfram-mathematica,typesetting,mathematical-typesetting,Wolfram Mathematica,Typesetting,Mathematical Typesetting,我知道Framed用于显示符号周围的边框,如何显示符号周围的圆圈?Framed可以选择 在较小的半径值下框架的角仅略微圆化,但在较大的值下,框架变为椭圆形或圆形 如果您不介意微观管理对齐参数,可以将空圆圈字符覆盖在符号上: TraditionalForm @ Style[ Overlay[{x, Style[\[EmptyCircle], 24]}, Alignment -> {0.075, 0.16}] , "DisplayFormula" ] 显示的字体大小和对齐参数适用于我的

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

Framed
可以选择


在较小的
半径值下
框架的角仅略微圆化,但在较大的值下,框架变为椭圆形或圆形

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

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

显示的字体大小和对齐参数适用于我的机器上的字体,但您可能需要调整它们以在屏幕上获得良好的效果。并再次调整它们,以获得一个像样的打印输出。以下
操作
有助于此过程:

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"}
]

这里尝试创建一个环绕任意表达式的函数。这相当笨拙,但我现在想不出更好的办法

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


circled[1/x + y + z]

花环的概念相同,但试图自动计算:

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

cirBeli[x]

使用带边框的[]和圆形

编辑

以下内容似乎更适合传统形式:

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]

非默认值的组合
RoundingRadius
FrameMargins
似乎可以做到这一点,但我想在圆圈中加入的每个表达式都需要不同的组合我希望你对椭圆没问题。。。我不知道有没有更好的解决方案。也许有一种方法可以通过编程计算选项的正确值。有人能用调色板按钮来实现吗?我有一个调色板,上面有一个按钮,可以对选择进行超链接(从这个:),我想添加一个按钮来自动循环它。我还不太喜欢调色板…你介意输出是一个
图形
对象吗?@yoda如果它可以放在一个带有常规传统形式数学符号的DisplayFormula单元格中,例如在单元格周围放上大括号。写
1*^6
而不是
10^6
,有什么好处?@yoda,没什么,只是习惯而已
1*^6
是我的默认“大值”,当我看到它时,我通常知道它只是一个任意的“大”数。有一点是相关的:在极端情况下,使用
1*^x
的操作比使用
10^x
的操作少一个。例如:
定时[a=1*^60000000;]
定时[b=10^60000000;]
@yoda,或者更相关的:
Timing@Do[1*^6,{50000000}]
Timing@Do[10^6,{50000000}]
@Mr.Wizard谢谢,我没有意识到性能上的差异。然而,在这种情况下,我认为它比教育更令人困惑,但我理解,习惯很难改变。@先生,如果你想框定整个表达式(而不仅仅是简单的符号),窗格[]的大小应该考虑最大的对角线。参见<代码>循环[[ 3((1/x+y+z)/h)\n2\nMnP ] ] /<代码> <代码> CyBeli [ Sin [Z^ 2 ] /EXP[Z] + [ Sin [X] COS[X] SqRT[X],XCO] < /代码>,表达式不在圆的中间。@安得烈问题是“[Epple Tyr]”不是垂直居中的。让我们看看我是否可以修复它。你如何将其与
TraditionalForm
一起使用?@Andrew作为Rasterize[]下的TraditionalForm渲染,具有不同的水平和垂直大小,没有一种简单的方法,AFAIK.FWIW,至少对我来说,当窗口比对象窄时,该方法的行为异常。示例:@先生,谢谢!也许我明天再看一次。现在该睡觉了。
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]]
circledBeli["3((1/x+y+z)/h)\n2\nm\np"]
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]