Re: Usage Messages in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg131311] Re: Usage Messages in Mathematica
- From: Simon <simon.rochester at gmail.com>
- Date: Thu, 27 Jun 2013 06:31:14 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <20121227100447.E595B6866@smc.vnet.net> <20121228103623.75A716873@smc.vnet.net>
I think I've got a solution to this problem (I've also posted this over on Stack Exchange Mathematica):
During evaluation, Information[symbol] and ?symbol both call a function System`Dump`fixmessagestring, with definition
System`Dump`fixmessagestring[System`Dump`s_] :=
"\""<>StringReplace[System`Dump`s,{"\n"->"\\n","\\"->"\\\\","\""->"\\\""}]<>"\""
If one redefines this function, by evaluating
System`Dump`fixmessagestring[System`Dump`s_] := ToString@InputForm@System`Dump`s
it appears to accomplish the same task, but without screwing up user-defined usage messages. I've checked this in Mathematica versions 6, 7, and 8, but not version 9.
So far I haven't seen any negative side effects as a result of this redefinition. I would be very interested if anybody finds a reason not to make this change.
-Simon Rochester
On Saturday, December 29, 2012 7:24:51 PM UTC-8, Murray Eisenberg wrote:
> Same thing on my Mac OS X installation of Mathematica 9. (Quotes the
>
> first time in output from ?f, not thereafter.)
>
>
>
> On the other hand, of course, simply evaluating f::usage produces output
>
> with no quotes.
>
>
>
> On Dec 29, 2012, at 3:13 PM, djmpark <djmpark at comcast.net> wrote:
>
>
>
> > No, on my system (M9, Windows 7) the first time
>
> >
>
> > ?f
>
> >
>
> > is evaluated I obtain a usage message with quotes around it. If the same
>
> > statement is evaluated again the quotes go away. Of course, it is the first
>
> > evaluation that the user will see.
>
> >
>
> >
>
> > David Park
>
> > djmpark at comcast.net
>
> > http://home.comcast.net/~djmpark/index.html
>
> >
>
> >
>
> >
>
> > From: Bob Hanlon [mailto:hanlonr357 at gmail.com]
>
> >
>
> >
>
> > Using both Format and usage messages seems to work.
>
> >
>
> > Clear[f];
>
> > Format[f[n_, x_]]:=
>
> > Subscript[f, n][x];
>
> > f::usage="f[n, x] gives " <>
>
> > ToString[f[n, x], StandardForm]<>".";
>
> >
>
> > f::usage
>
> >
>
> > f[n, x]
>
> >
>
> > f[n, x]//TraditionalForm
>
> >
>
> > Clear[g];
>
> > Format[g[n_, a_, x_]]:=
>
> > Power[Subscript[g, n], a][x];
>
> > g::usage="g[n, a, x] gives " <>
>
> > ToString[g[n, a, x], StandardForm]<>".";
>
> >
>
> > g::usage
>
> >
>
> > g[n, a, x]
>
> >
>
> > g[n, a, x]//TraditionalForm
>
> >
>
> >
>
> > Bob Hanlon
>
> >
>
> >
>
> > On Fri, Dec 28, 2012 at 5:36 AM, Murray Eisenberg =
>
> <murray at math.umass.edu>
>
> > wrote:
>
> >> And yet usage messages for built-in objects seem to handle in-line
>
> >> expressions and subscripts with aplomb. See, for example:
>
> >>
>
> >> Subscript::usage
>
> >>
>
> >>
>
> >> On Dec 27, 2012, at 5:04 AM, djmpark <djmpark at comcast.net> wrote:
>
> >>
>
> >>> An extremely weak features of Mathematica is the design of Usage
>
> >>> messages, which seems to be stuck at Version 1, although the
>
> >>> technology has moved far beyond that.
>
> >>>
>
> >>> The present design is not up to the task and full of gotchas. For
>
> >>> example, how does one include a box structure, for example a
>
> >>> subscripted symbol, within a usage message? If one just enters a
>
> >>> subscript then the first time the message is displayed there are
>
> >>> quotes around it and the second time the quotes go away. If one
>
> >>> starts an InlineCell within the string and enters the expression then
>
> >>> that problem goes away. If one then moves the usage definition to a
>
> >>> package and Runs the package it works OK. But if one saves and closes
>
> >>> the package, quits the kernel and then reinitializes, loading the
>
> >>> package, the usage message is defective giving the InputForm of the
>
> >>> box expression. Mathematica parses and changes the usage messages when
>
> > the file is read.
>
> >>>
>
> >>> The String form is just not adequate for usage messages. Nor is it
>
> >>> adequate to contain information on overloading functions. Usage
>
> >>> definitions should be expressions. Something like the following:
>
> >>>
>
> >>> Usage[FunctionName] = {{template, usageExpression}..}
>
> >>>
>
> >>> (The usageExpression might be a Row containing Strings and
>
> >>> mathematical expressions.)...
>
> >>
>
> >> ---
>
> >> Murray Eisenberg murray at math.umass.edu
>
> >> Mathematics & Statistics Dept.
>
> >> Lederle Graduate Research Tower phone 413 549-1020 (H)
>
> >> University of Massachusetts 413 545-2838 (W)
>
> >> 710 North Pleasant Street fax 413 545-1801
>
> >> Amherst, MA 01003-9305
>
> >>
>
> >>
>
> >>
>
> >>
>
> >>
>
> >>
>
> >
>
>
>
> ---
>
> Murray Eisenberg murray at math.umass.edu
>
> Mathematics & Statistics Dept.
>
> Lederle Graduate Research Tower phone 413 549-1020 (H)
>
> University of Massachusetts 413 545-2838 (W)
>
> 710 North Pleasant Street fax 413 545-1801
>
> Amherst, MA 01003-9305