选择在 PDFLaTeX 中是否包含 PDF 或 PNG

选择在 PDFLaTeX 中是否包含 PDF 或 PNG

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.pngimage.pdfpdflatex则将加载前者。

如果你在扩展中混合使用大小写,那么

\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

一个实用的解决方案是只使用两个包含插图的子目录picsdraftpics,在其中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/}}

相关内容