Many thanks Gary. Is there any way to restrict the `options' macro to
contain only elements allowed by -graph-? My worry is that the
wildcard [ * ] would collect any user input and could generate an
error message at the end of the program.
Best,
Bert
On Mon, Feb 23, 2009 at 5:12 PM, Gary Longton <[email protected]> wrote:
> Bert Jung wrote:
>>
>> I am writing a program that customizes a graph. I want the common
>> -graph- options to be available in my program, but override some of
>> them with settings that I define in the program itself. I am looking
>> for a way to access and change some of the allowed -graph- options
>> inside my program.
>>
>> In the below example, if the user does not specify the option - ,
>> xtitle() - the program assigns a default value. I can implement this
>> by specifying my own option xtitle() in the syntax and then
>> substituting the content of the `xtitle' macro. But there must be a
>> better way to access all those options than listing them in the
>> syntax?
>
> The easiest approach to passing user-specified graph options from your
> program to an included graph command is to use the wild card [*] option.
> Any and all user specified options that are not otherwise explicitly
> included in your syntax command are consequently placed in the `options'
> macro. This macro can then be included in (usually at the end of) your
> graph/scatter command.
> Whether you additionally include specific options in your ado syntax command
> in order to test for a user override or not will depend on the type of graph
> option.
>
> (see -help repeated options- or [G] concept: repeated options)
>
> If it is a *rightmost*, or *merged-explicit* option, then you don't need to
> worry about testing for the presence of the option in your program syntax.
> By including the `options' macro at the end of the scatter/graph command,
> the first instance of the option, if it exists, will be ignored (or merged
> if there are otherwise unspecified suboptions included in the first instance
> of the option).
>
> For example, xtitle() is merged-explicit. Since you want a) to provide your
> own default title, and b) allow for a user overide of your default, your
> example could be more simply coded as follows:
>
> ************************
> ** Example for xtitle
>
> sysuse auto, clear
>
> cap program drop mygraph
> program mygraph
> syntax varlist(min=2 max=2), [ * ]
> scatter `varlist', xtitle("default title") `options'
> end
>
> * Graph with default xtitle
> mygraph weight mpg
>
> * Graph with user-specified xtitle
> mygraph weight mpg, xtitle("user specified xtitle")
>
> ************************
>
> If you wish to include a program defined default for an *unique* option (eg.
> saving()) , you will probably want to explicitly include the option in you
> syntax as you did in your example, so as to include only one instance of the
> option in your -graph- call. Unique options specified more than once in a
> graph command will return an error.
>
>
> - Gary
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/