5
$\begingroup$

I am trying to use CellPrint to print a cell that asks a user to solve an equation. This equation is randomly generated right beforehand, and I would like to have it print in Blue. The whole Cell should be in the "Section" style. Here is my first attempt:

equat = ToString[
Expand[Product[(x - RandomInteger[{-10, 10}]), {i, 
  3 + RandomInteger[]}]], TraditionalForm];
CellPrint[
Cell[TextData[
RowBox[{StyleBox["Solve the equation "], 
  StyleBox[equat, FontColor -> Blue]}]], "Section"]];

This does in fact create the cell, and the last part is blue, but it is hindered by the TraditionalForm "markup": I won't put any color here, but the command above gives the output

Solve the equation \!\(TraditionalForm\`\(x\^4 - \(\(73\ x\^2\)\) - \(\(72\ x\)\)\)\)

Is there a simple way to fix this? I have tried using ToBoxes, but then I don't see how to color the output Blue. Any tips or pointers would be much appreciated.

$\endgroup$
7
  • 1
    $\begingroup$ How about equ = TraditionalForm@ Expand[Product[(x - RandomInteger[{-10, 10}]), {i, 3 + RandomInteger[]}]];CellPrint[ Cell[CellGroupData[{StyleBox["Solve the equation "], BoxData[ToBoxes@equ]}]]] $\endgroup$
    – DavidC
    Feb 16, 2013 at 17:15
  • $\begingroup$ @DavidCarraher: That prints two different cells, no? $\endgroup$
    – Steve D
    Feb 16, 2013 at 17:18
  • $\begingroup$ Ah but this does give me a way to work it out: equ = TraditionalForm@ Expand[Product[(x - RandomInteger[{-10, 10}]), {i, 3 + RandomInteger[]}]]; CellPrint[ Cell[RowBox[{StyleBox["Solve the equation ", "Section"], StyleBox[ToBoxes@equ, FontColor -> Blue, FontWeight -> Bold, "Section"]}]]] $\endgroup$
    – Steve D
    Feb 16, 2013 at 17:25
  • $\begingroup$ Now the hard part :) - how to put an "=0" at the end (in blue)? $\endgroup$
    – Steve D
    Feb 16, 2013 at 17:25
  • $\begingroup$ Maybe...equ = TraditionalForm[ Expand[Product[(x - RandomInteger[{-10, 10}]), {i, 3 + RandomInteger[]}]] == HoldForm[0]]; $\endgroup$
    – DavidC
    Feb 16, 2013 at 17:49

1 Answer 1

3
$\begingroup$

You need to use BoxData. Because ToString creates something strange you also obviously have to change "\\" -> "". I don't know if this is a bug or working as designed.

equat = (StringReplace[ToString[#1, TraditionalForm], "\\" -> ""] & )[
       Expand[
    Product[x - RandomInteger[{-10, 10}], {i, 3 + RandomInteger[]}]]]; 
CellPrint[
  Cell[BoxData[{RowBox[{"Solve the equation ", 
       StyleBox[equat, FontColor -> Blue]}]}], "Section"]];

Mathematica graphics

$\endgroup$
1
  • $\begingroup$ Thanks so much! This is exactly what I wanted. $\endgroup$
    – Steve D
    Feb 16, 2013 at 23:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.