MathGroup Archive 1998

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

Search the Archive

automatic referencing (almost working)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg13056] automatic referencing (almost working)
  • From: "-don." <dexter at csd.uwm.edu>
  • Date: Sat, 4 Jul 1998 16:44:59 -0400
  • Organization: University of Wisconsin - Milwaukee
  • Sender: owner-wri-mathgroup at wolfram.com

hello all,

i've posted a few times before trying to come up with a method of easily
generating
references to sections, equations, etc. within notebooks.  P.J. Hinton
has a web 
site (referenced in my earlier posts and in his responses) which details
how to
perform referencing manually.  this is tedious if there are *many*
equations to
be referenced since it requires an equation (or section) name to be
entered twice.

in my last post, i set the goal of having referencing work as follows:
you're typing away and realize you need a reference, leaving the
courser in the
spot where the reference is to appear, you hit a button on a palette
(called
"CreateReference" or some such), you then select the to-be-referenced
cell and the
reference appears where you wish it.

i've managed to get kinda close to this.  at present, the referencing
works as:
you're typing away and realize you need a reference, you select the
to-be-referenced
cell and click the "SetReference" button.  this creates a random CellTag
if one does
not already exist and writes the pertinent data to a temp file (for
Unix-like sytems...
placed in /tmp).  you then position the courser where the reference is
to be placed
and click the "ReferenceIt" button.  a reference in the form of "Section
X" or "(X)"
appears for section-like cells or NumberedEquations.

this generally works if the buttons are in the working notebook, but not
if they're placed in their own palette.  i've also found specific
equations for which
it generates errors (one that began with a \[DoubleRightArrow]).

i'd like to invite those out there more skilled than i to take what i've
done and
1) make it function as a palette, 2) make it robust, 3) make it slick.

notebook follows (Mathematica 3.0, Linux).  give it a try, see what you
think.
responses here or to dexter at csd.uwm.edu appreciated.

-don.

--------------------------------------------------------------------------

