将扩展名传递给 \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 包文档说:

可以使用 svgpath 选项指定 svg 的路径,其中路径必须以 / 结尾。

所以最后一次尝试应该能让我成功。但为了安全起见,我尝试了:

\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,否则您将需要更多复杂的东西。)

相关内容