如何在 Metapost 中访问框的北、南、东、西锚点

如何在 Metapost 中访问框的北、南、东、西锚点

我正在尝试在 Metapost 中绘制下图所示的图形,其中重要的是框之间的边缘从“完美”框底线的中间开始,到“弦”框顶线的中间结束。使用命令boxit制作一个带有所需文本的框后,我使用 设置其坐标.c。然后我想在绘制框本身之前在框之间画一条线,但是,我无法引用.n.s或框以外的任何坐标。经过一番头痛之后,我终于找到了一种解决方法来做我想做的事情,但它对我来说就像黑魔法一样。也许对和.c的调用以某种方式生成了必要的信息。有人可以告诉我发生了什么吗?bpath.perfectbpath.chordal

所需图片

prologues := 3;
%outputtemplate := "%j-%c.mps";

input boxes;

beginfig(0);
    % Boxes
    boxit.perfect(btex perfect etex); perfect.c=(0,0);
    boxit.chordal(btex chordal etex); chordal.c=15right+30down;

    % Will crash: 
    draw perfect.s--chordal.n;
    drawboxed(perfect, chordal);
endfig;

beginfig(1);
    % Boxes
    boxit.perfect(btex perfect etex); perfect.c=(0,0);
    boxit.chordal(btex chordal etex); chordal.c=15right+30down;

    % Black magic. This is never actually drawn.
    path temp;
    temp = perfect.c--chordal.c cutbefore bpath.perfect cutafter bpath.chordal;

    % Works perfectly fine:
    draw perfect.s--chordal.n;
    drawboxed(perfect, chordal);
endfig;

我编译时收到的错误消息如下:

This is MetaPost, version 1.999 (TeX Live 2015) (kpathsea version 6.2.1)
(/usr/local/texlive/2015/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2015/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./mwe.mp
(/usr/local/texlive/2015/texmf-dist/metapost/base/boxes.mp)
>> -ypart perfect.nw
! Undefined y coordinate has been replaced by 0.
<to be read again> 
                   {
--->{
     curl1}..{curl1}
l.13     draw perfect.s--
                         chordal.n;
?

答案1

boxes.mp需要先调用drawboxed或 ,drawunboxed然后才能使用您定义的框的任何锚点后缀。

避免崩溃的最简单方法是在绘制连接之前绘制框;换句话说,交换命令的顺序,如下所示:

drawboxed(perfect, chordal);
draw perfect.s--chordal.n;

这样,您的示例编译时就不会出现错误。

fixpos直到调用和宏时,锚点才会定义fixsize。调用drawboxed或时会自动调用这些宏drawunboxed

如果你想使用锚点你画好框之后就必须自己打电话fixposfixsize所以在 OP 案例中,你可以这样做:

fixsize(perfect, chordal);
fixpos(perfect, chordal);
draw perfect.s--chordal.n;
drawboxed(perfect, chordal);

以避免第一次出现错误draw。但通常先调用会更简洁drawboxed

OP“黑魔法”之所以有效,是因为bpath宏也自动调用fixposfixsize

欲了解更多详细信息,请浏览的源代码boxes.mp

相关内容