graphicx
当我省略文件扩展名并且同一图像同时存在 PDF 和 PNG 版本时,我能否以某种方式知道选择哪种图形格式includegraphics
?原因是我有一些非常大的 PDF 矢量图形(就文件大小/绘图图元而言),每次查看文档时都需要很长时间才能加载。我想在处理文档时将它们转换为 PNG,并在最终文档中仅使用 PDF 版本。因此,我最终可以切换的全局选项会很棒。
另外一个优点是,如果存在尚未转换为 PNG 的 PDF(如果存在这样的工具),则可以在 LaTeX 运行期间动态地将其转换为 PNG。(我知道如何使用convert
,但不知道如何将其自动包含在 LaTeX 中。)
答案1
具有相同名称和不同扩展名的文件的优先顺序为
.png .pdf .jpg .mps .jpeg .jbig2 .jb2 .PNG .PDF .JPG .JPEG .JBIG2 .JB2
它存储在宏中\Gin@extensions
。因此,如果您同时拥有image.png
和image.pdf
,pdflatex
则将加载前者。
如果你在扩展中混合使用大小写,那么
\DeclareGraphicsExtensions{%
.png,.PNG,%
.pdf,.PDF,%
.jpg,.mps,.jpeg,.jbig2,.jb2,.JPG,.JPEG,.JBIG2,.JB2}
将确保 PNG 始终优先于 PDF 文件。对于最终版本,只需交换两行即可。
Heiko Oberdiek 建议的一个更方便的方法是使用包grfext
:
\usepackage{grfext}
\PrependGraphicsExtensions*{.png,.PNG}
这将具有相同的效果,而无需检查pdftex.def
扩展列表。
如果你还想要自动转换,你可以说
\usepackage{graphicx}
\usepackage{epstopdf}
\epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{convert #1 \OutputFile}
\DeclareGraphicsExtensions{%
.png,.PNG,%
.pdf,.PDF,%
.jpg,.mps,.jpeg,.jbig2,.jb2,.JPG,.JPEG,.JBIG2,.JB2}
当image.pdf
存在但不存在时image.png
,将创建文件并加载到其位置。在和image-pdf-converted-to.png
之间添加您喜欢的选项(例如或类似的内容)。convert
#1
-density 100
您需要pdflatex
使用--shell-escape
选项来调用此自动转换才能工作。当然,\epstopdfDeclareGraphicsRule
当仅应加载 PDF 文件时,您会注释掉最终版本的命令(并在以下行中切换优先顺序)。
答案2
一个实用的解决方案是只使用两个包含插图的子目录pics
和draftpics
,在其中draftpics
存储低分辨率 png。如果您使用如下变量:
\def \picsdir {draftpics}
您可以在使用以下方法包含它们时引用此变量includegraphics
:
\includegraphics[width=\textwidth]{\picsdir/spam}
最后您只需改变变量即可获得最终版本。
附言:我向期刊提交了高分辨率 png(>300 dpi),它们毫无问题地被接受了。而且高分辨率 png 仍然加载得相当快。所以我认为你可能不需要 pdf...
答案3
就我个人而言,我会复制一些.pdf
质量较差的图形,然后使用这些图形,等我完成后,我就会切换到高质量的图形。我不知道是否有自动化的 LaTeX 小工具可以做到这一点。
我在 Bash 中的解决方案(Unix 系统)
我将完整的.pdf
图像存储在子目录中full_images
。使用以下脚本我将它们转换为预览质量:
#!/bin/bash
mkdir -p prev_images
for f in ./full_images/*;
do
echo $f
g=${f#./full_}
convert -density 92 $f ./prev_$g
done
然后我使用以下命令之一将正确的图像移动到文档的根文件夹:
cp -v ./prev_images/* .
cp -v ./full_images/* .
附加选项:
cp
在最后一步中,您可以使用(符号链接)而不是(复制) ln -s
,这样可以节省一些磁盘空间,而不必复制两次图像。命令如下:
ln -s full_images images
ln -s prev_images images
这将创建一个目录链接,您必须通过 使其可搜索\includegraphics
,因此您应该将以下内容放入序言中:
\graphicspath{{images}}
附加选项:
直接更改\graphicspath
,即有两行,其中一行未注释,并且不指定文件夹:
\graphicspath{{full_images/}}
\graphicspath{{prev_images/}}