我使用\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