我有一个相当模糊的问题。简而言之,我正在使用一个框架将我的类似 markdown 的文件转换为 html 页面。其中一个文件包含一个动画 gif。我正在尝试编写一个脚本,该脚本还将我的每篇博客文章转换为 latex,然后转换为 pdf。显然这会产生错误,因为通常 \includegraphic 不支持 GIF。
也就是说,即使 gif 是动画,我也不需要也不希望它在最终的 pdf 中是动画(因为这在某些 pdf 阅读器中可能无法正确显示)。所以我完全可以接受将 gif 视为非动画 gif。然而,我特别需要的是 \includegraphic 来处理 gif(好像它不是动画)并修复错误。请注意,由于框架会为我转换 md,因此我不能使用 \includegraphic 以外的命令。但是,我确实可以将所需的任何 latex 插入到 latex 文档的开头。
编辑
这个问题有两个部分
- 即时将 gif 转换为 png
- 重新定义 \includegraphics 以便它自动处理 gif 的 #1,并正常处理其他图像。
有人认为,解释如何即时转换 gif 的问题与此问题重复。但事实并非如此,因为此问题与上一个问题不同,还要求回答上面的 #2。
答案1
TeX 在引擎层面不支持 GIF 图像(我甚至不确定 PDF 格式是否允许 GIF),因此软件包无法解决这个问题。您能做的最好的事情就是将 GIF 转换为支持的格式并改为包含该格式。
这是包含.gif
扩展名为图形文件的图形规则,它将包含.gif
LaTeX 文档中文件的第一帧。它需要安装 ImageMagick 进行转换,并且需要您使用-shell-escape
命令行选项运行 LaTeX。该规则使用 ImageMagick 将转换.gif
为.png
文件,然后包含该文件.png
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{shellesc}
\makeatletter
\edef\Gin@extensions{\Gin@extensions,.gif}
\@namedef{Gin@[email protected]}#1{{gif}{.gif}{#1}}
\def\Gread@gif#1{%
\IfFileExists{#1}{%
\ifnum\ShellEscapeStatus=1
\ShellEscape{convert #1[0] #1-converted.png}%
\Gread@png{#1-converted.png}%
\else
\errmessage{Shell escape disabled.}%
\fi}
{\errmessage{gif}{File '#1' does not exist.}}}
\def\Ginclude@gif#1{\Ginclude@png{#1-converted.png}}
\makeatother
\begin{document}
\includegraphics{giphy.gif}
\end{document}