Bildformate und Einbindung

Um ein Foto, ein Diagramm oder eine Zeichnung in eine Arbeit oder ein Buch einzufügen, bindest du eine externe Bilddatei in das Dokument ein. Der Einstieg ist der Befehl \includegraphics aus dem Paket graphicx. Diese Seite ordnet die Grundsyntax, Optionen zum Skalieren, Drehen und Zuschneiden, die Einstellung des Suchpfads für Bilder und vor allem die Frage, welche Formate welcher TeX-Engine lesen kann. Zwei Punkte tragen alles: der Unterschied zwischen Vektor- und Rasterbildern und die Abhängigkeit der unterstützten Formate von der verwendeten Engine.

graphicx und \includegraphics

Das Einbinden von Bildern übernimmt das Standardpaket graphicx. Lade es in der Präambel mit \usepackage{graphicx} und schreibe im Text \includegraphics[options]{filename}. graphicx erweitert das ältere Paket graphics; sein wichtiges Merkmal ist die Angabe von Optionen in der Form key=value. Beide gehören zum Standardbündel latex-graphics von LaTeX, es ist also keine zusätzliche Installation nötig.

document.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.6\textwidth]{plot}
\end{document}

Wichtig ist hier: Lass die Erweiterung im Dateinamen weg. Gibt es im Beispiel oben plot.pdf oder plot.png, wählt LaTeX je nach Engine automatisch das passende Format. Eine feste Erweiterung erschwert spätere Formatwechsel und kann bei Namen mit Punkt, etwa plot.tar.gz, falsch interpretiert werden. Aus demselben Grund ist es am sichersten, Leerzeichen und Punkte in Bilddateinamen zu vermeiden.

Liegen Bilder in einem anderen Ordner, kannst du mit \graphicspath den Suchpfad ergänzen. Setze jeden Verzeichnisnamen in eigene geschweifte Klammern, auch bei nur einem Verzeichnis, und schließe jeden mit einem Schrägstrich / ab, auch unter Windows. LaTeX sucht zuerst im aktuellen Verzeichnis und danach in den angegebenen Verzeichnissen der Reihe nach. Ein Pfad mit Leerzeichen wird in Anführungszeichen gesetzt, etwa {"my figures/"}.

latex
\usepackage{graphicx}
\graphicspath{ {figures/} {../shared-figures/} }

Optionen für Größe, Drehung und Zuschnitt

In den eckigen Klammern von \includegraphics listest du Optionen als key=value-Paare auf. Die Größe anzugeben ist in der Praxis fast immer nötig. width= und height= setzen die ausgegebene Breite oder Höhe direkt; Angaben relativ zu \textwidth (Textbreite) oder \linewidth, etwa width=0.8\textwidth, passen das Bild an den Satzspiegel an. scale= ist ein Faktor bezogen auf die natürliche Bildgröße.

Wenn du sowohl width= als auch height= angibst, wird das Seitenverhältnis gebrochen und das Bild verzerrt. keepaspectratio verhindert das: Das Bild wird dann so skaliert, dass es in die angegebene Breite und Höhe passt und seine Proportionen behält. Zum Drehen gibst du bei angle= einen Winkel in Grad gegen den Uhrzeigersinn an; angle=90 dreht das Bild beispielsweise um eine Vierteldrehung.

Zum Beschneiden der Bildränder kombinierst du trim= mit clip. trim erhält vier Werte in der Reihenfolge links, unten, rechts, oben; das ist nicht die intuitive Reihenfolge oben-unten-links-rechts. Die Standardeinheit ist bp (big points). Und füge immer clip hinzu: Ohne clip wird der entfernte Teil nicht verworfen, sondern ragt in den umliegenden Text hinein. Negative Werte machen das Gegenteil und fügen Rand hinzu. Mit viewport= lässt sich der Ausschnitt auch in absoluten Koordinaten angeben.

latex
% 幅を本文幅の半分に
\includegraphics[width=0.5\textwidth]{photo}

% 縦横比を保って枠に収める
\includegraphics[width=8cm,height=5cm,keepaspectratio]{photo}

% 反時計回りに 90 度回転
\includegraphics[angle=90,width=6cm]{diagram}

% 左20 下20 右30 上10(bp) を切り落として表示
\includegraphics[trim=20 20 30 10,clip,width=6cm]{scan}

Die wichtigsten Optionen lassen sich in einer Tabelle zusammenfassen. In der Praxis kombiniert man meist mehrere davon.

