使用lua代码获取不同长度的规则

使用lua代码获取不同长度的规则

我现在开始学习 LuaLateX,我想获得一些长度不断增加的规则,但我不明白为什么这个简单的代码没有提供所需的输出:

\documentclass[11pt]{book}
\usepackage{xcolor}
\usepackage{luatex,pgffor, luacode, calc}
\begin{document}
\newcommand{\myrules}{
    \dimen0=2cm
    \luaexec{
      for i=1,4 do
      tex.dimen[0]=tex.dimen[0]*i
      tex.print("\\color{red}\\rule{\\dimen0}{3pt}\\par")
      end
       }
   }
\myrules
\end{document}

答案1

\luaexec是 的包装器\directlua。它执行 Lua 代码并扩展为:

\color{red}\rule{\dimen0}{3pt}\par
\color{red}\rule{\dimen0}{3pt}\par
\color{red}\rule{\dimen0}{3pt}\par
\color{red}\rule{\dimen0}{3pt}\par

也在组内\luaexec调用。因此,在 TeX 继续执行 的扩展结果之前, 的局部赋值会丢失。\directluatex.dimen[0]\directlua

如果规则应该是2cm,,,和,那么算法中也存在缺陷4cm,导致,,,。6cm8cm2cm4cm12cm48cm

第一个版本的示例文件:

\documentclass[11pt]{book}
\usepackage{xcolor}
\usepackage{luatex,pgffor, luacode, calc}
\parindent=0pt
\begin{document}
\newcommand{\myrules}{%
    \dimen0=2cm %
    \luaexec{
      for i=1,4 do
        tex.print("\\color{red}\\rule{", tex.dimen[0]*i, "sp}{3pt}\\par")
      end
   }%
}
\myrules
\end{document}

结果

相关内容