token.set_macro:\directlua 与 luacode*

token.set_macro:\directlua 与 luacode*

token.set_macro如果我使用 LuaLaTeX 编译以下代码,我会得到单词“RED”作为输出。内部的调用luacode*似乎无效。

\listfiles
\documentclass{minimal}
\usepackage{luacode}

\newcommand*\foo{RED}

\iftrue
\begin{luacode*}
  token.set_macro('foo', 'GREEN')
\end{luacode*}
\else  
  \directlua{token.set_macro('foo', 'GREEN')}
\fi  

\begin{document}
  \foo
\end{document}

更改\iftrue为后\iffalse,我得到了“绿色”。有人能解释一下这种现象吗?非常感谢。

答案1

一个环境就是一个组,如果你在案例中添加一个组\directlua,那么你会看到相同的内容:

\listfiles
\documentclass{minimal}
\usepackage{luacode}

\newcommand*\foo{RED}

\iffalse
\begin{luacode*}
  token.set_macro('foo', 'GREEN')
\end{luacode*}
\else
{  
  \directlua{token.set_macro('foo', 'GREEN')}
}
\fi  

\begin{document}
  \foo
\end{document}

相关内容