在 tikzpicture 中使用 Lua

在 tikzpicture 中使用 Lua

我目前正在探索使用 LuaTeX 生成 TikZ 代码的方法。使用该luacode*环境似乎很顺利。但有时似乎更有意义的是使用 Lua 将小片段注入 TikZ 环境,而不是使用大量tex.sprint()语句。这似乎是一个雷区。给出以下 MWE:

\documentclass{article}
\usepackage{tikz}
\usepackage{luacode}
\begin{document}    
\begin{tikzpicture}
\luadirect{tex.print("\string\\draw (0,0) to (1,1);")}  % #1 works
\luaexec{tex.print("\\draw (0,0) to (1,1);")}           % #2 works
\draw (0,0) to (\luaexec{tex.sprint("1,1")});           % #3 does not work
\draw (0,0) to (\luadirect{tex.sprint("1,1")});         % #4 works
\draw (0,0) to \luaexec{tex.sprint("(1,1)")};           % #5 doesn't work
\draw (0,0) to \luadirect{tex.sprint("(1,1)")};         % #6 doesn't work
\end{tikzpicture}
\end{document}

为什么 #1、#2 和 #4 有效,而 #3、#5 和 #6 无效?

答案1

这些错误与 Lua 没有直接关系,这只是 tikz 是否在某些时候允许宏或不可扩展的命令的问题,你会看到相同的错误,原因相同

\documentclass{article}
\usepackage{tikz}

\begin{document}    

\begin{tikzpicture}
\def\zz{\draw (0,0) to (1,1);}\zz           % #1 works
\def\zz{\draw (0,0) to (1,1);}\zz           % #2 works
%\draw (0,0) to (\def\zz{1,1}\zz);           % #3 does not work
\def\zz{1,1}\draw (0,0) to (\zz);           % #4 works
%\draw (0,0) to \def\zz{(1,1)}\zz;           % #5 doesn't work
%\def\zz{(1,1)}\draw (0,0) to \zz;           % #6 doesn't work
\end{tikzpicture}
\end{document}

我发现它通常更容易使用\directlua(可扩展),而不是 luacode 包装器,后者大多不可扩展,因为它们包括 catcode 分配以使字符“安全”

相关内容