我的 \foreach 语句有什么问题

我的 \foreach 语句有什么问题

下面的代码运行良好

\begin{tikzpicture}
\begin{axis}
[ 
      ticks = none, axis lines = middle,
      xmin = -5, xmax = 5,
      ymin = -5, ymax = 5,
    ]
    \foreach \p in {1,2}{
        \draw[red] (-5,1)--(5,1);
    }
\end{axis}
\end{tikzpicture}

\p但是,当我尝试在循环内使用变量时,就像

\begin{tikzpicture}
\begin{axis}
[ 
      ticks = none, axis lines = middle,
      xmin = -5, xmax = 5,
      ymin = -5, ymax = 5,
    ]
    \foreach \p in {1,2}{
        \draw[red] (-5,\p)--(5,\p);
    }
\end{axis}
\end{tikzpicture}

我收到未定义的控制序列错误。无论我用什么代替,此错误仍然存​​在\p

答案1

欢迎使用 TeX-SE!请注意,它pgfplots在后台执行大量服务,这就是为什么某些变体\foreach可能无法在axis环境中工作的原因。这些内容在章节中有详细说明8.1 实用命令pgfplots 手册。对于这种情况,长话短说:\pgfplotsinvokeforeach改为使用。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[ 
      ticks = none, axis lines = middle,
      xmin = -5, xmax = 5,
      ymin = -5, ymax = 5,
    ]
    \pgfplotsinvokeforeach{1,2}{
        \draw[red] (-5,#1)--(5,#1);
    }
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

在某些情况下,你确实需要使用传统\foreach循环。在这种情况下,你可以使用这个答案要得到

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[ 
      ticks = none, axis lines = middle,
      xmin = -5, xmax = 5,
      ymin = -5, ymax = 5,
    ]
    \foreach \p in {1,2}{
        \edef\temp{\noexpand\draw[red] (-5,\p)--(5,\p);}
        \temp
    }
\end{axis}
\end{tikzpicture}
\end{document}

旁注:尽量避免调用循环变量\p,,\n或者如果您考虑使用库\x,因为这些宏有自己的含义。\ycalc

相关内容