Notebook[{
Cell[BoxData[
    RowBox[{"\n", 
      RowBox[{
        RowBox[{"CellPrint", "[", 
          RowBox[{"Cell", "[", 
            RowBox[{
              RowBox[{"BoxData", "[", 
                RowBox[{"ButtonBox", "[", 
                  RowBox[{"\"\<SetReference\>\"", ",", 
                    RowBox[{"Active", "->", "True"}], ",", 
                    RowBox[{"ButtonEvaluator", "->", "Automatic"}], ",",

                    "\n", "\t\t\t\t", 
                    RowBox[{"ButtonFunction", ":>", 
                      RowBox[{"Module", "[", 
                        RowBox[{
                          RowBox[{"{", 
                            RowBox[{"markervalue", ",", "markertype",
",", 
                              RowBox[{"nb", "=", 
                                RowBox[{"SelectedNotebook", "[",
"]"}]}], 
                              ",", " ", 
                              RowBox[{"ref", "=", " ", 
                                RowBox[{"NotebookCreate", "[", 
                                  RowBox[{"Visible", "->", "False"}], 
                                  "]"}]}]}], "}"}], ",", "\n", 
                          "\t\t\t\t\t\t", 
                          RowBox[{
                            RowBox[{"result", "=", 
                              RowBox[{"Options", "[", 
                                RowBox[{
                                  RowBox[{
                                  "NotebookSelection", "[", "nb", "]"}],
",", 
                                  "CellTags"}], "]"}]}], ";", "\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"If", "[", 
                              RowBox[{
                                RowBox[{
                                  RowBox[{
                                    RowBox[{
                                    "Dimensions", "[", "result", "]"}],
"[", 
                                    RowBox[{"[", "1", "]"}], "]"}], ">",

                                  "0"}], ",", "\n", "\t\t\t\t\t\t\t\t", 
                                RowBox[{"markervalue", "=", 
                                  RowBox[{"ToExpression", "[", 
                                    RowBox[{
                                      RowBox[{
                                        RowBox[{
                                        RowBox[{
                                        RowBox[{
                                        "ToBoxes", "[", "result", "]"}],

                                        "[", 
                                        RowBox[{"[", "1", "]"}], "]"}],
"[", 
                                        RowBox[{"[", "2", "]"}], "]"}],
"[", 
                                        RowBox[{"[", "1", "]"}], "]"}],
"[", 
                                      RowBox[{"[", "3", "]"}], "]"}], 
                                    "]"}]}], ",", "\n",
"\t\t\t\t\t\t\t\t",

                                RowBox[{
                                  RowBox[{"markervalue", "=", 
                                    RowBox[{"Random", "[", 
                                      RowBox[{"Real", ",", 
                                        RowBox[{"{", 
                                        RowBox[{"0", ",", "1"}], "}"}],
",", 
                                        "20"}], "]"}]}], ";", "\n", 
                                  "\t\t\t\t\t\t\t\t", 
                                  RowBox[{"SetOptions", "[", 
                                    RowBox[{
                                      RowBox[{
                                      "NotebookSelection", "[", "nb",
"]"}], 
                                      ",", 
                                      RowBox[{"CellTags", "->", 
                                        RowBox[{
                                        "{", "markervalue", "}"}]}]}], 
                                    "]"}]}]}], "]"}], ";", "\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"markertype", "=", 
                              RowBox[{"Part", "[", 
                                RowBox[{
                                  RowBox[{"NotebookRead", "[", "nb",
"]"}],

                                  ",", "2"}], "]"}]}], ";", 
                            RowBox[{"NotebookWrite", "[", 
                              RowBox[{"ref", ",", 
                                RowBox[{"Cell", "[", 
                                  RowBox[{
                                  "markertype", " ", ",",
"\"\<Output\>\"",

                                    ",", 
                                    RowBox[{"CellTags", "->", 
                                      RowBox[{
                                      "{", "\"\<markertype\>\"",
"}"}]}]}],

                                  "]"}]}], "]"}], ";", "\n",
"\t\t\t\t\t\t", 
                            RowBox[{"NotebookWrite", "[", 
                              RowBox[{"ref", ",", 
                                RowBox[{"Cell", "[", 
                                  RowBox[{
                                  "markervalue", " ", ",",
"\"\<Output\>\"", 
                                    ",", 
                                    RowBox[{"CellTags", "->", 
                                      RowBox[{
                                      "{", "\"\<markervalue\>\"",
"}"}]}]}], 
                                  "]"}]}], "]"}], ";", "\n",
"\t\t\t\t\t\t", 
                            RowBox[{"NotebookSave", "[", 
                              RowBox[{
                              "ref", ",", 
                                "\"\</tmp/ActiveReference.nb\>\""}],
"]"}],

                            ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"NotebookClose", "[", "ref", "]"}], 
                            ";"}]}], "\n", "\t\t\t", "]"}]}]}], "]"}],
"]"}], 
              ",", "\n", "\"\<Text\>\""}], "]"}], "]"}], ";"}]}]],
"Input"],

