svg 包无法找到 svg 文件

svg 包无法找到 svg 文件

我正在尝试让 svg 包在 OSX 系统上运行。如果我使用 inkscape 将 *.svg 文件保存为 *.pdf 和 *.pdf_tex,那么这个问题 工作正常:

\documentclass{article}
\usepackage{svg}
\usepackage{amsmath}
\begin{document}

\begin{figure}[htbp]
  \centering
  \includesvg{example}
  \caption{svg image}
\end{figure}

\end{document}

但无论我怎么尝试,包都不会自动创建 pdf 和 pdf_tex 文件。相反,我收到一个错误:

! LaTeX Error: File `./example' not found.

我已将 inkscape 添加到 PATH。我已将--shell-escape选项添加到 latex 命令……我不知所措。

答案1

这是 macOS 特有的问题。

调用主 inkscape 二进制文件的 shell脚本inkscape必须将目录更改为 inkscape 安装目录,这就是它无法在当前工作目录中找到 SVG 文件的原因。

/usr/local/bin/inkscape在我的 macOS 上,请参阅 inkscape 脚本第 30 行的解释性注释:

# Due to changes after 0.48, we have to change working directory in the script named 'inkscape':
# recursive calls to inkscape from python-based extensions otherwise cause the app to hang or
# fail (for python-based extensions, inkscape changes the working directory to the 
# script's directory, and inkscape launched by python script thus can't find resources
# like the now essential 'units.xml' in INKSCAPE_UIDIR relative to the working directory).
cd "$BASE" || exit 1

如果我曾经见过的话,那就是确凿的证据。:)

您可以尝试注释掉该cd "$BASE" || exit 1行,转换对于简单的 SVG 仍然有效。这就是我目前正在做的事情。

或者,必须修改svgLaTeX 包以使用完整输入和输出路径名(而不是相对路径名)来调用 inkscape。另一个选择是修改inkscapeshell 脚本以将相对路径扩展为绝对路径。

答案2

检查 inkscape 是否在你的PATH环境变量中。

通过打开命令终端窗口并输入以下内容进行测试inkscape --version(do不是在您安装 inkscape 的目录中执行此操作;我们想看看您的环境是否可以从任意位置(例如您的主目录)找到该程序)

如果它返回一个版本,那么这不是你的问题(抱歉)。

但是,如果它响应任何形式的错误,则 svg 包将无法调用 inkscape 来转换文件。有关将 inkscape 添加到 的说明PATH,请参阅这里这里对于 Windows)。

祝你好运!

答案3

尝试更改命令行调用以首先放置 --shell-escape:

pdflatex --shell-escape -synctex=1 -interaction=nonstopmode example.tex

在 Windows 和 Linux(ubuntu)中,\includesvg 可以工作,但不能工作,有时会出现同样的问题,但其他时候不会出现(但是,在它停止工作后,似乎很难让它再次编译),我发现在命令行中首先添加 --shell-escape 选项似乎可以使 pdflatex 调用工作每一个时间。

我希望这对其他人有所帮助,我一次又一次地被这个问题困扰,没有真正的理由或理由来解释为什么 pdflatex 调用开始失败。

祝你好运!如果其他人也用过,请告诉我。

答案4

我的问题是--clean选项。我通过在 TeXWorks 中选择 pdflatex 解决了这个问题,它突然就构建好了。逐个取出选项帮助我找到了问题的根源。希望这对某人有帮助(可能是六个月后的我)。

相关内容