Re: Making parts of formulae blinking
- To: mathgroup at smc.vnet.net
- Subject: [mg91201] Re: Making parts of formulae blinking
- From: "David Park" <djmpark at comcast.net>
- Date: Sat, 9 Aug 2008 07:45:58 -0400 (EDT)
- References: <g7h9r7$bca$1@smc.vnet.net>
Alexei,
This is a very interesting question because in the larger sense it relates
to how one manipulates expressions and presents concepts, in a clear and
elegant manner, to a reader of a notebook. I think this is somewhat an open
question and we have to learn how to do it. So my answer is not going to be
totally responsive and I think that your first approach is not the best
because it draws you off into computer science and away from the math and
physics. Also, a blinking graphical display may serve a tutorial purpose but
it is a dead-end expression that can't be further used. (Also I don't know
right off how to get some blinking in, but I'm certain some member of
MathGroup will do it.)
So instead of going to graphics, which in general might be quite complicated
to get all the formatting correct, let's try to stay with regular
expressions that can be accentuated with EventHandlers and then returned
again to regular expressions. Here are two routines to help do that:
Accentuate[expr_] :=
Module[{col = Black, size = Medium},
EventHandler[
Style[expr, FontColor -> Dynamic[col],
FontSize ->
Dynamic[size]], {"MouseClicked" :> (col =
col /. {Black -> Red, Red -> Black};
size = size /. {Large -> Medium, Medium -> Large})}]]
ClearAccentuate[expr_] :=
expr /. HoldPattern[EventHandler[Style[subexpr_, __], __]] -> subexpr
Now we can use these on your example and then return to a normal expression.
Or we could have just saved the initial expression. In any case, we don't
have to go to graphics.
A B + x y
Accentuate /@ %
% // ClearAccentuate // InputForm
Another possibility is to put labeled Tooltips on subexpressions. One can
then use the mouse to identify the subexpressions. This has an additional
advantage that a Tooltip behaves somewhat like a HoldForm in that it holds a
subexpression together when using general Mathematica commands such as
Simplify. In the Presentations package I have provided routines
CreateSubexpression and ReleaseSubexpressions. This allows individual labels
for various subexpressions and we can individually release them (or leave
them if we want to keep them as subexpressions.) Then your expression might
take the following form. The second argument specifies whether to put
parentheses around the subexpression. The first output can be copied into a
notebook to see how the Tooltips work for this example.
Needs["Presentations`Master`"]
test = CreateSubexpression[A B, False, "part 1"] +
CreateSubexpression[x y, False, "part 2"]
% // ReleaseSubexpressions[All]
\!\(\*
TagBox[
TooltipBox[
RowBox[{"A", " ", "B"}],
"\"part 1\"",
LabelStyle->"TextStyling"],
Annotation[#, "part 1", "Tooltip"]& ]\) + \!\(\*
TagBox[
TooltipBox[
RowBox[{"x", " ", "y"}],
"\"part 2\"",
LabelStyle->"TextStyling"],
Annotation[#, "part 2", "Tooltip"]& ]\)
A B + x y
I would think that in many cases the tooltips would be sufficient. But if
you want both the tooltips and the ability to accentuate by mouse clicking
you could use the following. The expression has to be copied to a notebook,
and for some reason the copies don't get the Red color correct but you can
see that it has both the tooltips and the ability to accentuate the
subexpressions.
test /. t : Tooltip[expr_, label_] :> Accentuate[t]
\!\(\*
TagBox[
StyleBox[
TagBox[
TooltipBox[
RowBox[{"A", " ", "B"}],
"\"part 1\"",
LabelStyle->"TextStyling"],
Annotation[#, "part 1", "Tooltip"]& ],
StripOnInput->False,
FontSize->Dynamic[$CellContext`size$805],
FontColor->Dynamic[$CellContext`col$805]],
EventHandlerTag[{
"MouseClicked" :> ($CellContext`col$805 = ReplaceAll[$\
CellContext`col$805, {
Black -> Red,
Red -> Black}]; $CellContext`size$805 = ReplaceAll[$\
CellContext`size$805, {Large -> Medium, Medium -> Large}]),
PassEventsDown -> Automatic, PassEventsUp -> True}]]\) + \!\(\*
TagBox[
StyleBox[
TagBox[
TooltipBox[
RowBox[{"x", " ", "y"}],
"\"part 2\"",
LabelStyle->"TextStyling"],
Annotation[#, "part 2", "Tooltip"]& ],
StripOnInput->False,
FontSize->Dynamic[$CellContext`size$806],
FontColor->Dynamic[$CellContext`col$806]],
EventHandlerTag[{
"MouseClicked" :> ($CellContext`col$806 = ReplaceAll[$\
CellContext`col$806, {
Black -> Red,
Red -> Black}]; $CellContext`size$806 = ReplaceAll[$\
CellContext`size$806, {Large -> Medium, Medium -> Large}]),
PassEventsDown -> Automatic, PassEventsUp -> True}]]\)
The following is a case of keeping a subexpression together while
manipulating an expression. FactorOut is another Presentations routine.
c1 = CreateSubexpression[1/(4 \[Pi] \[Epsilon]), False, "constant"];
c1 (a + b)/(a b);
% // Expand // FactorOut[c1]
(1/a + 1/b) \!\(\*
TagBox[
TooltipBox[
FractionBox["1",
RowBox[{"4", " ", "\[Pi]", " ", "\[Epsilon]"}]],
"\"constant\"",
LabelStyle->"TextStyling"],
Annotation[#, "constant", "Tooltip"]& ]\)
Again, if you paste the expression into a notebook you will see that the
subexpression is kept together and has a tooltip. We could also have
accentuated it.
--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
"Alexei Boulbitch" <Alexei.Boulbitch at iee.lu> wrote in message
news:g7h9r7$bca$1 at smc.vnet.net...
> Dear MathGroup members,
>
> making presentations on Mathematics or Physics, sometimes I need to
> discuss independently of one another certain parts of mathematical
> expressions belonging to the same formula. This requires to separate
> them out or somehow to highlight them. Such an aim may be achieved in
> several ways. Say, below a simple mathematical formula is defined. It
> consists of two parts. By a mouse click one of the parts is blended
> while the other changes its color to a more striking:
>
> part1 = Graphics[
> Text[Style["AB+", "Times New Roman", Italic, 22,
> FontColor -> Dynamic[col1]]], ImageSize -> {80, 70}];
> part2 = Graphics[
> Text[Style["xy", "Times New Roman", Italic, 22,
> FontColor -> Dynamic[col2]]], ImageSize -> {80, 70}];
> collst1 = {Black, Black};
> collst2 = {Blue, Gray};
> collst3 = {Gray, Blue};
> DynamicModule[{col1 = Black, col2 = Black},
> EventHandler[
> GraphicsRow[{part1, part2},
> Spacings -> -35], {"MouseClicked" :> ({col1,
> col2} = {col1, col2} /.{collst3 -> collst1,
> collst1 -> collst2, collst2 -> collst3})}]]
>
>
> Now comes my question:
>
> It would still better catch the eye, if (before the part in question
> will definitely change its color to Blue) it blinks few times. Say, it
> may change few times its color between blue and gray, or it may
> increase and decrease its size few times or so.
>
> Have you an idea of how to reach such a result?
>
> My system is Windows XP/Mathematica 6.0.1
>
> Thank you,
> Alexei
>
> --
> Alexei Boulbitch, Dr., Habil.
> Senior Scientist
>
> IEE S.A.
> ZAE Weiergewan
> 11, rue Edmond Reuter
> L-5326 Contern
> Luxembourg
>
> Phone: +352 2454 2566
> Fax: +352 2454 3566
>
> Website: www.iee.lu
>
> This e-mail may contain trade secrets or privileged, undisclosed or
> otherwise confidential information. If you are not the intended recipient
> and have received this e-mail in error, you are hereby notified that any
> review, copying or distribution of it is strictly prohibited. Please
> inform us immediately and destroy the original transmittal from your
> system. Thank you for your co-operation.
>
>
>