我正在尝试使用该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,否则您将需要更多复杂的东西。)