MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Making parts of formulae blinking


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},
   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.


test = CreateSubexpression[A B, False, "part 1"] +
  CreateSubexpression[x y, False, "part 2"]
% // ReleaseSubexpressions[All]

RowBox[{"A", " ", "B"}],
"\"part 1\"",
Annotation[#, "part 1", "Tooltip"]& ]\) + \!\(\*
RowBox[{"x", " ", "y"}],
"\"part 2\"",
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 

test /. t : Tooltip[expr_, label_] :> Accentuate[t]

RowBox[{"A", " ", "B"}],
"\"part 1\"",
Annotation[#, "part 1", "Tooltip"]& ],
     "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}]]\) + \!\(\*
RowBox[{"x", " ", "y"}],
"\"part 2\"",
Annotation[#, "part 2", "Tooltip"]& ],
     "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) \!\(\*
RowBox[{"4", " ", "\[Pi]", " ", "\[Epsilon]"}]],
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

"Alexei Boulbitch" <Alexei.Boulbitch at> wrote in message 
news:g7h9r7$bca$1 at
> 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:
> 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.

  • Prev by Date: Re: More Inquiries
  • Next by Date: Re: Making parts of formulae blinking
  • Previous by thread: Re: Making parts of formulae blinking
  • Next by thread: Re: Making parts of formulae blinking