无法组合 \foreach 和 \draw

无法组合 \foreach 和 \draw

我就是无法调试这段代码。排版后,它一直给出错误:“未定义的控制序列”当为每组坐标单独编码矩形时,代码虽然可以工作,但它仍然很麻烦...我在 \foreach 和 \draw 中遗漏了什么???

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin = 0,
        xmax = 10,
        ymin = 0,
        ymax = 10,
        ]
        \foreach \linker / \regter in {{(1,1) / (2,2)}, {(2,2) / (3,3)},{(3,3)/(4,4)}} {
                \edef\temp{\draw[thick] \linker rectangle \regter;
                }
                \temp
            }
    \end{axis}
\end{tikzpicture}
\end{document}

答案1

您可以移动\draw外部\foreach,然后就不需要使用扩展:

在此处输入图片描述

笔记:

  • 通常需要使用axis cs:坐标系之内环境axis。但是,正如 Manuel 所评论的那样,在 pgfplots 版本 1.11 中,这现在是默认坐标系。因此,如果使用版本事先的每个1.11坐标需要指定为

        \foreach \linker / \regter in {
            {(axis cs:1,1) / (axis cs:2,2)}, 
            {(axis cs:2,2) / (axis cs:3,3)},
            {(axis cs:3,3) / (axis cs:4,4)}} 
                {
                    \linker rectangle \regter
                };
    

代码:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xmin = -1,
        xmax = 10,
        ymin = -1,
        ymax = 10,
        ]
        \draw[thick,blue] 
            \foreach \linker / \regter in {
                {(1,1) / (2,2)}, 
                {(2,2) / (3,3)},
                {(3,3) / (4,4)} } 
                    {
                        \linker rectangle \regter
                    };
    \end{axis}
\end{tikzpicture}
\end{document}

答案2

我猜你的问题是逗号。逗号分隔元组,因此如果一个参数中有逗号,则应该用花括号将其括起来。对我来说,此代码有效。

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
% \pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    xmin = 0,
    xmax = 10,
    ymin = 0,
    ymax = 10,
    ]
  \end{axis}
  \foreach \linker / \regter in {%
    {(1,1)}/{(2,2)}, %
    {(2,2)}/{(3,3)}, %
    {(3,3)}/{(4,4)}%
  } { \draw[thick] \linker rectangle \regter; }
\end{tikzpicture}
\end{document}

结果

答案3

问题在于;在它前面\draw加上:\edef\noexpand

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  xmin = 0,
  xmax = 10,
  ymin = 0,
  ymax = 10,
]
\foreach \linker / \regter in {{(1,1) / (2,2)}, {(2,2) / (3,3)},{(3,3)/(4,4)}} {
   \edef\temp{\noexpand\draw[thick] \linker rectangle \regter;}\temp
}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容