pdflatex,包含 eps 文件,使用 -no-shell-escape 运行 => 没有错误/警告/消息但输出损坏

pdflatex,包含 eps 文件,使用 -no-shell-escape 运行 => 没有错误/警告/消息但输出损坏

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
? 

相关内容