如何在 LaTeX 中生成阶梯金字塔?
我猜我会使用图形模块来使图表条居中......
我希望能够选择金字塔每一“行”的长度,并在其旁边显示该数字,如下所示:
感谢所有建议
答案1
我建议你使用 TikZ 和\foreach
循环
\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.5*\b,{(\n-1)*\barheight}) rectangle (0.5*\b,\n*\barheight);
\node at (-0.5*\b,\n*\barheight-0.5*\barheight) [left] {\b};
}
\end{tikzpicture}
}
\begin{document}
\pyramid{28,26,17,7}
\end{document}
使用/注意事项
使用
\pyramid{<values>}
逗号分隔值,
并按降序排序。设置颜色
barcolor
和barborder
用xcolor
。更改
x=0.25cm
为垂直缩放图像。更改
\newcommand{\barheight}{0.5cm}
设置条形的高度。您可能需要在节点中添加这样的字体设置
\node at (...) [left,font=\small] {\b};
也可以将数字排列在一起。
\newcommand{\Pyramid}[1]{% \begin{tikzpicture}[x=0.25cm] \foreach \b [count=\n] in {#1} { % Store the first value in the list \ifnum\n=1\relax\xdef\firstbarwidth{\b}\fi \draw [barborder,fill=barcolor] (-0.5*\b,{(\n-1)*\barheight}) rectangle (0.5*\b,\n*\barheight); \node at (-0.5*\firstbarwidth,\n*\barheight-0.5*\barheight) [left] {\b}; } \end{tikzpicture} }
(我将宏名改为
\Pyramid
,大写P
,以便您可以在一个文档中比较它们。)
答案2
极简主义的非 TikZ 解决方案,带有一点颜色和阴影。调整以适应口味。
\documentclass{article}
\usepackage{xcolor}
\newcounter{ctr}
\newcounter{ctra}
\setcounter{ctra}{7}
\newlength\rwidth
\setlength\rwidth{50pt}
\fboxsep0pt
\fboxrule0pt
\begin{document}
\begin{center}
\loop
\ifnum\thectr<4
\fbox{\thectra}\colorbox{gray}{\color{olive}\rule{\the\rwidth}{30pt} }\\[-1.0pt]
\stepcounter{ctr}
\addtocounter{ctra}{7}
\setlength\rwidth{\dimexpr\the\rwidth+30pt\relax}
\repeat
\end{center}
\end{document}