当图形缺失时,如何让 ConTeXt 忽略任何“\externalfigure[]”代码?

当图形缺失时,如何让 ConTeXt 忽略任何“\externalfigure[]”代码?

我使用\externalfigure[filename.png]ConTeXt 在文档中显示 PNG 文件,例如:

\starttext
    \externalfigure[001.png]
\stoptext

有时找不到文件。在这种情况下,ConTeXt 会编译,但在页面上显示图像所在的大片灰色空间。

如果图像文件丢失,我怎样才能让 ConTeXt 在应该有图像的位置不打印任何内容?

答案1

我找不到这样的选项,所以唯一的选择就是删除低级命令的主体。

\unprotect
\def\grph_include_replacement#1#2#3{}
\protect

\starttext
\externalfigure[nop]
\stoptext

输出是空白页(如预期的那样)。

您也可以使用\doifelsefigure。 其优点\doiffileexistselse在于它尊重图像的解析器设置。

\setupexternalfigures[location={local,global,default}]
\starttext

\doifelsefigure{nop}{\externalfigure[nop]}{}

\stoptext

答案2

您可以使用\doiffileexistselse命令(或\doifelsefileexists执行完全相同的操作),其语法如下

\doiffileexistselse{file name}{true code}{false code}

因此你的 MWE 变成

\starttext

\doiffileexistselse {001.png} {\externalfigure[001.png]} {}

\stoptext

您可以定义一个包装器,例如,我定义了一个\tryexternalfigure似乎可以正常工作的命令。然后在正文中,您可以使用与相同的语法使用它\externalfigure,并且它足够智能,可以处理\externalfigure所需的 1 到 3 个参数。

\def \tryexternalfigure {\dotripleempty \dotryexternalfigure}
\def \dotryexternalfigure [#1][#2][#3]{%
  \iffirstargument
    \doiffileexistselse{#1} {\externalfigure[#1][#2][#3]} {}%
  \fi
}

\starttext

\tryexternalfigure[001.png]

\tryexternalfigure[002.png][scale=2000]

\stoptext

相关内容