下面的代码运行良好
\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
,因为这些宏有自己的含义。\y
calc