我有一个使用颜色的 metapost 图表,在普通 latex(带有白色背景)中显示时效果很好。现在,我想将相同的图表添加到使用 Beamer(华沙主题)制作的具有蓝色背景的演示文稿中。图表看起来一点也不好看——颜色冲突,与蓝色相比太暗了……
我已经这样做了:
background:=white;
unfill (0,0)--(20u,0)--(20u,10u)--(0,10u)--cycle;
其效果是绘制一个包含图表的白色矩形,但感觉像是肮脏的黑客行为。
如何才能更加优雅地更改图表的背景?
答案1
以下是在缩放至图像最终边界框的背景上绘制尺寸未知的图像的秘诀:
- 绘制图像。
- 将图像保存在图片变量中。
- 测量图片的边界框。
- 绘制背景。
- 在背景上重新绘制原始图像。
下面是一个例子,后面跟着一些随机注释:
beginfig(1);
%
% Draw random picture.
%
pair p,q;
for i = 1 upto 20:
p := (uniformdeviate 200, uniformdeviate 200);
q := (uniformdeviate 200, uniformdeviate 200);
draw p--q withpen pencircle scaled 2 withcolor red;
endfor
%
% Solution starts here.
%
% Save picture in variable pic for later reference.
picture pic;
pic := currentpicture;
% Clear currentpicture to avoid outputting the picture twice.
currentpicture := nullpicture;
% Fill a rectangle with pic's bounding box dimensions (plus
% bboxmargin) with desired background colour.
% interim bboxmargin := 0;
fill bbox pic withcolor blue;
% Draw original picture on top of background.
draw pic;
endfig;
end
将图像保存在图片变量中可以通过存储currentpicture
在图片变量中或通过image
命令来完成(参见MetaPost 手册了解更多信息)。如果currentpicture
使用该方法(如示例中所示),请确保currentpicture
在绘制背景之前清除。否则,图像将输出两次,第一个副本隐藏在背景后面,导致输出文件膨胀。
该bbox
命令返回一个矩形路径,该路径对应于图片参数的边界框加上由内部变量确定的少量bboxmargin
(默认为 2bp)。
可以使用语句将内部变量局部修改为当前组interim
。也就是说,如果您将对内部变量的赋值包装在begingroup ... endgroup;
组之后,变量的值将恢复。注意,beginfig()
只开始一个以相应的结束的组endfig
。
答案2
我认为用颜色绘制矩形不会那么奇怪:
fill (0,0)--(20u,0)--(20u,10u)--(0,10u)--cycle withcolor white;
它可能是图表的背景,但如果它是你绘制的第一件事,那就没关系了。