我正在使用 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