当图像完全丢失但打开某些图像时进行编译?

当图像完全丢失但打开某些图像时进行编译?

我正在尝试编写一份大型协作文档,其中包含其他协作者经常更新的图像中的建模输出。我没有得到这些图像。我仍然想编写整个文档。

我一直在使用,\usepackage[demo]{graphicx}这很好,因为即使图像是完全地缺失。正如以下建议的那样:当图像缺失或不可用时编译文件

但是我确实想包含一些图像(我有数据的图像)。我想在使用时添加特定\includegraphics[draft=false]{image}图像\usepackage[draft]{graphicx}关闭和打开图形中的图像。但是,此选项似乎不适用于\usepackage[demo]{graphicx}

请注意,由于跨平台协作,团队必须省略图像扩展,从而导致一些图像生成时带有.PDF扩展,而一些图像生成时带有.pdf

有人知道这里有一个好的解决方案吗?

答案1

似乎你默认提供了图像文件扩展名。这很有用,因为graphics处理方式不同:如果你不提供图像扩展名,并且文件不存在,它只会创建一个警告[错误]。从编译的角度来看,这会产生不同的效果,因为警告并不重要。

因此我建议使用

\usepackage[draft]{graphicx}

这是一个简单的例子:

在此处输入图片描述

\documentclass{article}

\usepackage[draft]{graphicx}

\begin{document}

\includegraphics[width=100pt]{some-bizarre-image.png}% This does not exist

\includegraphics[width=150pt,draft=false]{example-image.png}% This exists (http://ctan.org/pkg/mwe)

\end{document}

如果您没有默认提供图像文件扩展名,则可能需要更新\includegraphics以搜索可能包含的文件。假设您正在使用 pdfLaTeX 进行编译,我们可以循环浏览可能的图像文件扩展名

在此处输入图片描述

\documentclass{article}

\usepackage[draft]{graphicx}
\usepackage{pgffor,letltxmacro}

% https://tex.stackexchange.com/q/72930/5764
% .png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPEG,.JBIG2,.JB2

\newif\iffilefound
\LetLtxMacro\oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[2][]{%
  \global\filefoundfalse
  \foreach \fext in {,.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPEG,.JBIG2,.JB2} {%
    \iffilefound\else\IfFileExists{#2\fext}{\global\filefoundtrue\xdef\imgfile{#2\fext}}{}\fi%
  }%
  \iffilefound
    \oldincludegraphics[#1]{\imgfile}%
  \else
    \oldincludegraphics[#1]{example-image}%
  \fi
}

\begin{document}

\includegraphics[width=100pt]{some-bizarre-image}% This does not exist

\includegraphics[width=150pt,draft=false]{example-image}% This exists (http://ctan.org/pkg/mwe)

\end{document}

我们循环遍历所有可能的扩展名(包括根本没有扩展名,如果您确实手动提供了扩展名作为 的一部分\includegraphics),并将找到的第一个可用扩展名标识为组合。如果图像不存在,\imgfile我们将插入虚构的(但存在的)文件名的图像。.png

相关内容