# [texhax] choice of documentstyle upon \jobname

Reinhard Kotucha reinhard.kotucha at web.de
Sun Dec 4 03:44:33 CET 2005

Hi,
I got the following mail from Susan.  Though it is usually impolite to
put private mails on mailing lists, I think that the question is
interesting enough to be discussed here.

But the main reason I answer to this list is that I'm not sure that
everything I say is correct.  On a mailing list I can make mistakes
and can be sure that people correct me if necessary.

>>>>> "Susan" == Susan Dittmar <S.Dittmar at eureca.de> writes:

>> \expandafter\def\csname first\endcsname{\documentclass[abc]{...}}
>> \expandafter\def\csname second\endcsname{\documentclass[xyz]{...}}

> Is it true that, in the case where first and second are completely
> composed of letters which TeX accepts for command name, that's
> equivalent to
> \def\first{\documentclass...}
> \def\second{\documentclass...}  ?

Maybe not equivalent, but at least similar.

\csname\jobname\endcsname you can better write
\csname\jobname:-)\endcsname to avoid name clashes.

You can't do it with \def so easy.  \csname...\endcsname allows you to
define "private" macros which you cannot access accidentally.

Indeed you can say \def\foo{...} or \newcommand{\foo}{...} and can
either use this macro directly (\foo) or you can say
\csname foo\endcsname.

In latex it's easier to use \@namedef and \@nameuse.

There is one important difference between \foo and \csname foo\endcsname
(or \@nameuse{foo}):

If \foo is undefined you get an error message if you say \foo, while
\csname foo\endcsname doesn't complain if \foo doesn't exist.

You might wonder what this is good for.

I assume that you are working on a larger project which will not be
finished soon.  So please put this into the preamble of your
document:

\expandafter\def\csname12:24\endcsname{\typeout{Merry Xmas!}}
\expandafter\def\csname1:1\endcsname{\typeout{Happy new year!}}

\csname\number\month:\number\day\endcsname

or

\makeatletter
\@namedef{12:24}{\typeout{Merry Xmas!}}
\@namedef{1:1}{\typeout{Happy new year!}}

\@nameuse{\number\month:\number\day}
\makeatother

It is a good exercise to find out why \expandafter is needed in the
first example.  See "TeX by Topics".

Regards,
Reinhard

--
----------------------------------------------------------------------------
Reinhard Kotucha			              Phone: +49-511-4592165
Marschnerstr. 25
D-30167 Hannover	                      mailto:reinhard.kotucha at web.de
----------------------------------------------------------------------------
Microsoft isn't the answer. Microsoft is the question, and the answer is NO.
----------------------------------------------------------------------------