我正在尝试编写一份大型协作文档,其中包含其他协作者经常更新的图像中的建模输出。我没有得到这些图像。我仍然想编写整个文档。
我一直在使用,\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