epstopdf 和 graphicspath 与 pdflatex

epstopdf 和 graphicspath 与 pdflatex

如果我在子文件夹中有一个 eps 文件并使用 graphicspath 指向它,它似乎无法进行转换,日志显示:

(epstopdf)             Output file: </path/to/image/img-eps-converted-to.pdf>
(epstopdf)             Command: <repstopdf --outfile=/path/to/image/img-eps-converted-to.pdf /path/to/image/img.eps>
(epstopdf)             \includegraphics on input line 72.
runsystem(repstopdf --outfile=/path/to/image/img-eps-converted-to.pdf /path/to/image/img.eps)...executed safely (allowed).

Package epstopdf Info: Result file: </path/to/image/img-eps-converted-to.pdf>.

./chapters/results2.tex:72: Package pdftex.def Error: File `/path/to/image/img-eps-converted-to.pdf' not found.

如果我运行epstopdf --outfile=/path/to/image/img-eps-converted-to.pdf /path/to/image/img.eps它,它会正常工作。如果我用 运行相同的命令repstopdf,它会返回:

!!! Error: Output filename '/path/to/image/img-eps-converted-to.pdf' not allowed in restricted mode.

跑步ls -ld /path/to/image回报:

drwxrwxr-x

文件例如:

测试.tex:

\documentclass[maintest.tex]{subfiles}
\graphicspath{{/path/to/image/}}
\epstopdfsetup{outdir=/path/to/image/} 
\begin{document}

\begin{figure}
  \includegraphics{img.eps}
\end{figure}

\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 

主测试.tex:

\documentclass{book}
\usepackage{mystyle}

\begin{document}

\subfile{chapters/test}

\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 

mystyle.tex:

\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{subfiles}
\usepackage{epstopdf}

答案1

运行外部程序存在安全风险。因此默认设置是一种妥协。允许使用一些或多或少安全的程序(希望更多“更多”)。这称为受限 shell 转义模式。功能epstopdf太强大,它可以覆盖任意文件。因此,创建了一个受限版本,它遵循TeX Live 2015repstopdf的策略texmf.cnf,限制输出文件的写入:texmf.cnf

% Allow TeX \openin, \openout, or \input on filenames starting with `.'
% (e.g., .rhosts) or outside the current tree (e.g., /etc/passwd)?
% a (any)        : any file can be opened.
% r (restricted) : disallow opening "dotfiles".
% p (paranoid)   : as `r' and disallow going to parent directories, and
%                  restrict absolute paths to be under $TEXMFOUTPUT.
openout_any = p
openin_any = a

% Write .log/.dvi/etc. files here, if the current directory is unwritable.
%TEXMFOUTPUT = /tmp

在您的情况下,输出文件名以“/”开头,因此它是一个绝对文件名,并且TEXMFOUTPUT可能未设置变量。

可能的解决方案/解决方法:

  • 由于文件位于当前工作目录的子文件夹中,请尝试使用相对文件名。

  • 如果检测到受限 shell 逃逸,则由软件包作者(我)提供的TeX Liveepstopdf-sys.cfg将程序名称设置为repstopdf。如果检测到完整 shell 逃逸,epstopdf则使用。因此,您也可以使用 运行您的项目pdflatex -shell-escape

相关内容