graphics

Warum werden .gif-Dateien nicht unterstützt?

Diese Frage stelle ich mir schon seit einiger Zeit,und ich habe noch keine Antwort gefunden.

Liegt es an der Lizenzierung? Wegen des Dateiformats? Aus einem anderen Grund?

Nur um das Gegenteil zu beweisen: Direktes Einbetten von GIF ist möglich, zwar nicht in PDF, aber in SVG-Ausgabe.

Wir müssen nur eine graphicx Regel hinzufügen, die GIF (statisch/animiert) als ein weiteres Bitmap-Format (neben PNG und JPEG) mit einer vom Benutzer bereitgestellten <img file base name>.xbb -Datei behandelt, die die Begrenzungsrahmeninformationen enthält:

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

Für ein 480px * 360px-Bild lautet der Inhalt der xbb -Datei

%%BoundingBox: 0 0 480 360

Für das Inlining von GIF-Daten in die SVG-Ausgabe muss die GIF-Datei base64-codiert sein. Das Paket media4svg stellt dafür einen Befehl zur Verfügung, den wir verwenden, um den Grafiktreiber -Code für Bitmaps ( \Ginclude graphicx zu modifizieren.


(Erfordert pkg media4svg , v0.9 2022-08-12.)

Setzen Sie die unten aufgeführte example.tex mit ein

dvilualatex example
dvisvgm --zoom=-1 --bbox=Papiergröße --font-format=woff2 Beispiel

or

latex --shell-escape example
dvisvgm --zoom=-1 --bbox=Papiergröße --font-format=woff2 Beispiel

or even

xelatex --shell-escape --no-pdf-Beispiel
dvisvgm --zoom=-1 --bbox=Papiergröße --font-format=woff2 example.xdv

NB Firefox kann animierte GIFs nicht wiedergeben, die in SVG eingebettet sind, die selbst in eine Webseite (wie TeX.SX) eingebettet sind. Es sieht aus wie ein Fehler. Verwenden Sie stattdessen einen Blink-basierten Webbrowser wie Chromium, Chrome, Opera oder Edge. Oder klicken Sie mit der rechten Maustaste auf das Bild, um das SVG in einem eigenen Browser-Tab zu öffnen.


Eingabedatei example.tex .

(GIF herunterladen von 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}



Es gibt einen Artikel in TUGboat aus dem Jahr 1996 (geschrieben von Keith Reckdahl), der eine Diskussion über unterstützende Bildformate enthält. Der Artikel stammt aus Band 17 Nr. 1 und heißt Using EPS Graphics in LATEX2ε Documents Part 1 . Die Diskussion konzentriert sich auf dvips , aber ein ähnliches Argument kann für die direkte PDF-Ausgabe vorgebracht werden (siehe Davids Kommentar zu dieser Frage). Auch die historische Praxis, keine direkte Unterstützung in dvips zu implementieren, könnte die Entscheidungen für pdflatex und spätere Compiler beeinflusst haben.

Zitat (Seite 52-53):

10.3 Einschließen von Nicht-EPS-Grafikdateien

Während es einfach ist,EPS-Grafiken in LATEX-Dokumente einzufügen,ist es nicht so einfach,Nicht-EPS-Grafiken (GIF,TIFF,JPEG,PICT usw.)einzufügen.

[...]

10.3.1 Direkte Unterstützung für Nicht-EPS-Grafiken

Es wird oft gewünscht,dass LATEX und dvips die direkte Einbindung von Nicht-EPS-Grafikformaten unterstützen,so dass es so einfach ist wie das Einfügen von EPS-Dateien.Dies wäre zwar praktisch,aber leider gibt es einige Probleme,die die Sache verkomplizieren.

Zum Beispiel verwenden die meisten Nicht-EPS-Grafikformate binäre Dateien,die von TEX nicht gelesen werden können,was LATEX daran hindert,die Größe der Nicht-EPS-Grafiken zu bestimmen.Außerdem würde die Unterstützung von Nicht-EPS-Grafiken erfordern,dass dvips Grafikkonvertierungsfunktionen (GIF-zu-PS,TIFF-zu-PS usw.)einbaut.Dies würde nicht nur einen hohen Programmieraufwand bedeuten,sondern auch einen erhöhten Wartungsaufwand in der Zukunft.

Anstatt Grafikkonvertierungsroutinen direkt einzubinden,bietet dvips einen Mechanismus zum Aufruf externer Konvertierungsprogramme.Auf diesen Mechanismus kann von LATEX aus über das Befehlsargument von \DeclareGraphicsRule zugegriffen werden.Dies hat den Vorteil,dass es flexibler ist als eine direkte Unterstützung,und da es die Grafikkonvertierung von der DVI-zu-PS-Konvertierung entkoppelt,steht es dem Benutzer frei,sein eigenes Grafikkonvertierungsprogramm zu wählen.

Ein weiterer interessanter historischer Ansatz wird in einem Artikel aus dem Jahr 1991 beschrieben , in dem Fotos im GIF-Format in eine Schriftart (!) umgewandelt werden, um sie direkt in LaTeX-Dokumente einzufügen.