On 7 January 2018 at 21:34, Joseph Wright
<joseph.wri...@morningstar2.co.uk> wrote:
> Hello,
>
> Testing out how \lastnamedcs and \begincsname behave for some LaTeX kernel
> work, the following has come up:
>
> \def\test#1{%
>   \expandafter\def\csname #1\endcsname{abc}
>   \message{\begincsname #1\endcsname}}
> \test{x}
> \test{y}
> \test{}
>
> \expandafter\let\expandafter\x\csname abc\endcsname
> \show\x
> \expandafter\show\lastnamedcs a
>
> \expandafter\let\expandafter\x\csname hbox\endcsname
> \show\x
> \expandafter\show\lastnamedcs b
>
>
> \expandafter\let\expandafter\x\csname\endcsname
> \show\x
> \expandafter\show\lastnamedcs c
>
> \end
>
> As you'll see, with an empty csname, both \lastnamedcs and \begincsname give
> (possibly) surprising results. Is this by-design?
>
> Joseph

Another example, the luatex manual, when introducing \lastnamedcs
indicates that the constructs \usea and \useb below are equivalent,
\useb (using \lastnamedcs) is noticeably quicker, but they are not
equivalent and the extra tests that #1 is empty and if so falling back
on a test of \csname\endcsname complicate the macro coding and use up
much of the speed differences.

Should not \lastnamedcs expand to the token with empty csname after
\csname\endcsname ?

David



\def\defn#1{\expandafter\def\csname#1\endcsname}

\def\usea#1{%
\ifcsname#1\endcsname
  \csname#1\endcsname
\fi}

\def\useb#1{%
\ifcsname#1\endcsname
  \lastnamedcs
\fi}



\defn{abc}{hello}

a:\usea{abc}

b:\useb{abc}

but

\defn{}{???}

a: \usea{}

b: \useb{}



\bye

Reply via email to