OptionWirkung
width=Ausgabebreite; relative Werte wie 0.8\textwidth sind praktisch
height=Ausgabehöhe
scale=Faktor bezogen auf die natürliche Größe (scale=0.5 ist die Hälfte)
angle=Drehwinkel gegen den Uhrzeigersinn (Grad)
keepaspectratioBehält die Proportionen bei, wenn Breite und Höhe angegeben sind
trim= … clipBeschneidet links, unten, rechts, oben; braucht clip, Standardeinheit bp
page=Wählt die einzubindende Seite eines mehrseitigen PDF

Vektor und Raster

Bilder fallen in zwei große Gruppen, und die Wahl prägt das Ergebnis. Vektorbilder beschreiben Punkte, Linien, Kurven und Text als mathematische Koordinaten; PDF, EPS und SVG sind die wichtigsten Beispiele. Weil die Konturen aus der Mathematik neu berechnet werden, bleiben sie bei jeder Vergrößerung scharf, und Text bleibt klar. Rasterbilder (Bitmaps) sind ein Gitter farbiger Pixel, vor allem PNG und JPEG. Beim Vergrößern wächst jedes Pixel, sodass Kanten gezackt oder unscharf werden.

Als Faustregel gilt: Alles, was aus Linien und Text besteht, also Plots, Strichzeichnungen, Schaltbilder oder Abbildungen mit Formeln, sollte vektorbasiert sein (PDF/EPS/SVG). Das ist unabhängig von der Druckauflösung und sieht auf Papier wie am Bildschirm optimal aus. Bilder mit kontinuierlichen Tonwerten, etwa Fotos und Screenshots, sollten Rasterbilder sein (PNG/JPEG). Ein Foto zu vektorisieren bringt nichts und bläht die Datei auf. Wenn du Rasterbilder verwendest, nutze Ausgangsdaten in druckfähiger Auflösung, meist 300 dpi oder mehr. Wenn du Abbildungen in LaTeX erzeugst (TikZ, pgfplots und Ähnliches), ist die Ausgabe von Natur aus vektorbasiert.

Noch ein Wort zu PNG und JPEG. JPEG ist eine verlustbehaftete Kompression für Fotos; die Dateien sind klein, aber an Linien- und Texträndern entstehen Kompressionsartefakte. PNG ist verlustfrei und eignet sich für Screenshots, flächige Grafiken und alles, was Transparenz braucht. Im Zweifel: JPEG für Fotos, PNG für alle anderen Rasterbilder.

Welche Formate die einzelnen Engines lesen

Hier stolpert man besonders leicht. Welche Formate \includegraphics akzeptiert, hängt davon ab, welche TeX-Engine die Datei verarbeitet und welcher Treiber am Ende die Ausgabe erzeugt. Der moderne Standardweg, pdfLaTeX, LuaLaTeX und XeLaTeX mit direkter PDF-Ausgabe, liest PDF, PNG und JPEG nativ. Diese Engines können EPS aber nicht direkt lesen. Der klassische Weg latex + dvips über DVI verarbeitet dagegen EPS nativ, ist aber für PDF oder PNG ungeeignet.

Das im Japanischen häufig verwendete pLaTeX / upLaTeX erzeugt DVI und wandelt es mit dvipdfmx in PDF um. Dieser Weg kann PDF, PNG, JPEG und EPS verarbeiten. Für PNG, JPEG und PDF wird manchmal eine Hilfsdatei (.xbb) mit den Bildmaßen, also der Bounding Box, benötigt; sie wird mit extractbb erzeugt. Wenn du graphicx mit pLaTeX/upLaTeX nutzt, ist es am sichersten, den Ausgabetreiber ausdrücklich anzugeben, etwa \usepackage[dvipdfmx]{graphicx}; pdfLaTeX und ähnliche erkennen ihn automatisch.

VerarbeitungswegNative FormateEPS?
pdfLaTeXPDF, PNG, JPEGNein; mit epstopdf umwandeln
LuaLaTeXPDF, PNG, JPEGNein; mit epstopdf umwandeln
XeLaTeXPDF, PNG, JPEGNein; mit epstopdf umwandeln
pLaTeX/upLaTeX + dvipdfmxPDF, PNG, JPEG, EPSJa (Bounding Box erforderlich)
latex + dvipsEPS (PostScript-Familie)Das ist das native Format

Die praktische Konsequenz ist einfach: Wenn du neu beginnst, stelle Abbildungen als PDF, PNG oder JPEG bereit; dann laufen sie direkt durch pdfLaTeX, LuaLaTeX, XeLaTeX oder dvipdfmx. Die Umwandlungen in den nächsten beiden Abschnitten brauchst du nur, wenn du nur EPS oder SVG hast. Die Verarbeitungswege selbst erklärt die Seite „How processing works“.

