在 TeX 宏中访问定义的 Lua 全局变量

在 TeX 宏中访问定义的 Lua 全局变量

我是 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

输出为:

在此处输入图片描述

相关内容