foreach 命令不起作用

foreach 命令不起作用

我想使用 tikz 复制这个图形。 在此处输入图片描述

现在我被困在图形的下半部分,即地面上。我尝试使用 foreach \x 命令,但由于某种我不明白的原因,它不起作用。首先,我尝试在 draw 命令中使用 xshift 选项。

\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{units}
\usepackage{tikz,pgf,import,pgfplots} 
\usetikzlibrary{calc, pgfplots.units,}
\pgfplotsset{compat=1.3} 
\begin{document}
     \centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
            xtick=\empty, ytick=\empty, axis lines=center]
    %Sine wave
    \addplot[blue, domain=-4:4]  {sin(deg (x))};
    % Ground
    \draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
    \foreach \x in {0.2, 0.4, ..., 8} {%
        \draw[xshift={axis cs: \x} ] (axis cs: -4.0 ,-5) -- (axis cs: -3.8,-4.5);
        % \draw (axis cs: { -4.0 + \x },-5) -- (axis cs: { -3.8 + \x },-4.5);
        }%
    % \draw[hatch](axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\end{axis}
\end{tikzpicture}

\结束{文档}

但它不起作用,我只得到第一条倾斜的线:

在此处输入图片描述

我也尝试在坐标上“手动”进行变换:

        \foreach \x in {0.2cm, 0.4cm, ..., 8cm} {% I tried adding the units cm amd whitout
             \draw (axis cs: { -4.0 + \x },-5) -- (axis cs: { -3.8 + \x },-4.5);
        }%

但在这种情况下,该文件甚至无法编译。

寻找解决方案,我发现了这一点例子使用路径装饰的选项。

所以我添加了一种新风格:

    \begin{tikzpicture}[hatch/.style={postaction={line cap=round,draw,decorate,decoration={border,angle=-120, amplitude=0.4cm,segment length=2mm}}}]%

\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
            xtick=\empty, ytick=\empty, axis lines=center]
    %Sine wave
    \addplot[blue, domain=-4:4]  {sin(deg (x))};
    % Ground
     \draw[hatch](axis cs: -4,-4.5)--(axis cs: 4,-4.5);
\end{axis}
\end{tikzpicture}

在这种情况下,我得到了阴影,但它并没有填满整个路径。

在此处输入图片描述

有什么想法可以解决这个问题(无论哪种解决方案)。

提前致谢!

干杯!

答案1

这个问题以及相关答案,解释了为什么不能\foreachaxis环境中使用。或者实际上,你可以,但你需要用它制作一个宏来确保扩展和计算正常工作。

应用于您的问题,您可以这样做:

\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{tikz, pgfplots} 
\usetikzlibrary{calc}
\pgfplotsset{compat=1.3} 
\begin{document}
     \centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
            xtick=\empty, ytick=\empty, axis lines=center]
    % Sine wave
    \addplot[blue, domain=-4:4]  {sin(deg (x))};
    % Ground
    \draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
    \foreach \x in {0.2, 0.4, ..., 8} {%
        \edef\temp{\noexpand\draw (axis cs: { -4.0 + \x }, -5) -- (axis cs: { -3.8 + \x }, -4.5);}
        \temp
        }%
\end{axis}
\end{tikzpicture}
\end{document}

或者:

\documentclass{standalone}
\standaloneconfig{border=5mm 5mm 5mm 5mm}
\usepackage{tikz, pgfplots} 
\usetikzlibrary{calc}
\pgfplotsset{compat=1.3} 
\begin{document}
     \centering
\begin{tikzpicture}
\begin{axis}[xmin=-5, xmax=5, ymin=-5, ymax=5,
            xtick=\empty, ytick=\empty, axis lines=center]
    % Sine wave
    \addplot[blue, domain=-4:4]  {sin(deg (x))};
    % Ground
    \draw(axis cs: -4,-4.5)--(axis cs: 4,-4.5);
    \pgfplotsinvokeforeach{0.2, 0.4, ..., 8} {%
        \draw (axis cs: { -4.0 + #1 }, -5) -- (axis cs: { -3.8 + #1 }, -4.5);
    }%
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容