我發現 TikZ在環境\foreach
中存在一些奇怪的行為\begin{axis}
。
這有效:
\foreach \x in {-2,-1,...,2} {
\addplot[thick, domain=0.05+(\x*2-1)*pi/2:+(\x*2+1)*pi/2-0.05] (x, {tan(deg(x))});
}
但這並沒有:
\foreach \x in {-2,-1,...,2} {
\draw (\x,-5) -- (\x,5);
}
它給出了錯誤
! Undefined control sequence.
<argument> \x
,-5
l.771 \end{axis}
這是真正奇怪的部分:只有當軸定義了邊界時它才會失敗。例如,這是一個可以工作的 MWE(但不繪製任何內容):
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} % [ ymin=-3, ymax=3, xmin=-5, xmax=5]
\foreach \q in {-2,-1,...,2} {
\draw (axis cs: \q,-5) -- (axis cs: \q,5);
}
\end{axis}
\end{tikzpicture}
\end{document}
但刪除註釋會導致失敗。
這是為什麼?
(我的最終目標是繪製正切函數的五個線段及其垂直漸近線。)
答案1
Pgfplots 不像 TikZ 那樣解析繪圖指令。它必須先收集所有要繪製的路徑,然後執行一些黑魔法來獲得最大值和最小值等。在您的第一個有問題的路徑中,它\x
從未替換為它的值,因此當 pgfplots 決定讀取您的路徑時,它只會看到\x
循環之外未定義的路徑。為此,您可以使用其他循環方法,如下所示。
此外,您還需要axis cs
定義點,否則不能保證它們位於軸的可見區域中。相反,您可以使用以下內容;
\begin{tikzpicture}
\begin{axis}[ymax=5,ymin=-5,xmax=2.1,xmin=-2.1]
\pgfplotsinvokeforeach{-2,...,2}{
\draw (axis cs:#1,-5) -- (axis cs:#1,5);
}
\end{axis}
\end{tikzpicture}
但如果這僅適用於漸近線,那麼您最好使用額外的 x 刻度和額外刻度的網格選項。