확장자를 \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 패키지 문서에는 다음과 같이 나와 있습니다.

svg에 대한 경로는 svgpath 옵션을 사용하여 지정할 수 있습니다. 여기서 경로는 /로 끝나야 합니다.

그래서 그 마지막 시도가 나를 거기까지 데려왔어야 했어요. 하지만 안전을 위해 다음을 시도했습니다.

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

그리고 아직도 얻었어

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

그러면 어떻게 해야 합니까?

답변1

pdflatex옵션 을 사용하여 실행 하고 시스템에 -shell-escape있는 경우 작동합니다. inkscape이는 TeX 파일과 함께 SVG에서 PDF로의 (느린) 변환을 호출합니다. 이후 실행에는 변환이 필요하지 않으므로 옵션 없이도 작동합니다 -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 -z --export-pdf=foo.pdf foo.svg

파일을 한 번에 변환합니다(반복적으로 변경되지 않는다고 가정). 현재 디렉토리의 모든 파일에 대해 이를 자동화하려면 다음을 시도하십시오.

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

(그러나 파일 이름에 .svg가 두 번 포함되지 않는지 확인하십시오. 그렇지 않으면 더 관련된 내용이 필요합니다.)

관련 정보