Hans, after your explanation I'm actually curious now about details, but my knowledge is too limited now (maybe reading source codes would be better? Worse?). I do a bit of C, but I don't know about Pascal at all and I'm not sure where to start from in order to understand TeX better. Well, at least I know why that feature isn't supported. I'll be thankful for any references. Thank you very much.

Jairo :)

El lun., 29 de jun. de 2020 a la(s) 02:28, Hans Hagen (j.hagen@xs4all.nl) escribió:
On 6/28/2020 10:48 PM, Jairo A. del Rio wrote:
> I've read the following is not possible in TeX
>
> \def#1\macro{blabla#1}
>
> where arguments come before. The only partial exceptions are commands
> like \atop or \over, which are in fact primitives. Is there a way to do
> this in ConTeXt?
>
> Could it be a feature request for LuaMetaTeX? I've seen Hans
> experimenting a lot with new primitives and new possibilities for
> arguments, like #0 and co., so I ask in case it's not too nonsensical to
> propose it. Regards
Every \foo will be looked up, so by the time \macro in:

   bla bla {\bf xxx}\macro{xxx}

is seen, the {\bf xxx} is already passed and processed. TeX never looks
back, which actually would make for a pretty complex multipass parsing
and expansion management (forward control and backward: \expandafter
would then also have an \expandbefore companion). Even in the simple
case: should it keep track of quantities done (grouped, single token,
box, etc.) and then in retrospect see it as #1 (them being nodes by now
and not tokens)?

So, why in math but not in text? The \atop and \over (those are
basically all the same command but with a different treatment
afterwards) are an exception: (1) tex knows that is is in math mode, and
in math mode the { } are not really arguments but defines some stuff
handled together. Much processing (not all) is delayed to a second pass,
so {1}\over{2} internally becomes \over{1}{2} and even that is kind of
tricky because there are math styles involved (which makes for some hard
coded behaviour that in the perspective of luametatex i try to get more
grip on). Now, in order to handle this one (!) exception to lookahead
parsing, special tracking happens in math mode, the previous math
grouped stuff is registered and adapted to the \over when seen,
otherwise it stays as is. This exception also maked the code somewhat
messier because there are several spots where it has to be dealt with
(also think of saving and restoring states). Just imagine that there
were more such commands. Believe me, you really don't want to know the
details.

So the answer is "Can't be done without overhauling the whole concept".

Now, I know that the narrative is that context is a moving target
(contrary to other macro packages that don't / can't change because
users / publishers expect them to behave the same forever) so one can
argue that for context we can follow a drastic different route, but even
then, we can't shoot ourselves in the foot too often. I know that some
people (read: Alan) love these {{}\foo{}} syntaxes but live would have
been simpler if even \over has not be in there with prefix notation
(there is a reason why macro package have \frac like variants).

Hans



-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------