Cell[BoxData[
    RowBox[{"\n", 
      RowBox[{
        RowBox[{"CellPrint", "[", 
          RowBox[{"Cell", "[", 
            RowBox[{
              RowBox[{"BoxData", "[", 
                RowBox[{"ButtonBox", "[", 
                  RowBox[{"\"\<ReferenceIt\>\"", ",", 
                    RowBox[{"Active", "->", "True"}], ",", 
                    RowBox[{"ButtonEvaluator", "->", "Automatic"}], ",",

                    "\n", "\t\t\t\t", 
                    RowBox[{"ButtonFunction", ":>", 
                      RowBox[{"Module", "[", 
                        RowBox[{
                          RowBox[{"{", 
                            RowBox[{
                            "pretext", ",", "posttext", ",", " ", 
                              "markertype", ",", " ", "markervalue",
",", 
                              " ", "mycmd", ",", " ", "mystring", ",", 
                              RowBox[{"nb", "=", 
                                RowBox[{"SelectedNotebook", "[",
"]"}]}], 
                              ",", " ", 
                              RowBox[{"ref", "=", 
                                RowBox[{"NotebookOpen", "[", 
                                  RowBox[{
                                  "\"\</tmp/ActiveReference.nb\>\"",
",", 
                                    RowBox[{"Visible", "->",
"False"}]}], 
                                  "]"}]}]}], "}"}], ",", "\n", 
                          "\t\t\t\t\t\t", 
                          RowBox[{
                            RowBox[{
                            "FrontEndTokenExecute", "[",
"\"\<CellSplit\>\"", 
                              "]"}], ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SelectionMove", "[", 
                              RowBox[{
                              "nb", ",", "Previous", ",",
"CellContents"}],

                              "]"}], ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"pretext", " ", "=", " ", 
                              RowBox[{"NotebookRead", "[", "nb",
"]"}]}], 
                            ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SelectionMove", "[", 
                              RowBox[{"nb", ",", "All", ",", "Cell"}],
"]"}], 
                            ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SetOptions", "[", 
                              RowBox[{
                                RowBox[{
                                "NotebookSelection", "[", "nb", "]"}],
",",

                                RowBox[{"CellTags", "->", 
                                  RowBox[{
                                  "{", "\"\<deletetext\>\"", "}"}]}]}], 
                              "]"}], ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SelectionMove", "[", 
                              RowBox[{
                              "nb", ",", "Next", ",", "CellContents"}], 
                              "]"}], ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"posttext", " ", "=", " ", 
                              RowBox[{"NotebookRead", "[", "nb",
"]"}]}], 
                            ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SelectionMove", "[", 
                              RowBox[{"nb", ",", "All", ",", "Cell"}],
"]"}], 
                            ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"SetOptions", "[", 
                              RowBox[{
                                RowBox[{
                                "NotebookSelection", "[", "nb", "]"}],
",",

                                RowBox[{"CellTags", "->", 
                                  RowBox[{
                                  "{", "\"\<deletetext\>\"", "}"}]}]}], 
                              "]"}], ";", "\n", "\t\t\t\t\t\t", 
                            RowBox[{"NotebookFind", "[", 
                              RowBox[{
                              "ref", ",", "\"\<markertype\>\"", ",",
"All",

                                ",", "CellTags"}], "]"}], ";", "\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"markertype", "=", 
                              RowBox[{"First", "[", 
                                RowBox[{"First", "[", 
                                  RowBox[{"NotebookRead", "[", "ref",
"]"}], 
                                  "]"}], "]"}]}], ";", "\n",
"\t\t\t\t\t\t", 
                            RowBox[{"NotebookFind", "[", 
                              RowBox[{
                              "ref", ",", "\"\<markervalue\>\"", ",",
"All", 
                                ",", "CellTags"}], "]"}], ";", "\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"markervalue", "=", 
                              RowBox[{"ToString", "[", 
                                RowBox[{"First", "[", 
                                  RowBox[{"First", "[", 
                                    RowBox[{
                                    "NotebookRead", "[", "ref", "]"}],
"]"}], 
                                  "]"}], "]"}]}], ";", "\n",
"\t\t\t\t\t\t", 
                            RowBox[{"mycmd", "=", 
                              RowBox[{"StringJoin", "[", 
                                RowBox[{
                                "\"\<CounterBox[\>\"", ",",
"markertype", 
                                  ",", "\"\<,\\\"\>\"", ",",
"markervalue",

                                  ",", "\"\<\\\"]\>\""}], "]"}]}], ";",
"\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"Which", "[", 
                              RowBox[{
                                RowBox[{
                                "markertype", "==", 
                                  "\"\<NumberedEquation\>\""}], ",",
"\n", 
                                "\t\t\t\t\t\t\t\t\t\t", 
                                RowBox[{"mystring", "=", 
                                  RowBox[{"TextData", "[", 
                                    RowBox[{
                                    "pretext", ",", "\"\<(\>\"", ",", 
                                      RowBox[{
                                      "ToExpression", "[", "mycmd",
"]"}], 
                                      ",", "\"\<) \>\"", ",",
"posttext"}],

                                    "]"}]}], ",", "\n",
"\t\t\t\t\t\t\t\t",

                                RowBox[{
                                "markertype", "==", "\"\<Section\>\""}],
",", 
                                "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                RowBox[{"mystring", "=", 
                                  RowBox[{"TextData", "[", 
                                    RowBox[{
                                    "pretext", ",", "\"\<Section \>\"",
",", 
                                      RowBox[{
                                      "ToExpression", "[", "mycmd",
"]"}], 
                                      ",", "\"\< \>\"", ",",
"posttext"}], 
                                    "]"}]}], ",", "\n",
"\t\t\t\t\t\t\t\t",

                                RowBox[{
                                "markertype", "==",
"\"\<Subsection\>\""}],

                                ",", "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                RowBox[{
                                  RowBox[{"mycmd1", "=", 
                                    RowBox[{"StringJoin", "[", 
                                      RowBox[{
                                      "\"\<CounterBox[\>\"", ",", 
                                        "\"\<Section\>\"", ",", 
                                        "\"\<,\\\"\>\"", ",",
"markervalue", 
                                        ",", "\"\<\\\"]\>\""}], "]"}]}],
";", 
                                  "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                  RowBox[{"mycmd2", "=", 
                                    RowBox[{"StringJoin", "[", 
                                      RowBox[{
                                      "\"\<CounterBox[\>\"", ",", 
                                        "\"\<Subsection\>\"", ",", 
                                        "\"\<,\\\"\>\"", ",",
"markervalue", 
                                        ",", "\"\<\\\"]\>\""}], "]"}]}],
";", 
                                  "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                  RowBox[{"mystring", "=", 
                                    RowBox[{"TextData", "[", 
                                      RowBox[{
                                      "pretext", ",", "\"\<Section
\>\"", 
                                        ",", 
                                        RowBox[{
                                        "ToExpression", "[", "mycmd1",
"]"}], 
                                        ",", "\"\<.\>\"", ",", 
                                        RowBox[{
                                        "ToExpression", "[", "mycmd2",
"]"}], 
                                        ",", "\"\< \>\"", ",",
"posttext"}], 
                                      "]"}]}]}], ",", "\n", 
                                "\t\t\t\t\t\t\t\t", 
                                RowBox[{
                                "markertype", "==", 
                                  "\"\<Subsubsection\>\""}], ",", "\n", 
                                "\t\t\t\t\t\t\t\t\t\t", 
                                RowBox[{
                                  RowBox[{"mycmd1", "=", 
                                    RowBox[{"StringJoin", "[", 
                                      RowBox[{
                                      "\"\<CounterBox[\>\"", ",", 
                                        "\"\<Section\>\"", ",", 
                                        "\"\<,\\\"\>\"", ",",
"markervalue", 
                                        ",", "\"\<\\\"]\>\""}], "]"}]}],
";", 
                                  "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                  RowBox[{"mycmd2", "=", 
                                    RowBox[{"StringJoin", "[", 
                                      RowBox[{
                                      "\"\<CounterBox[\>\"", ",", 
                                        "\"\<Subsection\>\"", ",", 
                                        "\"\<,\\\"\>\"", ",",
"markervalue", 
                                        ",", "\"\<\\\"]\>\""}], "]"}]}],
";", 
                                  "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                  RowBox[{"mycmd3", "=", 
                                    RowBox[{"StringJoin", "[", 
                                      RowBox[{
                                      "\"\<CounterBox[\>\"", ",", 
                                        "\"\<Subsubsection\>\"", ",", 
                                        "\"\<,\\\"\>\"", ",",
"markervalue", 
                                        ",", "\"\<\\\"]\>\""}], "]"}]}],
";", 
                                  "\n", "\t\t\t\t\t\t\t\t\t\t", 
                                  RowBox[{"mystring", "=", 
                                    RowBox[{"TextData", "[", 
                                      RowBox[{
                                      "pretext", ",", "\"\<Section
\>\"", 
                                        ",", 
                                        RowBox[{
                                        "ToExpression", "[", "mycmd1",
"]"}], 
                                        ",", "\"\<.\>\"", ",", 
                                        RowBox[{
                                        "ToExpression", "[", "mycmd2",
"]"}], 
                                        ",", "\"\<.\>\"", ",", 
                                        RowBox[{
                                        "ToExpression", "[", "mycmd3",
"]"}], 
                                        ",", "\"\< \>\"", ",",
"posttext"}], 
                                      "]"}]}]}]}], "]"}], ";", "\t",
