我在 TiKz 中制作了几个镶嵌,但我发现使用 \foreach 命令时,线条的起始位置不正确。我不确定这是为什么。
\begin{figure}[H]
\centering
\begin{tikzpicture}
\foreach \y [count=\j, evaluate=\j as \y using 2*sqrt(2)*\j] in {-8,0,8}{
\foreach \x in {-8,-4,...,8}
{
\draw[line width=1.8pt][-] ($({\x},{\y})$) -- ($({\x+2},{\y+ 2*sqrt(2)})$);
}
}
\foreach \z [count=\i, evaluate=\i as \z using 2*sqrt(2)*\i] in {-4,4}{
\foreach \r in {-8,-4,...,8}
{
\draw[line width=1.8pt][-] ($({\r},{\z})$) -- ($({\r},{\z+ sqrt(2)})$);
}
}
生产
我不明白为什么初始 y 坐标为 2平方根(2)(-8)从与初始 y 坐标为 2 的线相同的位置开始平方根(2)例如(-4)。
正如您所看到的,我尝试将代码分成具有不同标签的两个部分,以防出现某种依赖关系,但这没有帮助。
答案1
和你的
\foreach \y [count=\j, evaluate=\j as \y using 2*sqrt(2)*\j] in {-8,0,8}
循环变量\j
将是1, 2, 3
,因此\y = 2*sqrt(2)*\j
与列表无关-8,0,8
。
你需要的是
\foreach \j [evaluate=\j as \y using 2*sqrt(2)*\j] in {-8,0,8}
此时间\j
将是-8,0,8
,因此\y
将是所需值。
另外,($({\x},{\y})$) -- ($({\x+2},{\y+ 2*sqrt(2)})$)
可以简化为(\x,\y) -- (\x+2,{\y+2*sqrt(2)})
。
答案2
您必须添加我的代码的最后几行,并在您的代码中更改 {-4,4 in {-4,0,4}
\documentclass[10pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[italian]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{float,graphicx,tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\foreach \y [count=\j, evaluate=\j as \y using 2*sqrt(2)*\j] in {-8,0,8}{
\foreach \x in {-8,-4,...,8}
{
\draw[line width=1.8pt][-] ($({\x},{\y})$) -- ($({\x+2},{\y+ 2*sqrt(2)})$);
}
}
\foreach \z [count=\i, evaluate=\i as \z using 2*sqrt(2)*\i] in {-4,0,4}{
\foreach \r in {-8,-4,...,8}
{
\draw[line width=1.8pt][-] ($({\r},{\z})$) -- ($({\r},{\z+ sqrt(2)})$);
}
}
\end{tikzpicture}
\end{figure}
\end{document}