我正在尝试将 Inkscape 生成的 pdf 图像(其中包含要由 LaTeX 解释的文本)包含到 LaTeX 文档中。
当我将图像文件保存在与 tex 文件相同的文件夹中时,它可以工作,但我希望将图像放在子文件夹中img
。
我已经看到了关于如何实现这一点的多条说明,但最被接受的方法似乎是使用 的包svg
,\includepackage{svg}
告诉 LaTeX 在哪里使用 来查找文件/图像\svgpath{{img/}}
,然后使用 将图像插入到文档中\input{example.pdf_tex}
。
梅威瑟:
\documentclass{standalone}
\usepackage{svg}
\svgpath{{img/}}
\begin{document}
\input{example.pdf_tex}
\end{document}
这也是svg
软件包文档
但是,当我这样做时,LaTeX 无法找到该文件,并且出现错误
! LaTeX Error: File `example.pdf_tex' not found.
现在,还有其他方法可以完成我想要做的事情。例如,使用命令包含\graphicspath{{img/}}
或使用该包。我也尝试过使用绝对路径执行这些命令。import
\import{<path to file>}{<filename>.pdf_tex}
有人知道哪里出了问题吗?
答案1
svg
实际上,使用同名包包含文件的方法是使用命令\includesvg
(作为正常图形包含的附属\includegraphics
)。此命令的参数应指向文件svg
(不是该文件),您可以使用宏 (作为 的引号)pdf_tex
告诉 LaTeX 在哪里查找该文件。然后 LaTeX 将自动调用 Inkscape 创建和文件 (如果它们已过期或不存在) 并包含它们。\svgpath
\graphicspath
pdf
pdf_tex
因此,你的 MWE 应该为
\documentclass{article}
\usepackage[inkscapearea=page]{svg}
\svgpath{{img/}}
\begin{document}
\includesvg{example}
\end{document}
example.svg
位于子文件夹中的位置img/
。(我包含该inkscapearea=page
选项是因为我认为这是大多数人想要的。)
为了实现此功能,您需要在启用 shell escape 的情况下运行 LaTeX,并在系统路径变量中设置 Inkscape。请参阅这个答案以获得更详细的解释。
答案2
我使用 Rasmus 对我的原始问题的评论中提出的建议解决了这个问题。由于它需要一个额外的步骤,我在这里给出了完整的解决方案。
通过在将 pdf_tex 文件包含在文档中时告诉 LaTeX 其位置,可以解决此问题\input{img/example.pdf_tex}
。通过在前言中添加 ,可以告诉 LaTeX 在哪里可以找到相应的 pdf 文件\graphicspath{{img/}}
。这会告诉 LaTeX 在此文件夹中搜索图像。
请注意,添加\svgpath{{img/}}
序言而不是\graphicspath{{img/}}
不起作用,它会引发编译错误/警告LaTeX Warning: File `example.pdf' not found
。这对我来说是正确的,我正在使用 TeX Live 2019 发行版。
因此,以下内容有效:
\documentclass{standalone}
\usepackage{svg}
\graphicspath{{img/}}
\begin{document}
\input{img/example.pdf_tex}
\end{document}
希望这对其他人也有用。