Я знаю, что Framed
используется для отображения рамки вокруг символа, как я могу показать круг вокруг символа?
Как создать символ в кружке в Mathematica?
Ответы (5)
Если вы не против микроуправления параметрами выравнивания, вы можете наложить символ пустого круга на символ:
TraditionalForm @ Style[
Overlay[{x, Style[\[EmptyCircle], 24]}, Alignment -> {0.075, 0.16}]
, "DisplayFormula"
]
Показанные параметры размера шрифта и выравнивания подходят для шрифта на моем компьютере, но вам, возможно, придется настроить их для получения хороших результатов на вашем экране. И снова настройте их для приличной распечатки. Следующие 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"}
]
Вот попытка создать функцию, которая обводит произвольные выражения. Это довольно неуклюже, но я не могу придумать лучшего способа на данный момент.
circled =
With[{m = Max@Rasterize[#,"RasterSize"]},
Framed[
Pane[#, {m, m}, Alignment -> Center],
RoundingRadius -> 1*^6]
] &;
circled[1/x + y + z]
1*^6
вместо 10^6
?
- person abcd; 30.10.2011
1*^6
— это мое большое значение по умолчанию, и когда я его вижу, я часто понимаю, что это просто произвольное большое число. Есть одна связанная вещь: в конце концов, с 1*^x
на одну операцию меньше, чем с 10^x
. Например: Timing[a = 1*^60000000;]
и Timing[b = 10^60000000;]
.
- person Mr.Wizard; 30.10.2011
Timing@Do[1*^6, {50000000}]
против Timing@Do[10^6, {50000000}]
.
- person Mr.Wizard; 30.10.2011
circled["3((1/x+y+z)/h)\n2\nm\np"]
- person Dr. belisarius; 30.10.2011
TraditionalForm
это больше похоже на то, что получает мистер Волшебник.
- person Andrew; 30.10.2011
Framed
может выбрать вариант RoundingRadius
.
Framed[expr, RoundingRadius -> radius]
При меньших значениях radius
углы кадра просто слегка закругляются, а при больших значениях кадр становится овалом или кругом.
RoundingRadius
и FrameMargins
, кажется, делает это, но для каждого выражения, которое я хочу поместить в круг, требуется другая комбинация.
- person Andrew; 30.10.2011
Та же идея WReach, но попытка автоматического расчета:
cirBeli[x_] :=
TraditionalForm@
Style[Overlay[{#,
Style[\[EmptyCircle],
N@2 Norm[ImageDimensions[Rasterize[#]][[1 ;; 2]]]]},
Alignment -> Center], "DisplayFormula"] &@x
cirBeli[x]
cirBeli[Sin[z^2]/Exp[z] + Integrate[Sin[x] Cos[x] Sqrt[x], x]]
выражение не находится в середине круга.
- person Andrew; 30.10.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]]
circledBeli["3((1/x+y+z)/h)\n2\nm\np"]
Изменить
Следующее, похоже, лучше работает с 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]
TraditionalForm
?
- person Andrew; 31.10.2011
Graphics
? - person abcd   schedule 30.10.2011