我正在尝试使用 SVG 包将 SVG 包含到我的文档中。在 OSX Yosemite 上,我使用 Sublime Text 3 和 LatexTools 包、BasicTex 2015 和通过 Homebrew Cask 安装的 Inkscape。使用 安装了其他缺少的 Tex 包和 SVG 包tlmgr
。该inkscape
命令可用,因为/usr/local/bin/inkscape
homebrew 已自动创建符号链接。
下面是我的最小示例,取自并进行了简化这里:
\documentclass{article}
\usepackage{svg}
\begin{document}
\begin{figure}[htbp]
\centering
\includesvg{test}
\caption{svg test}
\end{figure}
\end{document}
test.svg
是一个非常简单的图形,文件与位于同一目录中test.tex
。按照提议这里我添加了以下几行builder_settings
:
"program": "pdflatex",
"command": ["latexmk", "-cd", "-e", "$pdflatex = '%E -shell-escape -interaction=nonstopmode -synctex=1 %S %O'", "-f", "-pdf"],
svg.sty
我甚至尝试按照建议弄乱路径定义这里但构建引擎显然无法使用 Inkscape 生成 pdf 和 tex 文件。这是 ST 控制台输出:
[Compiling /Users/mcnesium/Desktop/ma/tex/test.tex]
SimpleBuilder: pdflatex run 1; done.
Errors:
./test.tex:7: LaTeX Error: File `./test' not found. [ \includesvg{test}]
./test.tex:7: LaTeX Error: File `./test' not found. [ \includesvg{test}]
./test.tex:7: LaTeX Error: File `test.pdf_tex' not found. [ \includesvg{test}]
[Done!]
谁有类似的设置并能指出我的设置出了什么问题?
答案1
我实际上对 svg 包不太了解,但我对 LaTeXTools 有所了解。
首先,从控制台输出来看,您已将设置设置builder
为,simple
这LaTeXTools.sublime-settings
意味着command
您设置的设置将被忽略。由于simple
构建器不支持更改传递给的选项pdflatex
,并且您需要传递--shell-escape
,因此您应该将其重新设置为default
。
其次,PATH
OSX 上图形程序的 至少可以说很烦人。 提供的解决方法LaTeXTools
是部分texpath
中的设置。您需要确保包含您安装的路径,这对于 svg 包是必需的。我认为应该是,但最好检查一下。(请注意,您将看到默认设置包括,但这通常与您的 shell 上的 不同。要查看这将扩展为什么,请在 Sublime 控制台上运行:。)Platform settings
LaTeXTools.sublime-settings
texpath
Inkscape
$PATH
$PATH
$PATH
import os; os.environ['PATH']
答案2
我发现至少在我的设置中该inkscape
命令仅在使用时有效绝对路径输入和输出文件(见这个错误)。这可能会破坏 SVG 包的功能。
testsvg.svg
因此我编写了这个 bash 脚本,在 Inkscape 中点击保存后立即启动该脚本:
#!/usr/local/bin/bash
dirname=$(dirname "$1");
fullpath=$(cd "$dirname" && pwd -P)/;
inputfile=$(basename "$1");
filename=${inputfile%.*}
svg="$fullpath$inputfile";
pdf="$fullpath$filename".pdf;
$(which inkscape) -z -C -f $svg -A $pdf --export-latex;
以下部分是可选的。我使用它是因为我的 svg 文件位于我的主要 tex 文件的子目录中。因此,在构建 *.pdf_tex 文件中对 *.pdf 文件的引用时,需要附加子目录,如下所示:
$(which sed) -i 's/'"$filename.pdf"'/'"$dirname\/$filename.pdf"'/g' "$pdf"_tex;
在 TeX 文件中我使用以下方式引用它
\begin{figure}
\begin{center}
\def\svgwidth{\columnwidth}
\input{figures/testsvg.pdf_tex}
\end{center}
\end{figure}
确保 SVG 文件的名称与 TeX 文件的名称不同,否则输出 PDF 将与 Inkscape 辅助 PDF 混淆。
这不像使用 ST Build System 那样酷,但比在 Inkscape 中来回保存为 PDF 和 SVG 要好。