Übergabe der Erweiterung an \includesvg - verdammt, wenn Sie es tun, verdammt, wenn Sie es nicht tun

Übergabe der Erweiterung an \includesvg - verdammt, wenn Sie es tun, verdammt, wenn Sie es nicht tun

Ich versuche svg, das Paket für einige SVG-Dateien zu verwenden, die ich in einem Unterverzeichnis habe graphics/. Mein Includegraphics-Befehl lautete früher:

\includegraphics{graphics/foo.png}

Wenn ich jetzt schreibe:

\includesvg{graphics/foo.svg}

Ich bekommedieses Problem: Das Paket braucht dichnichtum die Dateierweiterung anzugeben. Aber wenn ich schreibe

\includesvg{graphics/foo}

Ich bekomme:

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

und selbst wenn ich den Pfad einstelle und schreibe:

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

Ich bekomme immer noch:

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

Abschließend heißt es in der Dokumentation des SVG-Pakets:

Der Pfad zur SVG-Datei kann mit der Option svgpath angegeben werden, wobei der Pfad mit einem / enden muss.

Mit diesem letzten Versuch hätte ich es also schaffen sollen. Aber nur um auf Nummer sicher zu gehen, habe ich Folgendes versucht:

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

und habe immer noch

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

Was sollte ich dann tun?

Antwort1

Dies funktioniert, vorausgesetzt, Sie starten pdflatexmit der -shell-escapeOption und haben diese inkscapeauf Ihrem System. Dadurch wird die (langsame) Konvertierung von SVG nach PDF mit einer begleitenden TeX-Datei aufgerufen. Spätere Ausführungen benötigen die Konvertierung nicht, daher funktionieren sie auch ohne die -shell-escapeOption.

Wenn die Datei also ist, test.texdie Sie brauchen

pdflatex -shell-escape test

(Passen Sie es an die Methode an, mit der Sie LaTeX auf Ihrem System ausführen).

\documentclass{article}
\usepackage{svg}

\begin{document}

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

\end{document}

Die SVG-Datei stammt vonhttps://dev.w3.org/SVG/tools/svgweb/samples/svg-files/

Bildbeschreibung hier eingeben

Antwort2

Da svgohnehin Inkscape benötigt wird, können Sie das Problem einfach umgehen und die Konvertierung selbst durchführen:

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

um die Datei ein für alle Mal zu konvertieren (vorausgesetzt, sie ändert sich nicht wiederholt). Um dies für alle Dateien im aktuellen Verzeichnis zu automatisieren, versuchen Sie:

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

(Stellen Sie jedoch sicher, dass Ihre Dateinamen nicht zweimal .svg enthalten, da Sie sonst etwas Komplizierteres benötigen.)

verwandte Informationen