EPS und SVG einbinden

EPS (Encapsulated PostScript) ist ein älteres Vektorformat, das manche Zeitschriften in alten Einreichungsregeln noch verlangen. Für pdfLaTeX und ähnliche Wege muss EPS nach PDF umgewandelt werden; lädst du aber das epstopdf package, wird eine EPS-Datei zur Kompilierzeit automatisch in PDF konvertiert und direkt eingebunden. Der Mechanismus greift in die Verarbeitung von graphicx ein, wandelt mit Ghostscript um und überspringt die Arbeit, wenn ein gleichnamiges PDF bereits existiert. Da diese automatische Umwandlung ein externes Programm startet, kompiliere mit --shell-escape (oder -shell-escape). Bei rohem EPS muss die BoundingBox, also die Zeile am Anfang mit der Bildausdehnung, vorhanden und korrekt sein.

latex
\usepackage{graphicx}
\usepackage{epstopdf}  % EPS をコンパイル時に PDF へ自動変換
% コンパイル例: pdflatex --shell-escape main.tex

SVG ist das Standard-Vektorformat im Web, wird aber von keiner TeX-Engine direkt gelesen. Zum Einbinden verwendest du das svg package. Es stellt \includesvg{file} bereit und ruft intern die Kommandozeile von Inkscape auf, um SVG nach PDF zu konvertieren (bei DVI-Ausgabe nach EPS). Außerdem exportiert es Text aus dem SVG in eine separate Datei, die LaTeX setzt; dadurch erscheinen Beschriftungen sauber in der Dokumentschrift. Weil Inkscape aufgerufen wird, braucht auch dies --shell-escape und eine funktionierende Inkscape-Installation. Andernfalls ist es verlässlicher, SVG vorher mit Inkscape oder einem anderen Werkzeug nach PDF umzuwandeln.

Für die Gegenrichtung, also SVG aus TeX-Ausgabe zu erzeugen, gibt es dvisvgm. Es wandelt DVI (sowie EPS und PDF) nach SVG um, unterstützt vertikalen DVI-Satz von pTeX und XDV von XeTeX und bettet die Umrisse der benötigten Glyphen in das SVG ein. Das ist nützlich, wenn eine Formel oder Abbildung als eigenständiges SVG ins Web soll.

Der figure-Float und typische Stolperstellen

\includegraphics setzt das Bild nur an die Stelle; es fügt weder Nummer noch caption hinzu. In einer Arbeit steckt man das Bild normalerweise in eine figure environment, damit es zu einer nummerierten Abbildung wird. LaTeX lässt sie dann je nach Seitenlayout an eine passende Stelle gleiten, \caption{…} gibt ihr eine nummerierte Beschreibung, und mit \label/\ref kann man im Text darauf verweisen, etwa „siehe Abbildung 3“.

latex
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{plot}
  \caption{測定値と理論曲線の比較。}
  \label{fig:plot}
\end{figure}

図~\ref{fig:plot} に示すように……

Float-Platzierung, die Bedeutung von [htbp] und Abbildungen nebeneinander behandelt die Seite „Floats & placement“; caption-Gestaltung und Teilabbildungen die Seite „Captions & subfigures“. Hier folgt eine Liste typischer Probleme beim Einbinden von Bildern.

  • Falsches Format für die Engine: EPS an pdfLaTeX zu geben endet mit Fehlern wie „Cannot determine size of graphic“. Erzeuge PDF/PNG/JPEG oder konvertiere mit epstopdf.
  • EPS BoundingBox: Eine fehlende oder falsche BoundingBox-Zeile führt zu falscher Platzierung. Korrigiere sie mit ps2eps oder epstool.
  • Mehrseitiges PDF: Standardmäßig wird nur die erste Seite eingebunden. Wähle mit page= eine Seite aus; für ein ganzes Dokument nutze das pdfpages package.
  • Weißraum im PDF: Große Ränder in einem Abbildungs-PDF lassen die Abbildung klein wirken. Schneide sie vorher mit pdfcrop (CTAN) ab.
  • Leerzeichen oder Punkte in Dateinamen: Leerzeichen oder Punkte im Pfad oder Namen stören das Einbinden oft. Benenne die Datei um oder setze einen Pfad mit Leerzeichen in Anführungszeichen.
  • Fest codierte Erweiterung: Eine angegebene Erweiterung erschwert Formatwechsel. Schreibe den Namen in der Regel ohne Erweiterung.