On Tue, 4 Sep 2012, Marco Patzer wrote:

Hi,

please have a look at the following example:

\starttext

\def\cmd{%
 \def\mymacro{Foobar}
 \newtoks\mytoks
 \mytoks={mytoks}}

\startluacode
 context.cmd()
 context.mymacro()
 -- this fails
 -- context(tex.toks.mytoks)
\stopluacode

-- this works
\startluacode
 context(tex.toks.mytoks)
\stopluacode

\stoptext

Why does the first call to tex.toks.mytoks fail?

Apparently the luacode environment has to be closed for cmd to be
expanded. I guess that the call to mymacro() succeeds is a quirk due
to the face that the macro is expanded later, in contrast to tokens,
dimens and counters.

Is there a command I can use within Lua to expand a macro
immediately or to expand the pending macros to be able to access the
values like the token register in the example?

Instead of

  context(tex.toks.mytoks)

use

  context(function () context(tex.toks.mytoks) end)

See the ConTeXt Lua Document manual for explanation.


Another question which is related:

Is there a way to access the contents of the macro from within Lua
like counters and token registers?

\starttext

\newtoks\mytoks
\mytoks={Foobar}

\startluacode
 local tok = tex.toks.mytoks

 -- something like this is what I have in mind
 -- local mac = tex.macros.somemacro
\stopluacode

\stoptext

I am just interested in a text string, not a box with typeset
material. I guess that's more difficult, since macros are expanded
and not just simply read.

AFAIK, this is not possible.

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to