使用 ST3 latextools 构建系统包含 SVG

使用 ST3 latextools 构建系统包含 SVG

我正在尝试使用 SVG 包将 SVG 包含到我的文档中。在 OSX Yosemite 上,我使用 Sublime Text 3 和 LatexTools 包、BasicTex 2015 和通过 Homebrew Cask 安装的 Inkscape。使用 安装了其他缺少的 Tex 包和 SVG 包tlmgr。该inkscape命令可用,因为/usr/local/bin/inkscapehomebrew 已自动创建符号链接。

下面是我的最小示例,取自并进行了简化这里

\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为,simpleLaTeXTools.sublime-settings意味着command您设置的设置将被忽略。由于simple构建器不支持更改传递给的选项pdflatex,并且您需要传递--shell-escape,因此您应该将其重新设置为default

其次,PATHOSX 上图形程序的 至少可以说很烦人。 提供的解决方法LaTeXTools是部分texpath中的设置。您需要确保包含您安装的路径,这对于 svg 包是必需的。我认为应该是,但最好检查一下。(请注意,您将看到默认设置包括,但这通常与您的 shell 上的 不同。要查看这将扩展为什么,请在 Sublime 控制台上运行:。)Platform settingsLaTeXTools.sublime-settingstexpathInkscape$PATH$PATH$PATHimport 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 要好。

相关内容