\includegraphics,尝试另一个扩展

\includegraphics,尝试另一个扩展

我有许多文件(jupyter 笔记本) 基本上是使用浏览器界面创建和访问的,并且由于浏览器界面的存在,在文档中包含外部矢量图片的最简洁的方法是使用SVG格式。

这些文件可以转换对于 LaTeX 文档,虽然很容易在生成的文件中添加更多内容,但就加载包、重新定义命令等而言,修改生成的其余文本并不容易,尤其是包含如下行的文本

\includegraphics{my_picture.svg}

根本pdflatex就不升值。

我的问题是,是否可以重新定义\includegraphics以便 在指示加载时pdflatex尝试加载?my_picture.pdfmy_picture.svg

我知道我可以从自动转换.svgpdf但由于其他原因我已经拥有.pdf文件(实际上是使用 LateX 生成并随后转换为.svg


PS 可以在运行之前对转换过程生成的 LaTeX 文件进行后处理pdflatex(或者我应该说预处理?)但我想避免这个中间步骤。

答案1

您可以添加图形规则(我没有测试它是否适用于所有类型的路径和奇怪的文件名):

\documentclass[a4paper,12pt]{book}


\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{etoolbox}
\makeatletter
\preto\Gin@extensions{svg,}
\DeclareGraphicsRule{.svg}{pdf}{.pdf}{\noexpand\[email protected]}
\makeatother

\begin{document}

\includegraphics{example-image-A.svg}

\end{document}

答案2

重新定义命令总是有可能的,问题是:如果我这样做,它会破坏某些东西吗?如果你确定\includegraphics使用仅有的要导入 svg 文件,可以这样做:

\documentclass{article}
\usepackage{graphicx}

\let\oig\includegraphics
\def\topdf#1.svg{#1.pdf}
\renewcommand{\includegraphics}[2][]{\oig[#1]{\topdf#2}}

\begin{document}
\includegraphics[width=.25\linewidth]{test.svg}
\end{document}

\topdf去掉svg扩展名并将其替换为pdf:( \topdf lalala.svg -> lalala.pdf参数周围没有括号)。

相关内容