如何在 ConTeXt 中缩放 MetaPost 绘图并使其具有一致的线宽和标签文本大小?

如何在 ConTeXt 中缩放 MetaPost 绘图并使其具有一致的线宽和标签文本大小?

我正在使用 MetaPost 在 ConTeXt 文档中创建一些简单的绘图。在此示例中,我有一排 14 个框:

\startMPcode
    draw (0,0)--(100,0)--(100,100)--(0,100)--(0,0);
    draw (100,0)--(200,0)--(200,100)--(100,100)--(100,0);
    draw (200,0)--(300,0)--(300,100)--(200,100)--(200,0);
    draw (300,0)--(400,0)--(400,100)--(300,100)--(300,0);
    draw (400,0)--(500,0)--(500,100)--(400,100)--(400,0);
    draw (500,0)--(600,0)--(600,100)--(500,100)--(500,0);
    draw (600,0)--(700,0)--(700,100)--(600,100)--(600,0);
    draw (700,0)--(800,0)--(800,100)--(700,100)--(700,0);
    draw (800,0)--(900,0)--(900,100)--(800,100)--(800,0);
    draw (900,0)--(1000,0)--(1000,100)--(900,100)--(900,0);
    draw (1000,0)--(1100,0)--(1100,100)--(1000,100)--(1000,0);
    draw (1100,0)--(1200,0)--(1200,100)--(1100,100)--(1100,0);
    draw (1200,0)--(1300,0)--(1300,100)--(1200,100)--(1200,0);
    draw (1300,0)--(1400,0)--(1400,100)--(1300,100)--(1300,0);
\stopMPcode

为了使该对象适合可用的文本宽度,我\scale[width=\textwidth]{}在代码周围放置了代码。

这会导致两个问题:

(1) 其他 MetaPost 绘图也按比例缩小,最终边框宽度也不同。例如,如果我在页面上放置一个巨大的框,并按文本宽度缩放,使用此代码,最终边框会非常粗:

\scale[width=\textwidth]{
   \startMPcode
        draw (0,0)--(100,0)--(100,100)--(0,100)--(0,0);
    \stopMPcode
}

我需要所有图纸的边框宽度一致。

(2)在框内添加的任何标签文本最终都会被缩放(例如非常小),但我需要图纸内的字体与文档中的字体大小相同。

在我的文档中放置 MetaPost 绘图的正确方法是什么,以便所有 MetaPost 绘图都有一致的线宽,并且字体在文档的其余部分显示时保持相同的大小?

答案1

正确的做法是缩放单位。在这种情况下,这很容易,因为你事先知道图片的确切范围。

\showframe
\starttext
\startMPcode
    pickup pencircle scaled .5bp ; % defaultpen
    numeric u ; u := (\the\textwidth - .5bp)/1400 ;
    for i = 0 upto 13:
        label(decimal i, ((i + .5) * 100u, 50u)) ;
        draw unitsquare scaled (100u) xshifted (i*100u) ;
    endfor ;
\stopMPcode
\stoptext

在此处输入图片描述

相关内容