我已经在 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}