Hello, I've got a running page head like this in my document: \def\CurrentUser{\cldcontext{os.resultof"whoami"}} \def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion } and later: \setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname} But when I run this, I get a UCS error that seems to indicate that the *result* of \CurrentUser ("waxhaw\huttar") is getting parsed as a command sequence. Here's the error: ! Undefined control sequence. 1 >> % see ConTeXt wiki http://wiki.contextgarden.net/Imposition#Cut_marks 2 3 %% TODO: make sure this doesn't reevaluate every time 4 %% the command sequence is used! 5 \define\CurrentUser{\cldcontext{os.resultof"whoami"}} 6 7 \def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \conte xtversion. SVN } ... l.1 waxhaw\huttar \cldcontext #1x-\directlua {context(#1)} \Markname #- Compiled \date by \CurrentUser \LUATEX +\ConTeXt \ \contextvers... l.24 ...t=lefttop,x=3cm,y=-1.5\lineheight]{\Markname } How can I change the definition of \CurrentUser, or \Markname, to output the result of \CurrentUser as-is, instead of parsing the result? I tried (somewhat blindly) changing \def to \define, but it didn't make any difference. At the same time, I want to make sure that the processor won't be making an OS system call to "whoami" every time \CurrentUser is evaluated: I want it to happen only once, when \CurrentUser is defined. Here is my complete working example: \def\CurrentUser{\cldcontext{os.resultof"whoami"}} \def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion. } \setuplayout[location=middle,marking=on] \definelayer[cropmark][state=repeat,width=\paperwidth,height=\paperheight] \setupbackgrounds[page][background=cropmark] \setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname} \starttext Foo \stoptext Thanks for any help. Lars
Am 12.03.2014 um 15:00 schrieb Lars Huttar
Hello, I've got a running page head like this in my document:
\def\CurrentUser{\cldcontext{os.resultof"whoami"}}
\def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion }
and later:
\setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname}
But when I run this, I get a UCS error that seems to indicate that the *result* of \CurrentUser ("waxhaw\huttar") is getting parsed as a command sequence.
When you want to pass a backslash to Lua you have to use \letterbackslash. Wolfgang
On 3/12/2014 10:05 AM, Wolfgang Schuster wrote:
Am 12.03.2014 um 15:00 schrieb Lars Huttar
: Hello, I've got a running page head like this in my document:
\def\CurrentUser{\cldcontext{os.resultof"whoami"}}
\def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion }
and later:
\setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname}
But when I run this, I get a UCS error that seems to indicate that the *result* of \CurrentUser ("waxhaw\huttar") is getting parsed as a command sequence. When you want to pass a backslash to Lua you have to use \letterbackslash.
Thanks... can you give me an example of what that would look like? I don't think I want to pass a backslash to Lua, so I'm not sure how to apply what you're saying. Or are you using "Lua" here in the sense of LuaTeX? A backslash appears in the output of os.resultof"whoami"; do I need to perform some processing on that output in order to escape backslashes? Lars
Am 12.03.2014 um 15:12 schrieb Lars Huttar
On 3/12/2014 10:05 AM, Wolfgang Schuster wrote:
Am 12.03.2014 um 15:00 schrieb Lars Huttar
: Hello, I've got a running page head like this in my document:
\def\CurrentUser{\cldcontext{os.resultof"whoami"}}
\def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion }
and later:
\setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname}
But when I run this, I get a UCS error that seems to indicate that the *result* of \CurrentUser ("waxhaw\huttar") is getting parsed as a command sequence. When you want to pass a backslash to Lua you have to use \letterbackslash.
Thanks... can you give me an example of what that would look like? I don't think I want to pass a backslash to Lua, so I'm not sure how to apply what you're saying. Or are you using "Lua" here in the sense of LuaTeX?
A backslash appears in the output of os.resultof"whoami"; do I need to perform some processing on that output in order to escape backslashes?
Try this: \def\CurrentUser{\cldcontext{os.resultof"whoami"}} \def\Markname{Compiled \date by \detokenize\expandafter{\CurrentUser} \LUATEX +\ConTeXt\ \contextversion.} \setuplayout[location=middle,marking=on] \definelayer[cropmark][state=repeat,width=\paperwidth,height=\paperheight] \setupbackgrounds[page][background=cropmark] \setlayer[cropmark][preset=lefttop,x=3cm,y=1.5\lineheight]{\Markname} \starttext Foo \stoptext Wolfgang
On 3/12/2014 10:21 AM, Wolfgang Schuster wrote:
Am 12.03.2014 um 15:12 schrieb Lars Huttar
mailto:lars_huttar@sil.org>: On 3/12/2014 10:05 AM, Wolfgang Schuster wrote:
Am 12.03.2014 um 15:00 schrieb Lars Huttar
mailto:lars_huttar@sil.org>: Hello, I've got a running page head like this in my document:
\def\CurrentUser{\cldcontext{os.resultof"whoami"}}
\def\Markname { Compiled \date by \CurrentUser \LUATEX +\ConTeXt\ \contextversion }
and later:
\setlayer[cropmark][preset=lefttop,x=3cm,y=-1.5\lineheight]{\Markname}
But when I run this, I get a UCS error that seems to indicate that the *result* of \CurrentUser ("waxhaw\huttar") is getting parsed as a command sequence. When you want to pass a backslash to Lua you have to use \letterbackslash.
Thanks... can you give me an example of what that would look like? I don't think I want to pass a backslash to Lua, so I'm not sure how to apply what you're saying. Or are you using "Lua" here in the sense of LuaTeX?
A backslash appears in the output of os.resultof"whoami"; do I need to perform some processing on that output in order to escape backslashes?
Try this:
\def\CurrentUser{\cldcontext{os.resultof"whoami"}}
\def\Markname{Compiled \date by \detokenize\expandafter{\CurrentUser} \LUATEX +\ConTeXt\ \contextversion.}
\setuplayout[location=middle,marking=on]
\definelayer[cropmark][state=repeat,width=\paperwidth,height=\paperheight]
\setupbackgrounds[page][background=cropmark]
\setlayer[cropmark][preset=lefttop,x=3cm,y=1.5\lineheight]{\Markname}
\starttext
Foo
\stoptext
Thanks again... This gets rid of the error, but it seems to prevent any expansion of the content of \CurrentUser, because the page head now literally looks like this: Compiled March 12, 2014 by \cldcontext {os.resultof"whoami"}. LuaTEX+ConTEXt... Lars
Am 12.03.2014 um 15:51 schrieb Lars Huttar
This gets rid of the error, but it seems to prevent any expansion of the content of \CurrentUser, because the page head now literally looks like this:
You can try to print the string in verbatim mode: \def\CurrentUser{\cldcommand{sprint(tex.vrbcatcodes,os.resultof"whoami")}} \def\Markname{Compiled \date by \CurrentUser\ \LUATEX +\ConTeXt\ \contextversion.} Wolfgang
On 3/12/2014 11:06 AM, Wolfgang Schuster wrote:
Am 12.03.2014 um 15:51 schrieb Lars Huttar
mailto:lars_huttar@sil.org>: This gets rid of the error, but it seems to prevent any expansion of the content of \CurrentUser, because the page head now literally looks like this:
You can try to print the string in verbatim mode:
\def\CurrentUser{\cldcommand{sprint(tex.vrbcatcodes,os.resultof"whoami")}}
\def\Markname{Compiled \date by \CurrentUser\ \LUATEX +\ConTeXt\ \contextversion.}
That did it. Thank you! Lars
participants (2)
-
Lars Huttar
-
Wolfgang Schuster