答案1
这是一次尝试元帖子,它内置于lualatex
LaTeX 版本中。
我定义了一个简单的宏,它以可变数量的离散值作为参数,然后将它们绘制为具有自动调整的轴和标签的棒状图。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
vardef stick_plot(text t) =
% count the list of numbers and store them in "values[]"
% using a "text" parameter allows the macro to have any number of arguments
numeric n, values[]; n = 0;
for i=t:
values[incr n] = i;
endfor
% set some unit size parameters -- in postscript points 72=1in, 1cm=28.35
numeric u, v; u = 20; v = 4;
% make the axes to fit the data
path xx, yy;
xx = origin -- (n * u + 3/2 u, 0);
yy = origin -- (0, max(t) * v + 2v);
% make the arrows a bit sharper
ahangle := 30;
% make a <picture> variable to return
image(
% draw the data lines -- with labels on even k
for k=1 upto n:
draw (k * u, 0) -- (k * u, values[k] * v) withcolor 2/3 blue;
if not odd k:
label.bot("$" & decimal k & "$", (k * u, 0));
fi
endfor
% add the axes with labels
drawarrow xx; label.bot("$k$", point 1/2 of xx shifted 12 down);
drawarrow yy; label.lft("$A[k]$", point 1/2 of yy);
)
enddef;
beginfig(1);
draw stick_plot(4,2,12,18,16,8,3,1,0,7,14,10,2,1);
draw stick_plot(1,2,3,4,5,6,7) shifted 80 down;
endfig;
\end{mplibcode}
\end{document}
您需要使用 来编译它lualatex
。
如果您想要更复杂,您可以考虑添加标签、间距和颜色的参数。有关 Metapost 的更多信息,请点击顶部的链接。