In GELLMU the command newcommand is a meta-command that is handled by macro-like pre-processing in the GELLMU syntactic translator. This pre-processing takes place very early after the processing of the required meta-command documenttype and after the insertion of any (relatively rare) internal SGML declaration subset.
The markup for the field of rational numbers is a newcommand invocation “\Q” without arguments that expands to “\regch{\bold{Q}}”.1 Newcommand names are case-sensitive. Here the newcommand invocation “\q” expands to “\regch{\slnt{Q}}”, which yields the ad-hoc math symbol .
Markup to represent the general linear group may be a newcommand with definition
| \newcommand{\gl}[2][2]{\mbox{GL}_{#1}(#2)} . |
When invoked with “\gl{3}{F}”, it yields .
Mention of the group is obtained alternatively here with the minimized markup invocation “\gl{F}” relying on the default value of the first argument given in the definition of “\gl”.
With the newcommand definition
| \newcommand{\Q}{\regch{\bold{Q}}} |
the markup \Q; may always be used instead of \Q and must be used if the is followed immediately by characters that could have the effect of making the ‘Q’ in the markup look simply like the first character in a larger string. However, the markup \Q;{} is incorrect unless regch is a command that takes two arguments. For it expands to
| \regch{\bold{Q}}{} . |
What characters can safely follow the name of a newcommand? Of course, a following ‘{’ can only mean the beginning of an argument to the command. On the other hand the ‘{’ can be escaped.
Some examples:
| Markup | Yield |
| $\Q$ | |
| $\Q;xy$ | |
| $\Q;$xy | xy |
| $\Q;;$ | |
| $\Q;$; | ; |
| $\Q\bsl;$ | |
| $\Q\{$ | |
| $\Q\}$ | |
| $\Q\lsb;$ | |
| $\Q\rsb;$ | |
| $\Q!$ | |
| $\Q@$ | |
| $\Q\#$ | |
| $\Q\%$ | |
| $\Q^5$ | |
| $\Q_p$ | |
| $\Q\und;$ | |
| $\Q\crt;$ | |
| $\Q*$ | |
| $\Q-$ | |
| $\Q(t)$ | |
| $\Q+$ | |
| $\Q=$ | |
| $\Q$= | = |
| $\Q,$ | |
| $\Q.$ | |
| $\Q?$ |
It is useful here to comment on GELLMU, which is a bridge from LaTeX to SGML, as it compares to LaTeX. LaTeX usage of newcommand sometimes takes the form
| \newcommand{\foo}[2]{% |
| This is an instance of the \emph{newcommand} ``foo'' % |
| with first argument `#1' and% Space following a newline is swallowed |
| second argument `#2'.} |
This usage is useful in that it gives the author a way, especially with empty comments, to make the source document more readable.
With GELLMU as a general matter such use of comments in regular command arguments may have side effects if the author is not careful. Because newcommand is a meta-command handled by the GELLMU syntactic translator, this use of comments will not have side effects.
Since newcommand in GELLMU is a meta-command, it is not necessary to restrict an instance of newcommand to a document preamble. However, any invocation of a command defined with newcommand must be preceded by the definition.
The definition of \foo appears in this document just before the display of its definition, and the next sentence is the invocation “\foo{cat}{dog}”. This is an instance of the newcommand ‘‘foo’’ with first argument `cat' andsecond argument `dog'.
Note that the comment “Space following …” on the second line of the value string absorbs the space at the beginning of the third line with the result that the words and and second are run together. This phenomenon mimics LaTeX; however, such comment “overrun” is the behavior of the GELLMU syntactic translator only inside a newcommand value string. In all other contexts there is no comment overrun in GELLMU, and space at the beginning of a line following a comment is significant.
It is important to note, however, that anything inside the value argument of a newcommand definition is propogated by the GELLMU syntactic translator to every invocation. With basic GELLMU newlines inside a newcommand value string are removed since SGML does not acknowledge a newline as a special form of white space and since newlines in a value string, when propogated to all invocations cause extra lines in the GELLMU syntactic translator output, thereby blocking the goal of line number alignment between GELLMU source and the SGML output, which is important for the interpretation of SGML parser error messages.
In regular GELLMU, newlines can be significant. For this reason newlines in newcommand definitions are not removed. However, the use of newlines inside value strings is deprecated since they break line number alignment between the GELLMU source and the output of the GELLMU syntactic translator. There are other ways to achieve the effect of a newline inside a newcommand value string.