Texmaker (及类似产品) - 如何使用 \usepackage{svg} (尤其是在 Mac OS 上)

Texmaker (及类似产品) - 如何使用 \usepackage{svg} (尤其是在 Mac OS 上)

我在 Mac 上使用 TexMaker 并尝试将一些 svg 包含到我的文档中。

我觉得我的问题和这个问题很相似svg 包无法找到 svg 文件 但我无法解决我的问题。

  • 我已经安装了 inkscape 和 XQuartz
  • 控制台: which inkscape = /usr/local/bin/inkscape (看起来不错
  • 控制台:inkscape -z -D --file=/Users/myName/Desktop/_Images/image.svg --export-pdf=/Users/myName/Desktop/_Images/image.pdf --export-latex 生成所有文件!(看起来不错
  • 我在 PdfLaTeX 和 LuaLaTex 中添加了 --shell-escape在此处输入图片描述

平均能量损失

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

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

\end{document}

TexMake 错误消息:

! 软件包 svg 错误:文件“image.svg”丢失。请参阅 svg 软件包文档了解解释。输入 H 可立即获得帮助…… \includesvg{_Images/image}

更新

如果我将 image.svg 放在根目录中并调用,\includesvg{image}错误消息将更改为:

! 软件包 svg 错误:文件“image_svg-tex.pdf”丢失。请参阅 svg 软件包文档了解解释。输入 H 可立即获得帮助…… \includesvg{image}

! 软件包 svg 错误:文件“image_svg-tex.pdf_tex”丢失。请参阅 svg 软件包文档了解解释。输入 H 可立即获得帮助…… \includesvg{image}

使用 Inkscape 导出文件(svg)“image.svg”(svg)失败 故障排除:请在日志文件中检查 Inkscape 的调用方式,并尝试在终端中自行执行它

更新2

正如评论中提到的,我现在不使用其他输出路径! 在此处输入图片描述

答案1

请注意,虽然提问者接受了这个答案,但他们的问题\usepackage{svg)尚未解决(请参阅下面的评论)。这部分是由于在 Mac OS 中 Latex 调用 Inkscape 存在已知问题。解决方法包装器需要以与 Inkscape 通常相同的方式调用。因此,它需要位于 $PATH 中,或者从编辑器中以固定的绝对位置调用,方式与下面所述相同。请参阅包装在这里此处关闭问题

至少有两个包在 .svg / .pdf_tex 和 inkscape 之间进行交互,并且这个答案只解决一个问题,即 {svg},因此不是 {svg-inkscape} 包。

自早期版本的 {svg}(特别是与 \pkg{polyglossia} 和 \pkg{tikzscale} 一起使用)以来,发生了一些变化,目前这些观察结果与版本 2.02b 有关,这是当前更新的 MiKTeX(2019)或 Tex Live(2018+)中的最新版本,两者均于 2019 年 1 月更新。因此,一些较旧的建议具有误导性,但基本原理仍然相同。不要指望所有较旧的 .svg 文件示例都按照文档所述的方式运行,在这些情况下会提出一个单独的问题。我尚未测试的一个因素是 Inkscape 版本(传统上为 0.4x,当前为 0.9x,很快就会是 1.0 以上)导致的变化,这些观察结果基于当前的 0.92.4

这个答案纯粹是如何调用 Inkscape 构建混合 svg 文件 对于已从 Inkscape 导出的图像,您可以使用 \input{images/image.pdf_tex}
此答案并非旨在解决为什么导入的带图号结果无法按预期运行。  
假设您已通过两个主要 tex 管理器之一安装了该包。我将忽略与下载到个人 texmf/TDS 位置相关的任何问题(只是不要)。

测试期间您的设置,将 .svg 文件放在与 .tex 文件相同的文件夹中(请注意,在回答问题时,下面增强的 MWE 会查看 _Images 子文件夹,并且可以调整为使用固定位置,因此请编辑以删除 _Images/ 或将您的 .svg 放在 .tex 文件夹和库文件夹中),那么您将不会收到最初不可避免的文件“image.svg”丢失消息。
您可能会在日志中看到

There's no file 'image.svg' neither in the current directory nor any other searched path given by \svgpath or \graphicspath. Following folders have additionally been searched: 

 
1) -shell-escape 必须处于活动状态对于调用 Inkscape 和构建输出文件和文件夹,否则日志将令人困惑地显示许多错误
! 包 svg 错误:缺少文件“image_svg-tex.pdf”。有关解释,请参阅 svg 包文档。您是否使用 Inkscape 运行导出?虽然找到了“_Images/image.svg”,但没有文件“./svg-inkscape/image_svg-tex.pdf”。! 包 svg 错误:缺少文件“image_svg-tex.pdf_tex”。有关解释,请参阅 svg 包文档。您是否使用 Inkscape 运行导出?虽然找到了“_Images/image.svg”,但没有文件“./svg-inkscape/image_svg-tex.pdf”。

您正在寻找的是

"Package svg Warning: You didn't enable 'shell escape' (or 'write18') so it wasn't possible to launch the Inkscape export for '_Images/image.svg' on input line"  

 
2)Inkscape 在系统范围内活跃至关重要因此可通过“系统路径”上的系统调用获得。默认操作是使用所需设置调用 InkScape,因此不要尝试添加 -z -D --export-latex 中的任何内容。如果 Inkscape 不在路径上、设置不正确或无法访问,您将再次看到如上所示的多个错误,并且

"Package svg Warning: The export with Inkscape failed for file 'yourimagepath/filename.svg' Troubleshooting: Please check in the log file how the invocation of Inkscape took place and try to execute it yourself in the terminal on input line"

