![如何在 ConTeXt 中缩放 MetaPost 绘图并使其具有一致的线宽和标签文本大小?](https://linux22.com/image/394767/%E5%A6%82%E4%BD%95%E5%9C%A8%20ConTeXt%20%E4%B8%AD%E7%BC%A9%E6%94%BE%20MetaPost%20%E7%BB%98%E5%9B%BE%E5%B9%B6%E4%BD%BF%E5%85%B6%E5%85%B7%E6%9C%89%E4%B8%80%E8%87%B4%E7%9A%84%E7%BA%BF%E5%AE%BD%E5%92%8C%E6%A0%87%E7%AD%BE%E6%96%87%E6%9C%AC%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
我正在使用 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