Re: Readability confuses mathematica?
- To: mathgroup at smc.vnet.net
- Subject: [mg44630] Re: Readability confuses mathematica?
- From: "Steve Luttrell" <luttrell at _removemefirst_westmal.demon.co.uk>
- Date: Tue, 18 Nov 2003 06:42:01 -0500 (EST)
- References: <p05200f03bbda31b43753@[192.168.0.101]> <bp4ja8$b6l$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Are you using the Notation palette? I find that Symbolize is likely to fail to work correctly UNLESS I use the Notation palette. -- Steve Luttrell West Malvern, UK "Andrzej Kozlowski" <akoz at mimuw.edu.pl> wrote in message news:bp4ja8$b6l$1 at smc.vnet.net... > I am afraid it is not going to be that simple. It seems that my > repeated attempts to use Symbolize caused me to enter the > NotationBoxTag wrapper twice, but this is a red herring and has nothing > to do with the problem. (It is actually rather unlikely that I would > have the habit of entering this tag twice. It was just one of those > unlikely coincidences that keep happening, that when I decide to post > the error to the MathGroup this kind of thing happens which obscures > the whole problem.) > > In any case, the point is that with only a fresh kernel and only the > following input: > > In[1]:= > <<Utilities`Notation` > > In[2]:= > Cell[BoxData[ > RowBox[{"Symbolize", "[", > TagBox[ > SubscriptBox["x", "_"], > NotationBoxTag, > TagStyle->"NotationTemplateStyle"], "]"}]], "Input", > CellLabel->"In[2]:="] > > whcih you can now see is quite correct I still get: > > > In[3]:= > \!\(f[\(x\_1\) : _] := x\_1\^2\) > > From In[3]:= > \!\(\*FormBox[ > RowBox[{\(Syntax::"sntxf"\), \(\(:\)\(\ \)\), \ > "\<\"\\\"\\!\\(TraditionalForm\\`\\(f[\\)\\)\\\" cannot be > followed by \\\"\\!\\(TraditionalForm\\`\\(\\(\\(x\\_1 : > _\\)\\)]\\)\\)\ > \\\".\\!\\(TraditionalForm\\`\\\"\\\"\\) > \\!\\(\\*ButtonBox[\\\"More.\\\", \ > ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \ > ButtonData:>\\\"General::sntxf\\\"]\\)\"\>"}], TraditionalForm]\) > > From In[3]:= > \!\(\* > StyleBox[ > RowBox[{ > RowBox[{"f", "[", > ErrorBox[\(\(x\_1\) : _\)], "]"}], ":=", \(x\_1\^2\)}], > ShowStringCharacters->True]\) > > Andrzej > > > On 14 Nov 2003, at 16:23, Jason Harris wrote: > > > Hi Andrzej, > > > > [Notation example snipped] > > > >> On my system this example just fails miserabley (the > >> definiton of transmissionCoefficient does not parse) although it once > >> used to work. (Actually, I would like to hear from other people, > >> because either the Notation package is no longer working or something > >> is wrong with my installation). > > > > I know these things can appear frustrating at times, but the Notation > > package is working fine. In the example you have given, you have > > managed to include the box wrapper twice in your Symbolize statement. > > (You likely did this through copying the k subscript including box > > wrapper and pasted it into a new Symbolize statement.) > > > > > >> Anyway, if this works on your system than the problem is solved. You > >> can symbolize subscripted variables and use them as if they were > >> symbols. On the other hand, in the past, when this package used to > >> work > >> on my system, I got myself into a huge mess when I tried to evaluate > >> again a notebook that had previously worked correctly. > > > > If there is some notebook corruption going on then we definitely want > > to know about this. In the example you have given it is extremely > > likely that you inadvertently caused the error with a copy and paste > > from one symbolize statement to another. (I know notation statements > > can be tricky and it is not all that hard to "hang yourself".) > > > > > >> Because of that I finally decided that relying on a package like > >> this is > >> just too risky if you are doing any serious work. > > > > Hmm... Actually I personally think its just the opposite. If you are > > really doing serious work you need to know about typesetting and how > > to enter expressions in notations which are familiar to > > Mathematicians, physicists, and other users and have these notations > > function correctly. > > > > First a general comment: > > When you are troubleshooting problems with setting up notations it is > > often necessary to look at the underlying boxes representing the > > typeset expression. You can do this through either the command key > > shortcut of cmd-shift-E (OSX) and I think cntrl-shift-E (Win), or > > through the menu item "Format" -> "Show Expression..." > > > > Looking at the underlying boxes shows you how the typeset expression > > is represented. As a Mathematica programmer you no doubt use FullForm > > at times to examine how a certain pattern is structured. Its really > > not too different with typesetting in that Mathematica functions > > through > > MakeBoxes and MakeExpression which operate on these box structures. If > > you don't have the correct structures, the boxes will not be > > interpreted as they should be. > > > > In a Symbolize statement waiting to be filled in the underlying > > structure is > > > > Cell[BoxData[ > > RowBox[{"Symbolize", "[", > > TagBox["\[Placeholder]", > > NotationBoxTag, > > TagStyle->"NotationTemplateStyle"], "]"}]], "Input"] > > > > To see this load the notation package, type Esc-symb-Esc and then show > > the underlying expression. The box structure to be symbolized must be > > the first argument of this TagBox. > > > > The tag box wrapper, NotationBoxTag, is necessary so you can enter > > typeset expressions into Mathematica that are not currently > > syntactically valid. Then once the Notation package gets a hold of > > them, it compiles / translates these into corresponding rules for > > MakeExpression and MakeBoxes that do what you instructed. The tag box > > wrapper inertizes the box structure so it becomes syntactically valid > > Mathematica input. > > > > You can see this by copying out the box wrapper into a new cell and > > entering some syntactically invalid input into the wrapper, say "x" > > followed by "*", and then viewing how it is interpreted by > > Mathematica. E.g. after loading the notation package paste the > > following cell into Mathematica and interpret it: > > > > Cell[BoxData[ > > TagBox[ > > RowBox[{"x", "*"}], > > NotationBoxTag, > > TagStyle->"NotationTemplateStyle"]], "Input"] > > > > Then evaluate this interpreted cell. Then start a new cell and > > evaluate FullForm[%]. The answer will be > > > > NotationBoxTag[RowBox[List["x", "*"]]] > > > > Thus the TagBox wrapper, NotationBoxTag, has allowed us to enter > > something that is syntactically invalid and get the box structure into > > the kernel. (Incidentally you can programmatically create symbolize > > and notation statements this way.) The TagBox wrapper NotationBoxTag > > can do this miraculous feat because it itself has a corresponding > > notation. (The TagStyle option is set so you can get some visual > > indication of where these tag box wrappers occur.) > > > > So anyway getting back to your example if you look at the underlying > > boxes you will see that instead of having > > > > Cell[BoxData[ > > RowBox[{"Symbolize", "[", > > TagBox[ > > SubscriptBox["k", "_"], > > NotationBoxTag, > > TagStyle->"NotationTemplateStyle"], "]"}]], "Input"] > > > > You had > > > > Cell[BoxData[ > > RowBox[{"Symbolize", "[", > > TagBox[ > > TagBox[ > > SubscriptBox["k", "_"], > > NotationBoxTag, > > TagStyle->"NotationTemplateStyle"], > > NotationBoxTag, > > TagStyle->"NotationTemplateStyle"], "]"}]], "Input"] > > > > i.e. the wrapper was in there twice. Fixing this mistake resolves your > > problem. > > > > Cheers, > > Jason > > > > ------------- > > Jason Harris > > Wolfram Research > > > > > Andrzej Kozlowski > Yokohama, Japan > http://www.mimuw.edu.pl/~akoz/ >