! Package svg Error: File `imagefilename_svg-tex.pdf' is missing etc. etc.

我们不应该从日志中看到

Package svg Info: Calling Inkscape on input line ##. 
runsystem(inkscape -z -D --export-latex --file="_Images/image.svg" --export-pdf="image_svg-tex.pdf" )...executed

在 Windows 上,你可能会看到下面这一行熟悉的语句

'inkscape' is not recognized as an internal or external command, operable program or batch file.   

对于 Texmaker,您可以轻松地在选项 > 配置 > 命令的左下角添加现有文件夹的路径注意语法可以不同Mac 冒号用作路径分隔符,而Windows 分号用于为单独的路径添加前缀。请记住,需要添加的是文件夹,而不是可执行文件,在 Mac 上/Applications/Inkscape.app/Contents/Resources/bin在 Windows 上,它可能位于以下两个文件夹之一中:c:\program files\inkscape

注意:此修复仅适用于从编辑器运行 InkScape。如果您希望在系统范围内使用它(包括从命令行控制台),Mac 中的符号链接请参见https://stackoverflow.com/questions/22085168/inkscape-command-line-where-is-it-on-mac#comment47253346_22085247

对于 Windows 用户,需要添加系统路径。请参阅以下指南https://helpdeskgeek.com/windows-10/add-windows-path-environment-variable/

在此处输入图片描述

如果在 Mac 上我们“添加到路径”(如上所示)或在序言中正确的 Inkscape 二进制位置(例如 /Applications/Inkscape.app/Contents/Resources/bin),那么我们应该期望在日志中显示 Inkscape 的合理运行

笔记 Inkscape维基百科仍然提到Mac OS X 上的别名问题 并建议使用 \newcommand 来尝试处理路径问题。

然而,由于我们似乎从来没有在 MAC 上从编辑器成功调用 Inkscape,所以我在这里删除了它们

对于 TeXworks (Windows) 用户,有一个类似的简单修复方法,可以在此处添加 Inkscape 路径https://tex.stackexchange.com/a/474119/170109

 
3)如果在子文件夹中,源文件.svg 必须位于明确定义/终止的路径上/,请参阅我在 MWE 中的评论,否则你会看到与上面类似的内容(但仅限第二部分

!  Package svg Error: File 'imagefilename_svg-tex.pdf' is missing.

如果在工作文件夹中构建子目录 svg-inkscape 时出现问题,则可能会出现相同的失败。如果您看到类似以下内容的内容,则可以在日志中确认这一点

Access is denied. Access is denied. Access is denied.

不要使用较旧的图像路径选项,否则您可能会看到

"Package svg Warning: The key 'svgpath' is deprecated. It's recommended to use '\svgpath' instead on input line ##"  

 
修订后的通用 MWE

\listfiles 
\documentclass[]{scrreprt}% Test
\usepackage[T1]{fontenc}
%\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{subcaption}

\usepackage[]{graphicx}
% \usepackage[options]{graphicx} % if used [with or without options], this package must be before {svg} see readme
\usepackage{svg} % Version 2 will run inkscape -z -D --export-latex  --file="filename.svg" --export-pdf="filename_svg-tex.pdf
% or comment out above and uncomment alternate next line where we specify the location of the Inkscape binary (Note start with / do not add to the end) this is where I tested a path to a bin containing inkscape. For a Mac it may differ if using the wrapper fix as described at https://github.com/mrpiggi/svg/issues/1
% \usepackage[inkscapeexe=/Applications/Inkscape.app/Contents/Resources/bin/inkscape]{svg}

\usepackage{svg-extract} % as and when required
% \svgsetup{clean=true} % remove temporary files
\providecommand{\transparent}[1]{} % see manual
% \pdfsuppresswarningpagegroup=1 % hot fix if required, see manual
\usepackage{relsize} % required for adjusting text using relscale

% we can change the input folder to a group of alternative locations & here one is the subdir _Images/ as requested
\svgpath{{_Images/}{/usr/local/svg/}{/MyDocs/MySVGs/}} % paths must be / terminated and IF a subdir NOT start with /
% On success by default the outputs will be in a new subdirectory as svg-inkscape/filename_svg-tex.pdf and filename_svg-tex.pdf_tex  

\begin{document}

\begin{figure}
\begin{minipage}{.5\linewidth}

\includesvg[width=\linewidth]{svg-example}%
\subcaption{Default text is too large!}

\end{minipage}%
\begin{minipage}{.5\linewidth}

\includesvg[width=\linewidth,pretex=\relscale{0.6}]{svg-example}%
\subcaption{This scaled text fits better.}

\end{minipage}
\caption{An example figure with \LaTeX~support}\label{fig:svg-example}
\end{figure}

\begin{figure}
\begin{minipage}{.5\linewidth}

\includesvg[inkscapelatex=false,extractformat={pdf,eps}]{svg-example}
\subcaption{Above example figure without \LaTeX~support}%

\end{minipage}
\begin{minipage}{.5\linewidth}\centering
\includesvg[width=1.2\linewidth,pretex=\relscale{0.85},angle=-10]{root}
\subcaption{Rendering of a ROOT plot, even @ an angle}\label{fig:root}
\end{minipage}
\end{figure}

\end{document}

我们可能仍然会在第一次运行时收到警告,而且情况并没有好多少second run when we may use \input{images/image.pdf_tex}(但这是一个单独的问题)
这是位于“TeX....texmf/doc/latex/svg/examples/”文档文件夹中的示例 .svg 的原始结果。

![在此处输入图片描述

答案2

我担心问题的一部分出在 svg 包中,它使用选项 -z 和 --file 调用 inkscape,这两个选项在当前版本 1.0(2020-05-01)中都无效。

相关内容