pasando la extensión a \includesvg - maldito si lo haces, maldito si no lo haces

pasando la extensión a \includesvg - maldito si lo haces, maldito si no lo haces

Estoy intentando usar el svgpaquete para algunos archivos svg que tengo en un graphics/subdirectorio. Mi comando de inclusión de gráficos solía ser:

\includegraphics{graphics/foo.png}

Ahora, si escribo:

\includesvg{graphics/foo.svg}

yo obtengoeste problema: El paquete te necesitanopara especificar la extensión del archivo. Pero si escribo

\includesvg{graphics/foo}

Yo obtengo:

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

e incluso si establezco la ruta y escribo:

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

Todavía recibo:

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

Finalmente, la documentación del paquete svg dice:

La ruta al archivo svg se puede especificar usando la opción svgpath, donde la ruta debe terminar en /.

Entonces ese último intento debería haberme llevado allí. Pero para estar seguro, intenté:

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

y todavía tengo

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

¿Que debería hacer entonces?

Respuesta1

Esto funciona, siempre que inicie pdflatexcon la -shell-escapeopción y la tenga inkscapeen su sistema. Esto llamará a la (lenta) conversión de SVG a PDF, con un archivo TeX adjunto. Las ejecuciones posteriores no necesitan la conversión, por lo que también funcionan sin la -shell-escapeopción.

Entonces, si el archivo es test.texlo que necesitas

pdflatex -shell-escape test

(Ajuste según el método con el que ejecuta LaTeX en su sistema).

\documentclass{article}
\usepackage{svg}

\begin{document}

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

\end{document}

El archivo SVG ha sido tomado dehttps://dev.w3.org/SVG/tools/svgweb/samples/svg-files/

ingrese la descripción de la imagen aquí

Respuesta2

Bueno, dado que svgnecesita Inkscape de todos modos, puede evitar el problema por completo y realizar la conversión usted mismo:

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

para convertir el archivo de una vez por todas (suponiendo que no cambie repetidamente). Para automatizar eso en todos los archivos en el directorio actual, intente:

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

(pero asegúrese de que los nombres de sus archivos no contengan .svg dos veces, de lo contrario necesitaría algo más complicado).

información relacionada