LINUX.ORG.RU

epstopdf капризничает

 , epstopdf, , ,


0

1

Обнаружил странную и неприятную вещь. Есть tex-документ. В преамбуле указано что-то вроде:

\usepackage{graphicx,color}
\graphicspath{{../images/}}
Соответственно, все картинки в каталоге ../images, мне так удобнее. Просто каталог картинок общий для нескольких документов, картинки там одинаковые.

Картинки, разумеется, в eps. Вот пытаюсь подгрузить:

\begin{figure}[h]
 \includegraphics{vectors}
\end{figure}

Соответственно, файл ../images/vectors.eps существует, всё нормально. Но pdflatex ругается:

epstopdf ($Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $) 2.16
!!! Error: Output filename '../images/benzol-eps-converted-to.pdf' not allowed in restricted mode.

! Package pdftex.def Error: File `../images/benzol-eps-converted-to.pdf' not fo
und.

Как бы руками тот файл через epstopdf нормально, без проблем компилится. И полученный pdf можно, например, вставить в документ. Но этот вариант не Ъ :) хотелось бы автоматической конвертации из eps, раз уж она ДОЛЖНА работать.

Что ещё характерно - если закомментировать строку с \graphicspath{}, и скопировать eps-файл из каталога images в каталог с документом - всё работает, и всё конвертится. Но файлопомойку устраивать не хочется, хочется хранить иллюстрации централизованно.

Что подскажете? epstopdf - скрипт на перле... тут есть специалисты по перлу? Строчки такие там нашёл:

### validate output file name in restricted mode \label{openout_any}
if ($restricted and not safe_name('out', $OutputFilename)) {
  error "Output filename '$OutputFilename' not allowed in restricted mode.";
}

Понять бы только, как это поправить? Просто убрать что ли этот if, или это к чему-то плохому приведёт?

safe_name('out', $OutputFilename)

Ищите функцию safe_name или выше в коде задание значения $restricted.

AITap ★★★★★
()
Ответ на: комментарий от AITap
### check if a name is "safe" according to kpse's open(in|out)_any
# return true if name is ok, false otherwise
sub safe_name
{
  my ($mode, $name) = @_;
  my $option = "";
  $option = '-safe-in-name'  if $mode eq 'in';
  $option = '-safe-out-name' if $mode eq 'out';
  error "Unknown check mode in safe_name(): $mode" unless $option;
  my @args = ($kpsewhich, '-progname', 'repstopdf', $option, $name);
  my $bad = system {$args[0]} @args;
  return ! $bad;
}
### restricted option
$restricted = 1 if $::opt_restricted;
debug "Restricted mode activated" if $restricted;
### process options
use Getopt::Long;
GetOptions (
........................
........................
  "restricted",
  "version",
) or die $usage;

Я так понял, дело в ключе (опции):

--restricted use restricted mode (default: $bool[$restricted])

Видимо, pdflatex по умолчанию запускает его с таким ключом... надо бы вырубить как-то. :)

BattleCoder ★★★★★
() автор топика

Ага, всё именно так, проверил. Если указать скрипту эту опцию - он выкидывает ту же ошибку.

Осталось pdflatex отучить так делать и дело в шляпе. :)

BattleCoder ★★★★★
() автор топика
Ответ на: комментарий от BattleCoder

Загляните в /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg.

Возможно, поможет задание \pdfshellescape == 1 (как?).

AITap ★★★★★
()
Ответ на: комментарий от AITap

Ага... как? надо подумать... будет время, покопаюсь в книжках по латеху по поводу, как там с переменными работать...

Если кто подскажет, буду благодарен. :) Тема ещё не решена...

BattleCoder ★★★★★
() автор топика
12 мая 2013 г.
Ответ на: pdflatex от anonymous

спустя сколько времени... ну попробую =) а почему бы и нет?

BattleCoder ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.