\reuseMPgraphic 是否改变从 ConTeXt 传递的文本?

\reuseMPgraphic 是否改变从 ConTeXt 传递的文本?

在我的演示文稿中,我经常用不同的文本填充金字塔,这些文本被框在垂直居中、中间对齐的框架中。我有一个环境,其中定义了一个模板,\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

相关内容