生成星形图:LuaLatex 中的 Tikz 评估

生成星形图:LuaLatex 中的 Tikz 评估

我已经在 LuaLatex 中运行了以下代码。如果这很重要的话,我会在 overleaf 上完成所有操作。

\documentclass{article}


\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing,arrows.meta,graphs.standard}
\usegdlibrary{circular}

\begin{document}


\begin{tikzpicture}
    \graph [
    simple necklace layout, node distance=1.5cm,
    nodes={draw,circle}
    ]
    {
        subgraph C_n [n=8]; 
        \foreach \i in {1,...,5}{
            \i -- \directlua{tex.sprint(3+\i)};
        }
    };
\end{tikzpicture}

\vspace{20 pt}

\begin{tikzpicture}
    \graph [
    simple necklace layout, node distance=1.5cm,
    nodes={draw,circle}
    ]
    {
        subgraph C_n [n=8]; 
        \foreach \i in {1,...,5}{
            \i -- \directlua{tex.sprint(mod({3+\i},8))};
        }
    };
\end{tikzpicture}


\end{document}

这两幅 Tikz 图片的代码相同,只是在第二个循环中,3+\i被 替换mod({3+\i},8))。因为3 + i % 8当 i = 1,...,4 时 等于 3 + i,所以我两次都应该得到基本相同的图片。然而,我最终得到的结果如下:

在此处输入图片描述

我该如何修复此代码以便正确评估模块化运算?

一旦我完成了这项工作,我的想法就是将循环扩展至{1,...,8},以获得完整的“星号”。

答案1

我只会使用pgf来计算 mod。请注意,mod返回从 开始的数字0,因此您可能想要int(1+mod(2+\i,8))而不是int(mod(3+\i,8))

\documentclass{article}


\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing,arrows.meta,graphs.standard}
\usegdlibrary{circular}

\begin{document}


\begin{tikzpicture}
    \graph [
    simple necklace layout, node distance=1.5cm,
    nodes={draw,circle}
    ]
    {
        subgraph C_n [n=8]; 
        \foreach \i in {1,...,5}{
            \i -- \directlua{tex.sprint(3+\i)};
        }
    };
\end{tikzpicture}

\vspace{20 pt}

\begin{tikzpicture}
    \graph [
    simple necklace layout, node distance=1.5cm,
    nodes={draw,circle}
    ]
    {
        subgraph C_n [n=8]; 
        \foreach \i [evaluate=\i as \j using {int(1+mod(2+\i,8))}]in {1,...,5}{
            \i -- \j;
        }
    };
\end{tikzpicture}


\vspace{20 pt}

\begin{tikzpicture}
    \graph [
    simple necklace layout, node distance=1.5cm,
    nodes={draw,circle}
    ]
    {
        subgraph C_n [n=8]; 
        \foreach \i [evaluate=\i as \j using {int(1+mod(2+\i,8))}]in {1,...,8}{
            \i -- \j;
        }
    };
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容