如何在 tikz 填充中使用 foreach

如何在 tikz 填充中使用 foreach

我正在尝试绘制一个使用以下代码生成的填充的楼梯形状(如下所示)。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, math}

\begin{document}
\begin{tikzpicture}

  \tikzmath{
    \size = 3.0;    
    \n = 5;         
  }
  
  \fill[gray, draw=black, thick] 
    (0,0) -- ++(\size,0) -- 
    ++(0,\size/\n) -- ++(-\size/\n,0) --
    ++(0,\size/\n) -- ++(-\size/\n,0) --
    ++(0,\size/\n) -- ++(-\size/\n,0) --
    ++(0,\size/\n) -- ++(-\size/\n,0) --
    ++(0,\size/\n) -- ++(-\size/\n,0) --
    cycle;  

\end{tikzpicture}
\end{document}

但是,我想用 替换这 5 行++(0,\size/\n) -- ++(-\size/\n,0) --\foreach \i in {1,...\n} {...}我收到了错误!包 tikz 错误:无法解析该坐标。

  \fill[gray, draw=black, thick] 
    (0,0) -- ++(\size,0) -- 
    \foreach \i in {1,...,\n} {++(0,\size/\n) -- ++(-\size/\n,0) --}
    cycle;

在这种情况下,知道如何使用吗,\foreach这样我就不必\n多次复制和粘贴这些行?

在此处输入图片描述

答案1

这是写路径时的语法问题。Apath可以由 组成sub-paths。在你的情况下,它被写成一系列的line-to操作,就像这样--

括号{允许定义subpathsscopes必须具有与路径相同的语法,即line-to操作(在您的情况下)后紧接着coordinate

line-to operation <coordinate>是这样写的:-- <coordinate>

--通过在和之间放置括号++<coordinate>,子路径不再正确定义,因为--操作等待coordinate。解析器看到brace {定义了 ,sub-path因为它等待coordinate并抗议“软件包 tikz 错误:无法解析该坐标“。

(0,0) -- ++(\size,0) -- 
    \foreach \i in {1,...,\n} {++(0,\size/\n) -- ++(-\size/\n,0) --}

放置--++在牙套之间即可。

(0,0) -- ++(\size,0) 
        \foreach \i in {1,...,\n} {--++(0,\size/\n) --++(-\size/\n,0) }

截屏

\documentclass[tikz,border=5mm]{standalone}
%\usepackage{tikz}
\usetikzlibrary{calc, math}

\begin{document}
\begin{tikzpicture}

  \tikzmath{
    \size = 3.0;    
    \n = 5;         
  }
  
%  \fill[gray, draw=black, thick] 
%    (0,0) -- ++(\size,0) -- 
%    ++(0,\size/\n) -- ++(-\size/\n,0) --
%    ++(0,\size/\n) -- ++(-\size/\n,0) --
%    ++(0,\size/\n) -- ++(-\size/\n,0) --
%    ++(0,\size/\n) -- ++(-\size/\n,0) --
%    ++(0,\size/\n) -- ++(-\size/\n,0) --
%    cycle;  
\fill[gray, draw=black, thick] 
    (0,0) -- ++(\size,0) 
    \foreach \i in {1,...,\n} {--++(0,\size/\n) --++(-\size/\n,0) }
    --cycle;
\end{tikzpicture}

\end{document}

答案2

该错误可能是 的行为导致的\fill。更改为 命令\draw应该可以。

\begin{tikzpicture}
  \tikzmath{
    \size = 8.0;
    \n = 8;
  }
  \draw[fill=gray, thick] (0,0) -- ++(\size,0)
    \foreach \i in {1,...,\n} { |- ++(-\size/\n, \size/\n) } -- cycle;

\end{tikzpicture}

在此处输入图片描述

答案3

粗略估计

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}
\usepackage{xcolor}

\definecolor{barcolor}{named}{gray}
\definecolor{barborder}{named}{red}

\newcommand{\barheight}{0.5cm}

\newcommand{\pyramid}[1]{%
    \begin{tikzpicture}[x=0.25cm]
        \foreach \b [count=\n] in {#1} {
            \draw [barborder,fill=barcolor]
                (0,0) rectangle (0.5*\b,\n*\barheight);
        }
    \end{tikzpicture}
}


\begin{document}
    \pyramid{28,20,12,6}
\end{document}

相关内容