將擴展名傳遞給 \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 兩次,否則您需要更多的內容。)

相關內容