
我正在嘗試使用該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 兩次,否則您需要更多的內容。)