[texhax] conditional macros

Ross Moore ross at ics.mq.edu.au
Thu Apr 29 04:33:24 CEST 2004


Hi Barry,

On 29/04/2004, at 11:59 AM, Barry Dale wrote:

> Of course...
>   Thanks :-)

You're welcome.

But of course I didn't tell the whole story.

>> e.g.
>>    \newcommand{\FigureOne}{... whatever you want ....
>>      \renewcommand{\FigureOne}{}}

   This only works if the first usage of \FigureOne
occurs at the outer paragraphing level.

Most likely you will have various environments,
perhaps even floats: figures, tables, etc.
or  minipages, in which you might use \FigureOne .
In this case, the \renewcommand re-definition will
be lost as you exit that environment (grouping-level).


Thus a better solution is to use TeX's \gdef :

\newcommand{\FigureOne}{... whatever you want ....
    \gdef\FigureOne{}}

This makes a `global' redefinition that should then
work in all normal situations...


  ... but *do not* use such self-redefining macros
within any moveable arguments:
   section-names, figure-captions, index-entries, etc.
where stuff gets written into auxiliary files, to be
re-read at a different time in the processing.
Can you imagine the sort of things that might then occur?


Best of luck with this,

	Ross


>
> -- 
> Barry Dale
> Technical Writer
> M-Tech Information Technology Inc.
> http://mtechIT.com http://psynch.com http://idsynch.com
> --------------------------------------------
>
> On Thu, 29 Apr 2004, Ross Moore wrote:
>
>>
>> On 29/04/2004, at 10:27 AM, Barry Dale wrote:
>>
>>> I seem to recall a discussion on this list recently about printing
>>> terms in text in bold the first time they are used in a document, 
>>> then
>>> in normal font after that. I think the solution involved ifthen
>>> commands.
>>>
>>> I have a similar situation. I use macros to insert boilerplate
>>> responses to submitted questionaires. The macros can include 
>>> graphics,
>>> and can be used more than once. I would like the graphics to be
>>> used only once (to save space and avoid multiple labels).
>>>
>>> Is there a way to check if a macro has already been used, and
>>> treat it differently on subsequent uses?
>>
>> Yes, this is easy to do.
>> Just make the macro redefine itself after the first usage.
>>
>>>
>>> In other words, the macro  \AnswerOne may be defined as:
>>>   \AnswerOne{%
>>>     text
>>>     text
>>>     \FigureOne{}
>>>     }%
>>>
>>> so that \FigureOne is expanded the first time but empty on subsequent
>>> uses.
>>
>> e.g.
>>    \newcommand{\FigureOne}{... whatever you want ....
>>      \renewcommand{\FigureOne}{}}
>>
>>>
>>> I'm familiar with basic LaTeX, but I'm not a programmer, so the
>>> ifthen documentation is a little daunting. Sorry if it seems obvious.
>>
>>
>> Easy, but not completely obvious.  :-)
>>
>> Hope this helps,
>>
>> 	Ross Moore
>>
------------------------------------------------------------------------
Ross Moore                                         ross at maths.mq.edu.au
Mathematics Department                             office: E7A-419
Macquarie University                               tel: +61 +2 9850 8955
Sydney, Australia                                  fax: +61 +2 9850 8114
------------------------------------------------------------------------



More information about the texhax mailing list