我现在开始学习 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 继续执行 的扩展结果之前, 的局部赋值会丢失。\directlua
tex.dimen[0]
\directlua
如果规则应该是2cm
,,,和,那么算法中也存在缺陷4cm
,导致,,,。6cm
8cm
2cm
4cm
12cm
48cm
第一个版本的示例文件:
\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}