我是 LuaTeX 的新手,但它非常有趣。
有时,我需要通过 Lua 代码处理一些宏参数,因此如果我们可以访问 Lua 中定义的变量将很有用。例如:
\def\foo#1{%
\directlua{var = [[#1]] .. " " .. system}
% other part of this macro
...}
\foo{typesetting}
\bye
我如何访问var
中定义的\directlua
?假设,之后\foo{typesetting}
,我只能typesetting system
通过使用来获取var
。
还有一个问题是
how can I access the TeX command in \directlua environment
?
答案1
请参阅我的回答:我应该将哪个 Lua 环境与 LuaTeX(LuaLaTeX)一起使用?
你可以这样做:
\newcommand\myrepeat[2]{%
\luaexec{
for i=1,#1 do
tex.sprint("\luatexluaescapestring{#2}")
end
}}
\myrepeat{4}{Hello world}
访问宏参数。
\newcommand\mymacro[1]{%
\directlua{myvar=\luatexluaescapestring{#1}}}
将参数 1 分配给变量就足够了myvar
。
对于普通的 TeX 解决方案,这将打印出“排版系统”:
\def\foo#1{%
\directlua{var = [[\luaescapestring{#1}]] .. " system"
tex.sprint(var)
}% other part of this macro
}
\foo{typesetting}
\bye
答案2
我想你的意思是在 Lua 之外也使用该变量,对吗?
\def\foo#1{%
\directlua{var = "Year: " .. [[\luaescapestring{#1}]]
tex.sprint(var)
tex.sprint{"\string\\def\string\\var{\luaescapestring{#1}}"}
}% other part of this macro
}
\foo{\the\year}
\var
\bye
输出为: