graphics

.gifファイルがサポートされていない理由

これは、私が以前から疑問に思っていたことですが、答えは見つかっていません。

ライセンスの問題なのか?ファイル形式が原因?その他の理由?

反対のことを証明するために: GIF を直接埋め込むこと可能ですが、確かに PDF ではなく、SVG 出力では可能です。

バウンディング ボックス情報を含むユーザー提供の <img file base name>.xbb ファイルを使用して、GIF (静的/アニメーション) を別のビットマップ形式 (PNG および JPEG 以外) として扱う graphicx ルールを追加するだけです。

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

480px * 360px の画像の場合、 xbb ファイルの内容は次のようになります。

%%BoundingBox: 0 0 480 360

GIF データを SVG 出力にインライン化するには、GIF ファイルを base64 でエンコードする必要があります。パッケージ media4svg は、ビットマップ ( \Ginclude )の graphicx ドライバー コードを変更するために使用するコマンドを提供します。


(pkg media4svg 、v0.9 2022-08-12 が必要です。)

以下にリストされている example.tex をタイプセットします。

dvilualatex example
dvisvgm --zoom=-1 --bbox=papersize --font-format=woff2 例

or

latex --shell-escape example
dvisvgm --zoom=-1 --bbox=papersize --font-format=woff2 例

or even

xelatex --shell-escape --no-pdf の例
dvisvgm --zoom=-1 --bbox=papersize --font-format=woff2 example.xdv

注意: Firefox は、それ自体が Web ページに埋め込まれている SVG に埋め込まれたアニメーション GIF (TeX.SX など) の再生に失敗します。バグのようです。代わりに、Chromium、Chrome、Opera、Edge などの Blink ベースの Web ブラウザーを使用してください。または、画像を (右) クリックして、独自のブラウザー タブで SVG を開きます。


入力ファイル example.tex

( https://upload.wikimedia.org/wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gifから 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}



1996 年のTUGboatの記事(Keith Reckdahl によって書かれた) には、対応する画像形式についての議論が含まれています。この記事は Volume 17 No. 1 からのもので、Using EPS Graphics in LATEX2ε Documents Part 1と呼ばれています。 dvips を中心にしていますが、直接の pdf 出力についても同様の議論を行うことができます (この質問に関するDavid のコメントを参照してください)。 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のcommand引数を使うことでアクセスできます。直接サポートするよりも柔軟性があり、グラフィックス変換とDVI-PS変換を切り離したままなので、ユーザが自由にグラフィックス変換プログラムを選択できる利点があります。

もう 1 つの興味深い歴史的アプローチが1991 年の記事に記載されています。この記事では、GIF 形式の写真をフォント (!) に変換して、LaTeX ドキュメントに直接含めることができます。