# [luatex] Changing catcodes in \directlua

Paul Isambert zappathustra at free.fr
Tue Jul 6 08:34:15 CEST 2010

Things are expanded in a \directlua statement, like in a \write or
\special. And what is not exanded, e.g. primitives like \begingroup, is
interpreted as Lua code, where quite obviously a string like
"\begingroup" doesn't make sense. The simplest solution to achieve what
you want is:

\directlua{tex.print("\luaescapestring{$\noexpand\alpha$}")}

which turns into correct Lua code: first because \alpha isn't expanded,
second because \luaescapestring modifies its argument so that you get
tex.print("$\alpha$")
which you might find sensible but to Lua it means print the dollar
character, then a bell, then the lpha'$string.'' I say a bell'' because \a is an escape sequence that refers to this character, which let's admit isn't the most often used nowadays. On the other hand the sequence with \luaescapestring returns this to Lua: tex.print("$\\alpha$") which means print a dollar, a backslash alpha', and a dollar'' and that's correctly interpreted by TeX. (Note that I'm using LuaTeX v.0.6, hopefully it'll change nothing.) Now a note for our much admired LuaTeX developpers: experimenting with the engine to answer this post I found that \directlua{tex.print("a\noexpand\alpha b")} returns aXlpha b'' where X'' is whatever TeX renders the bell \a with (an uppercase upsilon for me). But what surprises me is the space before the b''. Where does it come from? I'd think \alpha'' when it was still a command would have gobbled it...? Best, Paul Steve Hafner a écrit : > I'm using luatex beta-0.40.6 in texlive2009. > > If file.tex contains the the following two lines > > \directlua{\begingroup\catcode\\=12 tex.print("$\alpha$")\endgroup} > \bye > > then > > luatex file.tex > > gives > > ! Argument of \\ has an extra }. > > But I expected that the argument of \directlua would expand to > > tex.print("$\alpha$") > > and that$\alpha\$ would be sent to the tex stream.
`