tikz 数组索引

tikz 数组索引

我正在尝试生成字形图。我的想法是,我有一个元素列表,其中包含 4 个值(0.0 .. 1.0),它们代表特定特征的值。我的目标是连接这些点,但我无法访问元素数组中的数据。我尝试了一些宏,但\pgfmathparse没有成功。以下是我正在尝试执行的操作的示例:

\documentclass{standalone}
\usepackage{pgfmath,pgffor}
\begin{document}
\def\elements{{0.5,0.5,0.59,0.5}, {0.2,0.5,0.5,0.8} }% romboide and a diamond shape

\foreach \elementPoints [count=\i] in \elements {
 \draw ({2.2*\i},0) ++(\elementPoints[1],0) node (a) {}
            ({2.2*\i},0) ++(0,\elementPoints[2]) node (b) {}
            ({2.2*\i},0) ++({-1*\elementPoints[3]},0) node (c) {}
            ({2.2*\i},0) ++(0,{-1*\elementPoints[4]}) node (d) {};

\draw (a) -- (b) -- (c) -- (d) -- (a);          
}

\end{document}

谢谢

答案1

您的代码中存在一些错误:

您只加载了包pgfmath和,pgffor但没有加载tikz,但您使用了\draw和 TikZ 的路径语法。不过,它们还需要环境tikzpicture(或\tikz宏)。

PGFmath 数组的索引从0not开始1

宏中的数组\elements需要另一组括号{ }才能表明它们实际上是数组,\foreach将列表分成两个数组时,第一对括号会被剥离。

此外,您使用node形状的默认 s rectangle,具有垂直和水平尺寸。我相信这不是您想要的。coordinate如果您只是想用名称保存坐标,请使用 s:

\foreach \elementPoints [count=\i] in \elements {
  \path (2.2*\i,0) +(   \elementPoints[0],                    0) coordinate (a)
                   +(                   0,    \elementPoints[1]) coordinate (b)
                   +(-1*\elementPoints[2],                    0) coordinate (c)
                   +(                   0, -1*\elementPoints[3]) coordinate (d);

  \draw (a) -- (b) -- (c) -- (d) -- cycle;
}

您不必保存坐标并稍后连接它们,也可以直接在路径上连接它们。


insert path无论如何,也许您对使用样式和极坐标(也可以在您的示例中使用)的较短版本的代码感兴趣。

参考

  • PGF 手册
    • +和之间的差异++(第 2.15 节“指定坐标”,第 31 页及以上)
    • insert path(第 14 章“路径规范的语法”,第 139 页)
    • 看一下kite第 62.3 节“几何形状”中的形状,第 623f 页。

原始方法

\documentclass[tikz,convert]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\elements{{{0.5,0.5,0.59,0.5}}, {{0.2,0.5,0.5,0.8}}}% romboide and a diamond shape

\foreach \elementPoints [count=\i] in \elements
  \draw (2.2*\i,0) +(   \elementPoints[0],                    0)
                -- +(                   0,    \elementPoints[1])
                -- +(-1*\elementPoints[2],                    0)
                -- +(                   0, -1*\elementPoints[3])
                -- cycle;
\end{tikzpicture}
\end{document}

输出(原始)

在此处输入图片描述

不同的方法

\documentclass[tikz,convert]{standalone}
\usepackage{tikz}
\tikzset{
  romb/.style args={#1:#2:#3:#4}{
    insert path={   +(right:{#1}) -- +(   up:{#2})
                 -- +( left:{#3}) -- +( down:{#4}) -- cycle
    }
  }
}
\begin{document}
\begin{tikzpicture}
\draw[            draw=blue,  fill=red ] (0,0) [romb=.5:.5:.59:.5];
\draw[very thick, draw=green, fill=blue] (2,0) [romb=.2:.5:.5 :.8];
\end{tikzpicture}
\end{document}

输出(不同)

在此处输入图片描述

相关内容