pdflatex -no-shell-escape
当在包含文件的文件上运行时eps
,将不会执行自动转换为 pdf,并且不会包含图像。
令我惊讶的是,在这种情况下:
- 日志文件中没有信息/警告/错误消息
- pdflatex 运行的返回值为 0
- 没有办法检测失败,但检查 pdf 文件
这是故意的吗?有办法检测这种情况吗?
答案1
pdftex.def
并且luatex.def
已在 CTAN 上更新,因此很快就会在 texlive/miktex 中获得更新。
请参见https://github.com/latex3/graphics-def/issues/38以及相关公关
实际上,我的设置epstopdf-base
与下面的建议略有不同。现在,文件始终包含--no-shell-escape
。这可以更好地兼容默认处理,并且确实具有所需的属性,即如果无法进行转换则给出错误,如果存在则包含预转换的 pdf(例如,如果文档先前已使用默认的受限 shell 转义运行)。
原始答案
pdftex.def
我认为可以改进逻辑,在这里添加类似块的内容
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\ifnum\pdfshellescape=0
\expanded{\def\noexpand\Gin@epstopdf@aux#1.\detokenize{eps}}.#2\relax{#1-eps-converted-to.pdf}
\def\Ginclude@eps#1{%
\expanded{\edef\noexpand\Gin@tempa{\noexpand\noexpand\noexpand\Gin@epstopdf@aux#1.\detokenize{eps}\relax}}%
\edef\Gin@tempa{\Gin@tempa}%
\IfFileExists{\Gin@tempa}%
{\Ginclude@pdf{\Gin@tempa}}%
{\PackageError{Graphics}
{No PDF version of #1 available}%
{Shell escape conversion has been disabled}}%
}
\fi
\makeatother
\begin{document}
\includegraphics{ex1.eps}
\includegraphics{ex2.eps}
\end{document}
这意味着如果(从之前的运行或外部进行)ex1-eps-converted-to.pdf
存在,它就会被使用,如果不存在,你就会得到
! Package Graphics Error: No PDF version of ex2.eps available.
See the Graphics package documentation for explanation.
Type H <return> for immediate help.
...
l.24 \includegraphics{ex2.eps}
? h
Shell escape conversion has been disabled
?