Node:ATN_, Next:ATn, Previous:ATm, Up:AT commands
@N
: Turn on N modeThis command must appear before the code part. Generally, this
means immediately before @a
. Do not use this command in
limbo; use @Lv
instead.
The N mode invokes language-independent behavior within the scope of
a particular language. The scoping rules are the same as for language
changes; i.e., using @N
within a given section produces
language-independent behavior for that section and for any modules first
referenced in that section.
Fundamentally, language-independent behavior essentially means a literal
transcription of the input to the output. For example, it inhibits
blank compression by FTANGLE and tells FWEAVE to turn off
"pretty-printing" (instead, the output is printed in typewriter type
within a \begin{verbatim}...\end{verbatim}
environment).
There are some subtleties with this mode (not to mention the likelihood of bugs):
@!
before the
identifier. For example,
@ @m A 1 @N @a @!A = A;
expands to A = 1
.
@*
or denoting the start of the next section. If
that were preceded by one or more blank lines, those would show up in
both the tangled and woven output. They might or might not be
significant in the tangled output, but they almost certainly will look
ugly in the woven output. To avoid this, use the command @%%
,
which deletes the remainder of the current line and all immediately
following empty lines. For example,
@ @N @a x;@%% @ Next section.
@+
.
@N
the first time
the name is seen, if it is ever to be within such scope. Thus, the
following does not work properly:
@ Consider the module @<Test@>. (Not yet within scope of \.{@N}.) @N @a x; @<Test@>@; y;
What happens is that the N mode is not restored after the code-part use
of @<Test@>
. This is a bug. There are very tricky design
issues to be dealt with here.