"\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"CellPrint", "[", 
                              RowBox[{"Cell", "[", 
                                RowBox[{"mystring", ",",
"\"\<Text\>\""}], 
                                "]"}], "]"}], ";", "\n", "\t\t\t\t\t\t",

                            RowBox[{"NotebookFind", "[", 
                              RowBox[{
                              "nb", ",", "\"\<deletetext\>\"", ",",
"All", 
                                ",", "CellTags"}], "]"}], ";", "\n", 
                            "\t\t\t\t\t\t", 
                            RowBox[{"NotebookDelete", "[", "nb", "]"}],
";", 
                            "\n", "\t\t\t\t\t\t", 
                            RowBox[{"NotebookClose", "[", "ref", "]"}], 
                            ";"}]}], "\n", "\t\t\t", "]"}]}]}], "]"}],
"]"}], 
              ",", "\n", "\"\<Text\>\""}], "]"}], "]"}], ";"}]}]],
"Input"],

Cell[BoxData[GridBox[{
        {
          ButtonBox["SetReference",
            ButtonFunction:>Module[ {markervalue, markertype, 
                Set[ nb, 
                  SelectedNotebook[ ]], 
                Set[ ref, 
                  NotebookCreate[ Visible -> False]]}, 
                CompoundExpression[ 
                  Set[ result, 
                    Options[ 
                      NotebookSelection[ nb], CellTags]], 
                  If[ 
                    Greater[ 
                      Part[ 
                        Dimensions[ result], 1], 0], 
                    Set[ markervalue, 
                      ToExpression[ 
                        Part[ 
                          Part[ 
                            Part[ 
                              Part[ 
                                ToBoxes[ result], 1], 2], 1], 3]]], 
                    CompoundExpression[ 
                      Set[ markervalue, 
                        Random[ Real, {0, 1}, 20]], 
                      SetOptions[ 
                        NotebookSelection[ nb], CellTags -> {
                        markervalue}]]], 
                  Set[ markertype, 
                    Part[ 
                      NotebookRead[ nb], 2]], 
                  NotebookWrite[ ref, 
                    Cell[ 
                    markertype, "Output", CellTags -> {"markertype"}]], 
                  NotebookWrite[ ref, 
                    Cell[ 
                    markervalue, "Output", CellTags ->
{"markervalue"}]], 
                  NotebookSave[ ref, "/tmp/ActiveReference.nb"], 
                  NotebookClose[ ref], Null]],
            ButtonEvaluator->Automatic,
            Active->True], 
          ButtonBox["ReferenceIt",
            
            ButtonFunction:>
              Module[ {pretext, posttext, markertype, markervalue,
mycmd, 
                mystring, 
                Set[ nb, 
                  SelectedNotebook[ ]], 
                Set[ ref, 
                  NotebookOpen[ 
                  "/tmp/ActiveReference.nb", Visible -> False]]}, 
                CompoundExpression[ 
                  FrontEndTokenExecute[ "CellSplit"], 
                  SelectionMove[ nb, Previous, CellContents], 
                  Set[ pretext, 
                    NotebookRead[ nb]], 
                  SelectionMove[ nb, All, Cell], 
                  SetOptions[ 
                    NotebookSelection[ nb], CellTags -> {"deletetext"}],

                  SelectionMove[ nb, Next, CellContents], 
                  Set[ posttext, 
                    NotebookRead[ nb]], 
                  SelectionMove[ nb, All, Cell], 
                  SetOptions[ 
                    NotebookSelection[ nb], CellTags -> {"deletetext"}],

                  NotebookFind[ ref, "markertype", All, CellTags], 
                  Set[ markertype, 
                    First[ 
                      First[ 
                        NotebookRead[ ref]]]], 
                  NotebookFind[ ref, "markervalue", All, CellTags], 
                  Set[ markervalue, 
                    ToString[ 
                      First[ 
                        First[ 
                          NotebookRead[ ref]]]]], 
                  Set[ mycmd, 
                    StringJoin[ 
                    "CounterBox[", markertype, ",\"", markervalue,
"\"]"]],

                  Which[ 
                    Equal[ markertype, "NumberedEquation"], 
                    Set[ mystring, 
                      TextData[ pretext, "(", 
                        ToExpression[ mycmd], ") ", posttext]], 
                    Equal[ markertype, "Section"], 
                    Set[ mystring, 
                      TextData[ pretext, "Section ", 
                        ToExpression[ mycmd], " ", posttext]], 
                    Equal[ markertype, "Subsection"], 
                    CompoundExpression[ 
                      Set[ mycmd1, 
                        StringJoin[ 
                        "CounterBox[", "Section", ",\"", markervalue, 
                          "\"]"]], 
                      Set[ mycmd2, 
                        StringJoin[ 
                        "CounterBox[", "Subsection", ",\"", markervalue,

                          "\"]"]], 
                      Set[ mystring, 
                        TextData[ pretext, "Section ", 
                          ToExpression[ mycmd1], ".", 
                          ToExpression[ mycmd2], " ", posttext]]], 
                    Equal[ markertype, "Subsubsection"], 
                    CompoundExpression[ 
                      Set[ mycmd1, 
                        StringJoin[ 
                        "CounterBox[", "Section", ",\"", markervalue, 
                          "\"]"]], 
                      Set[ mycmd2, 
                        StringJoin[ 
                        "CounterBox[", "Subsection", ",\"", markervalue,

                          "\"]"]], 
                      Set[ mycmd3, 
                        StringJoin[ 
                        "CounterBox[", "Subsubsection", ",\"",
markervalue,

                          "\"]"]], 
                      Set[ mystring, 
                        TextData[ pretext, "Section ", 
                          ToExpression[ mycmd1], ".", 
                          ToExpression[ mycmd2], ".", 
                          ToExpression[ mycmd3], " ", posttext]]]], 
                  CellPrint[ 
                    Cell[ mystring, "Text"]], 
                  NotebookFind[ nb, "deletetext", All, CellTags], 
                  NotebookDelete[ nb], 
                  NotebookClose[ ref], Null]],
            ButtonEvaluator->Automatic,
            Active->True]}
        },
      RowSpacings->0,
      ColumnSpacings->0,
      GridFrame->True,
      GridDefaultElement:>ButtonBox[ "\\[Placeholder]"]]], "Input"] },
FrontEndVersion->"X 3.0",
ScreenRectangle->{{0, 1280}, {0, 1024}}, WindowSize->{731, 834},
WindowMargins->{{39, Automatic}, {5, Automatic}}, StyleDefinitions ->
"/home/don/thesis/mathematica/StyleSheets/thesis.nb" ]



  • Prev by Date: Re: Importing external grid file to do contour plot
  • Next by Date: Question about equations solutions?
  • Previous by thread: Re: Max of Concave List...And The Winner Is....
  • Next by thread: Question about equations solutions?