передача расширения в \includesvg - будь проклят, если вы это сделаете, будь проклят, если вы это не сделаете

передача расширения в \includesvg - будь проклят, если вы это сделаете, будь проклят, если вы это не сделаете

Я пытаюсь использовать svgпакет для некоторых файлов svg, которые у меня есть в graphics/подкаталоге. Моя команда includegraphics раньше была:

\includegraphics{graphics/foo.png}

Теперь, если я напишу:

\includesvg{graphics/foo.svg}

я получилЭта проблема: Пакет нуждается в васнетуказать расширение файла. Но если я напишу

\includesvg{graphics/foo}

Я получил:

! LaTeX Error: File `./graphics/foo' not found.

и даже если я укажу путь и напишу:

\includesvg[svgpath=./graphics/]{foo}

Я все еще получаю:

! LaTeX Error: File `./graphics/foo' not found.

Наконец, в документации пакета svg говорится:

Путь к svg можно указать с помощью параметра svgpath, при этом путь должен заканчиваться на /.

Так что последняя попытка должна была привести меня туда. Но на всякий случай я попробовал:

\includesvg[svgpath=./graphics/.]{foo}

и все еще получил

! LaTeX Error: File `./graphics/.foo' not found.

Что мне тогда делать?

решение1

Это работает, если вы запускаете pdflatexс -shell-escapeопцией и у вас есть inkscapeв системе. Это вызовет (медленное) преобразование из SVG в PDF с сопутствующим файлом TeX. Последующие запуски не нуждаются в преобразовании, поэтому они также работают без опции -shell-escape.

Итак, если файл test.texвам нужен

pdflatex -shell-escape test

(скорректируйте в соответствии с методом запуска LaTeX в вашей системе).

\documentclass{article}
\usepackage{svg}

\begin{document}

\includesvg[svgpath=./graphics/]{Steps}

\end{document}

Файл SVG взят изhttps://dev.w3.org/SVG/tools/svgweb/samples/svg-files/

введите описание изображения здесь

решение2

Ну, поскольку svgвам в любом случае нужен Inkscape, вы можете просто обойти эту проблему и выполнить преобразование самостоятельно:

inkscape -z --export-pdf=foo.pdf foo.svg

чтобы преобразовать файл раз и навсегда (предполагая, что он не будет изменяться повторно). Чтобы автоматизировать это для всех файлов в текущем каталоге, попробуйте:

ls *.svg | while read f; do inkscape -z --export-pdf="${f/\.svg/.pdf}" "$f"; done

(но убедитесь, что имена ваших файлов не содержат .svg дважды, в противном случае вам понадобится что-то более сложное.)

Связанный контент