Metapost 边界框和笔宽

Metapost 边界框和笔宽

在 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 页记录的是、和topbot它们的使用方式如下:lftrt

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}

相关内容