Print

Print


Michael John Downes wrote

>[...] I have a
>variable, let us pretend that it is called \g_parindent, that is
>supposed to have a "global" value that prevails throughout an entire
>document. But it is not "constant" because it is OK for the
>documentclass to change this variable, or it might be changed
>"globally" for some subdocument context such as a footnote, a float,
>or an appendix.
>
>And there is a companion variable \l_parindent that is the
>current value of this parameter for the current local context.
>However---and here is the problem---because of the way that this
>variable is used, \l_parindent must sometimes be assigned globally.
>So the "l" access specifier appears to be wrong.

In fact, both g and l specifiers are wrong, because TeX lacks
the concept of variable scope. Only *assignments* are local
or global and a certain macro is assigned globally or locally
depending on the context. (That makes \global different to \outer
and \long, as you can see in the p 210 of the TeXbook.)

>I guess the best approach would be to use "g" for both forms of the
>variable and use the description part of the name to indicate their
>relative meaning:

The best approach is not to believe that TeX is ModulaX or Java -- just
let's TeX be TeX. \parindent is always the current \parindent, except
you may reassign its value locally. Simple and efficient, isn't it?
(Interestingly l3 "functions", regardless that could mean, have no
scope specifiers. Perhaps because functions are not nested in C or
Java?)

>
>  \g_master_parindent
>  \g_cur_parindent
>
>or something along those lines.

And don't forget the intermediate levels when you write a footnote in
a minipage in a float in an appendix in a document! ;-)

>So I think the "C" should be discarded, leaving c l g R L G.

I think all of them should be discarded.

Javier