我正在尝试绘制一个使用以下代码生成的填充的楼梯形状(如下所示)。
\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
操作,就像这样--
。
括号{
允许定义subpaths
或scopes
必须具有与路径相同的语法,即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
答案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}