graphics

Почему файлы .gif не поддерживаются

Это вопрос,который я задавал себе некоторое время и не нашел ответа.

Из-за проблем с лицензированием? Из-за формата файла? Какая-то другая причина?

Просто чтобы доказать обратное: прямое встраивание GIF возможно , правда, не в PDF, но в выводе SVG.

Нам просто нужно добавить правило graphicx , которое обрабатывает GIF (статический/анимированный) как другой формат растрового изображения (помимо PNG и JPEG) с предоставленным пользователем <img file base name>.xbb , содержащим информацию о ограничивающей рамке:

\DeclareGraphicsRule{.gif}{bitmap}{.xbb}{}

Для изображения 480px * 360px содержимое файла xbb читается

%%BoundingBox: 0 0 480 360

Для встраивания данных GIF в вывод SVG файл GIF должен быть закодирован в base64. Пакет media4svg предоставляет для этого команду, которую мы используем для изменения кода драйвера graphicx для растровых изображений ( \Ginclude ).


(Требуется pkg media4svg , v0.9 12 августа 2022 г.)

Наберите example.tex , указанный ниже, с

dvilualatex example
dvisvgm --zoom=-1 --bbox=размер бумаги --font-format=woff2 пример

or

latex --shell-escape example
dvisvgm --zoom=-1 --bbox=размер бумаги --font-format=woff2 пример

or even

xelatex --shell-escape --no-pdf пример
dvisvgm --zoom=-1 --bbox=размер бумаги --font-format=woff2 пример.xdv

NB Firefox не может воспроизводить анимированный GIF, встроенный в SVG, который сам встроен в веб-страницу (например, TeX.SX). Это похоже на ошибку. Вместо этого используйте веб-браузер на основе Blink, например Chromium, Chrome, Opera или Edge. Или щелкните правой кнопкой мыши изображение, чтобы открыть SVG на отдельной вкладке браузера.


Входной файл example.tex .

(Скачать GIF с https://upload.wikimedia.org/wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gif )

\documentclass[dvisvgm]{article}

% download `Newtons_cradle_animation_book_2.gif' before typesetting:
%
% https://upload.wikimedia.org/wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gif

\usepackage[a6paper]{geometry}
\usepackage{graphicx}
\DeclareGraphicsRule{.gif}{bitmap}{.xbb}{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% provide BoundingBox information in a separate .xbb file
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{filecontents}[overwrite,noheader]{Newtons_cradle_animation_book_2.xbb}
%%BoundingBox: 0 0 480 360
\end{filecontents}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% patch graphics backend driver `dvisvgm.def' to physically embed
% bitmaps into DVI
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\let\Ginclude\Ginclude
\def\Ginclude#1{%
  \baseSixtyFour{#1}{72}{{?nl}}\bitmap%
  \Ginclude{%
    data:image/\expandafter\remove\Gin;;base64,{?nl}%
    \bitmap}%
}
\def\remove.#1;{#1}
\makeatother

\RequirePackage{media4svg} % provides base64-encode utility
\ExplSyntaxOn
\cs_new:Npn\baseSixtyFour#1#2#3#4{
  \sys_if_engine_luatex:TF{
    \xdef#4{\directlua{media4svg.base64("#1",#2,"#3")}}
  }{
    \msvg_convert_file_to_blob:nnnN{#1}{#2}{#3}#4
  }
}
\ExplSyntaxOff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\section{Animated GIF}
\noindent\includegraphics[width=\linewidth]{Newtons_cradle_animation_book_2.gif}

\end{document}



В TUGboat есть статья 1996 года (написанная Китом Рекдалом), в которой обсуждается поддержка форматов изображений. Статья взята из 17-го тома № 1 и называется « Использование EPS-графики в документах LATEX2ε, часть 1» . Обсуждение сосредоточено вокруг dvips , но аналогичный аргумент можно привести и для прямого вывода в формате pdf (см . комментарий Дэвида к этому вопросу). Также историческая практика отказа от прямой поддержки в dvips могла повлиять на выбор, сделанный для pdflatex и более поздних компиляторов.

Цитата (стр.52-53):

10.3 Включение графических файлов, отличных от EPS

В то время как в документы LATEX легко вставлять графику EPS,не так просто вставлять графику не-EPS (GIF,TIFF,JPEG,PICT и т.д.).

[...]

10.3.1 Прямая поддержка графики, отличной от EPS

Часто просят,чтобы LATEX и dvips поддерживали прямое включение графических форматов,не относящихся к EPS,делая это так же просто,как вставка файлов EPS.Это было бы удобно,но,к сожалению,есть некоторые проблемы,которые усложняют ситуацию.

Например,большинство не-EPS графических форматов используют двоичные файлы,которые не могут быть прочитаны TEX,что не позволяет LATEX определить размер не-EPS графики.Более того,поддержка не-EPS графики потребовала бы от dvips возможности преобразования графики (GIF в PS,TIFF в PS и т.д.).Это не только потребовало бы много программирования,но и потребовало бы большего обслуживания в будущем.

Вместо того,чтобы напрямую включать процедуры преобразования графики,dvips предоставляет механизм вызова внешних программ преобразования.Этот механизм может быть доступен из LATEX с помощью аргумента команды \DeclareGraphicsRule.Преимущество этого механизма в том,что он более гибкий,чем прямая поддержка,и поскольку он позволяет не отделять преобразование графики от преобразования DVI в PS,пользователи могут свободно выбирать свою собственную программу преобразования графики.

Еще один интересный исторический подход описан в статье 1991 года, где фотографии в формате GIF конвертируются в шрифт (!) для непосредственного включения в документы LaTeX.