我有许多文件(jupyter 笔记本) 基本上是使用浏览器界面创建和访问的,并且由于浏览器界面的存在,在文档中包含外部矢量图片的最简洁的方法是使用SVG格式。
这些文件可以转换对于 LaTeX 文档,虽然很容易在生成的文件中添加更多内容,但就加载包、重新定义命令等而言,修改生成的其余文本并不容易,尤其是包含如下行的文本
\includegraphics{my_picture.svg}
根本pdflatex
就不升值。
我的问题是,是否可以重新定义\includegraphics
以便 在指示加载时pdflatex
尝试加载?my_picture.pdf
my_picture.svg
我知道我可以从自动转换.svg
为pdf
但由于其他原因我已经拥有.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
参数周围没有括号)。