![Metapost 边界框和笔宽](https://linux22.com/image/404536/Metapost%20%E8%BE%B9%E7%95%8C%E6%A1%86%E5%92%8C%E7%AC%94%E5%AE%BD.png)
在 metapost 中将图片剪切到边界框时,会包含绘制区域之外的额外空间。当删除此额外空间时,bboxmargin := 0;
图片似乎被剪切到边界框的中心,即如果绘制了边界框,则图片被剪切到笔画的中心,因此笔画的一半被截断。因此,要保留所有笔画(仅此而已),似乎需要将bboxmargin
设置为当前笔宽的一半。
如下面第二张图所示,我可能找到了某种方法来获取笔划的宽度(有时它与默认笔的宽度完全相同.5bp
,有时如果笔被缩放则为近似值,放大蓝色矩形以查看一些突出的位)。
有没有更好的方法可以精确地剪切到绘制的区域?如果没有,有没有更好的方法来获取当前笔的宽度?
\documentclass{standalone}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\mplibcodeinherit{enable}
\mplibnumbersystem{double}
\begin{document}
\begin{mplibcode}
path p,q;
picture pica,picb;
u:=100;
p = unitsquare scaled u;
q = u*(.5,1.2)--u*(.5,-.2);
pickup pencircle scaled 4bp;
pica:=image(draw p; draw q;);
picb:=pica;
beginfig(0);
pickup pencircle scaled 4bp;
draw pica;
interim bboxmargin := 0;
clip pica to bbox p;
draw pica withcolor red;
endfig;
beginfig(1);
pickup pencircle scaled 4bp;
z0=penoffset left of currentpen;
show(z0);
show(x0++y0);
interim bboxmargin:=x0++y0;
clip picb to bbox p;
draw picb withcolor blue;
endfig;
\end{mplibcode}
\end{document}
答案1
手册中没有记录metapost
,但书中metafont
第 2 章第 8 页记录的是、和top
。bot
它们的使用方式如下:lft
rt
bot z0=origin;
定义点的位置z0
,使得使用当前笔绘制时,笔划的底部位于原点。因此,例如,当前笔的高度可以从以下位置获得
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
pickup pencircle scaled 4bp;
bot z0=origin;
penheight=2(ypart z0);
show(penheight);
\end{mplibcode}
\end{document}