Open main menu

System Macros/Definitions and Assignments

< Prev: Handling Arguments | Top: System Macros | Next: Branches & Decisions >

TeX's primitive \csname can be used to construct all kind of commands that cannot be defined with \def and \let. Every macro programmer sooner or later wants macros like these.

\setvalue   {name}{...} = \def\name{...}
\setgvalue  {name}{...} = \gdef\name{...}
\setevalue  {name}{...} = \edef\name{...}
\setxvalue  {name}{...} = \xdef\name{...}
\letvalue   {name}=\... = \let\name=\...
\getvalue   {name}      = \name
\resetvalue {name}      = \def\name{}

As we will see, ConTeXt uses these commands many times, which is mainly due to its object oriented and parameter driven character.

The macro \strippedcsname can be very useful when using \csname like in:

\csname if\strippedcsname\something\endcsname

This expands to \ifsomething.

Setups can be optional. A command expecting a setup is prefixed by \complex, a command without one gets the prefix \simple. Commands like this can be defined by:

\complexorsimple\command

When \command is followed by a [setup], then

\complexcommand [setup]

executes, else we get

\simplecommand

An alternative for \complexorsimple is:

\complexorsimpleempty {command}

Depending on the presence of [setup], this one leads to one of:

\complexcommando [setup]
\complexcommando []

Many ConTeXt commands started as complex or simple ones, but changed into more versatile (more object oriented) ones using the \get...argument commands later in their existence.

The previous commands are used so often that we found it worthwhile to offer two more alternatives.

These commands are called as:

\definecomplexorsimple\command

Of course, we must have available

\def\complexcommand[#1]{...}
\def\simplecommand {...}

Using this construction saves a few strings now and then.

We won't go into details here, but the general form for using this command is:

\definestartstopcommand\somecommand\e!specifier{arg}{arg}%
  {do something with arg}

This expands to something like:

\def\somecommand arg \startspecifier arg \stopspecifier%
  {do something with arg}

The arguments can be anything reasonable, but double #'s are needed in the specification part, like:

\definestartstopcommand\somecommand\e!specifier{[##1][##2]}{##3}%
  {do #1 something #2 with #3 arg}

which becomes:

\def\somecommand[#1][#2]\startspecifier#3\stopspecifier%
  {do #1 something #2 with #3 arg}

Actually, this macro is never used in ConTeXt, but it used to be part of constructions like \placeformula.

< Prev: Handling Arguments | Top: System Macros | Next: Branches & Decisions >