我正在写一个文档,里面有很多图表,其中包含大量数据点。这些图表以矢量图像的形式存储.pdf
,渲染需要很长时间。所以每次我偶然发现一个包含这些图表的页面,我的编辑器就会卡住一分钟。
我知道 graphicsx 有一个草稿选项,但它会隐藏图像,这不是一个很好的解决方案,因为这样我就无法仅通过文件名区分图像。这些是实验运行的结果,名称非常通用。
有没有办法.png
在草稿模式下将图像栅格化(例如)并在最终模式下使用原始图像.pdf
?我知道我可以使用 ImageMagick 或任何外部工具进行转换,但这似乎需要做很多额外的工作,因为我需要将每个图像添加到 makefile 中并复制\includegraphics
草稿和最终版本。
graphicsx 的一些参数,例如type
或,command
在文档中没有解释。是否可以使用其中一个来实现?我是否可以挂接\includegraphics
并调用外部命令?我可以编写命令,但我不知道钩子在 LaTeX 中是如何工作的。
除此之外,我很清楚光栅图形在质量方面不如矢量图形。我将在最终版本中使用矢量图形。这仅用于快速草稿预览。
答案1
可以更改图像的搜索路径:
\graphicspath
其中包含 PDF 图像或它的对应物 PNG 图像的目录。\DeclareGraphicsExtensions
当图像文件没有扩展名时,可用于更改首先使用哪个扩展名的顺序。软件包grfext
提供了用于更改设置的接口。
epstopdf
如果使用 pdfTeX 或 luaTeX 并且启用了 shell 转义功能,则可以使用包自动调用从 PDF 到 PNG 的转换。
例子:
如果\mydraft
定义为Y
( \let\mydraft=Y
),则扩展的规则将被覆盖,以通过 ImageMagick 的.pdf
进行转换为。否则优先使用扩展。.png
convert
.pdf
\documentclass{article}
\usepackage{graphicx}
\usepackage{grfext}
\ifx\mydraft Y
\usepackage{epstopdf-base}
\epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{%
convert #1 \OutputFile
}
\epstopdfDeclareGraphicsRule{.PDF}{png}{.png}{%
convert #1 \OutputFile
}
\else
\PrependGraphicsExtension*{.pdf}
\fi
\begin{document}
\includegraphics{image}
\end{document}
特殊草稿模式通过 启用\let\mydraft=Y
,也可以在命令行中给出,例如:
pdflatex --shell-escape "\let\mydraft=Y\input{mydocument}"
然后image.pdf
转换并包含为image-pdf-converted-to.png
。
否则,image.pdf
就算谎言存在,也是包含image.png
在内的。
关键\includegraphics
转换功能也可以\includegraphics
通过使用密钥来限制pdfpng
。密钥代码会更改文件的图形规则,以.pdf
将其转换为 PNG。如果\mydraft
不是Y
,则密钥为无操作。
\documentclass{article}
\usepackage{graphicx}
\usepackage{grfext}
\ifx\mydraft Y
\usepackage{epstopdf-base}
\csname define@key\endcsname{Gin}{pdfpng}[]{%
\epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{%
convert ##1 \OutputFile
}%
}
\else
\PrependGraphicsExtensions*{.pdf}
\csname define@key\endcsname{Gin}{pdfpng}[]{}
\fi
\begin{document}
\includegraphics{image1}
\includegraphics[pdfpng]{image2-converted-to-png-when-mydraft}
\includegraphics{image3}
\end{document}
当 处于活动状态时,可以\define@key
代替 来使用。)\csname define@key\endcsname
\makeatletter