如何在 MetaPost 中使用带虚线的方格笔?

如何在 MetaPost 中使用带虚线的方格笔?

(抱歉,不确定MetaPost主题与网站无关,请随意迁移。)

我正在尝试绘制粗方形虚线。假设我想画一个直十字。当我使用pencircle,它可以工作 好的,但虚线的边缘是圆的:

pickup pencircle scaled 0.250 cm;
drawoptions (withcolor black dashed evenly scaled 4);
draw (000, 250) -- (500, 250);
draw (250, 000) -- (250, 500);

但是当我使用时pensquare,根本没有破折号,只有一条粗实黑线:

pickup pensquare scaled 0.250 cm;
drawoptions (withcolor black dashed evenly scaled 4);
draw (000, 250) -- (500, 250);
draw (250, 000) -- (250, 500);

有没有办法得到方形虚线?

答案1

从第 40 页底部开始手动的

此外,虚线图案应与 pencircle 一起使用,或者根本不使用笔;应避免使用 pensquare 和其他复杂笔。这是因为输出使用 PostScript 原语 setdash,它与多边形笔创建的填充路径交互效果不佳。

话虽如此,我认为你可以用linecap:=butt; 圆形笔玩,没有linecap任何选择,你的破折号看起来像

在此处输入图片描述

设置后linecap:=butt;,您的破折号看起来类似于下面的红色部分:

在此处输入图片描述

也许这就是你想要的,我不确定。如果你想要方形“点”,那么按照第 41 页顶部的示例,我们要设置虚线图案,使虚线的高度和长度linecap:=butt;相等。因此,将 on 部分的长度设置为你用来绘制的圆形笔的直径,然后将两端封盖以形成一个正方形。

在此处输入图片描述

\documentclass{article}
\usepackage{luamplib}

\mplibnumbersystem{double}
\mplibtextextlabel{enable}
\begin{document}
\begin{mplibcode}
    vardef penwidth=
        save q; pair q;
        % position of q so that when drawn withcurrent pen, the bottom of penstroke=origin.
        bot q=origin;
        % center q is 1/2 radius of pen above origin.
        % double to get diameter of current pen
        pw:=2(ypart q);
        pw
    enddef;
    vardef squaredashes=
        save pica_,picb_; picture pica_,picb_;
        % store picture then clear
        pica_:=currentpicture; currentpicture:=nullpicture;
        % draw your dashpattern
        draw dashpattern(on penwidth off penwidth);
        % store dashpattern, and restore picture
        picb_:=currentpicture; currentpicture:=pica_;
        picb_
    enddef;

 beginfig(0);

    u:=1cm;
    path p; p=origin--(2u,0);
    linecap:=butt;

    pickup pencircle scaled 8bp;
    draw p dashed squaredashes;

    pickup pencircle scaled 3bp;
    draw p shifted (0,-.5u) dashed squaredashes;

endfig;

\end{mplibcode}
\end{document}

相关内容