(抱歉,不确定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}