在我的演示文稿中,我经常用不同的文本填充金字塔,这些文本被框在垂直居中、中间对齐的框架中。我有一个环境,其中定义了一个模板,\startuseMPgraphic
我可以在模板中传递外部宏。
\setuppapersize [S3]
\defineframedtext [Cadre] [align={middle,lohi}]
\startusableMPgraphic{test}
label ("\Cadre{\Legende{}}", origin);
\stopusableMPgraphic
\startreusableMPgraphic{Test}
label ("\Cadre{\Legende{}}", origin);
\stopreusableMPgraphic
\starttext
\def\Legende{hello}
\useMPgraphic{test}
\reuseMPgraphic{Test}
\def\Legende{world}
\useMPgraphic{test} %this is what I want but AFAIK will be calculated at each run
\reuseMPgraphic{Test} %output is not what I want
\stoptext
由于我的演示文稿很长(多达 100 页甚至更多),我想避免在每次编译时计算这些图表。我不能使用\startreusableMPgraphic
和\reuseMPgraphic
,因为文本没有改变。我知道更改 metapost 中的字符串也无济于事,因为有框。有什么技巧可以让这些图表只编译一次,但带有正确的文本?
答案1
您可以在 中绘制图形的静态元素,reusableMPgraphic
然后将其包含在 中usableMPgraphic
。但这需要一些手动工作,因为您将无法在动态部分中引用静态部分的材料。
我已经设置了一些愚蠢的日志记录,以便您可以在终端中看到每个图形被渲染了多少次。
\setuppapersize [S3]
\defineframedtext [Cadre] [align={middle,lohi}]
% This will only be rendered once
\startreusableMPgraphic{static}
label("\Cadre{}", origin);
% Print something to the terminal to show how many times we are rendering
message("Rendering static") ;
\stopreusableMPgraphic
\startusableMPgraphic{dynamic}
draw textext("\reuseMPgraphic{static}") ;
label(\MPstring{Legende}, origin) ;
% Print something to the terminal to show how many times we are rendering
message("Rendering dynamic") ;
\stopusableMPgraphic
\starttext
\setMPtext{Legende}{hello}
\useMPgraphic{dynamic}
\setMPtext{Legende}{world}
\useMPgraphic{dynamic}
\stoptext
在日志中你应该看到
metapost > message : Rendering static
metapost > message : Rendering dynamic
metapost > message : Rendering dynamic