Text transformieren

Das Paket graphicx stellt Befehle bereit, die Inhalt in eine *Box* setzen und diese dann drehen, skalieren oder spiegeln. Der Inhalt muss kein Bild sein: ein Satz, eine Formel oder ein ganzes tabular, alles, was in eine Box passt, kann transformiert werden. Diese Seite behandelt vier Befehle, \rotatebox (Drehen), \scalebox (Skalieren um einen Faktor), \reflectbox (horizontales Spiegeln) und \resizebox (Skalieren auf eine Zielgröße), sowie den zentralen Unterschied: Gibst du einen *Faktor* oder eine *Zielgröße* an?

Die Box-Transformationen von graphicx

Um diese Befehle zu verwenden, lädst du \usepackage{graphicx} in der Präambel. Trotz des Namens sind sie nicht nur für Bilder gedacht. Die von graphicx definierten Transformationen, \rotatebox, \scalebox, \resizebox samt \resizebox* und \reflectbox, funktionieren alle gleich: Sie setzen ihr Argument in eine Box und transformieren dann diese ganze Box. Daher kannst du nicht nur ein Bild (\includegraphics) transformieren, sondern jedes Material, das in eine Box passt, etwa Text, Formeln oder Tabellen.

Der rote Faden ist der Unterschied zwischen Befehlen, die einen Faktor erwarten, und Befehlen, die eine Zielgröße erwarten. \scalebox bekommt einen relativen Faktor, etwa „0,8-mal so groß“ oder „doppelt so groß“. \resizebox dagegen bekommt eine absolute Endgröße, etwa „5cm breit“ oder „volle Textbreite“, und berechnet den nötigen Faktor. \rotatebox bekommt einen Winkel, \reflectbox spiegelt. Die folgende Tabelle fasst das zusammen.

BefehlAngabeWirkung
\rotateboxWinkel (Grad)Dreht den Inhalt gegen den Uhrzeigersinn
\scaleboxFaktor (relativ)Skaliert den Inhalt um einen Faktor
\reflectbox(nichts)Spiegelt den Inhalt horizontal
\resizeboxZielbreite und -höhe (absolut)Skaliert den Inhalt auf diese Größe

Drehen - \rotatebox

\rotatebox{angle}{content} setzt den Inhalt in eine Box und dreht ihn um den angegebenen Winkel in Grad gegen den Uhrzeigersinn. Ein positiver Winkel dreht nach links, ein negativer nach rechts. \rotatebox{90}{...} stellt den Inhalt beispielsweise aufrecht, fast wie vertikal gesetzt, während \rotatebox{-90}{...} ihn in die andere Richtung kippt.

latex
これは \rotatebox{45}{斜めの文字} です。

This is \rotatebox{45}{slanted text}.

In diesem Beispiel wird nur die Wendung „slanted text“ um die linke untere Ecke um 45 Grad angehoben, während der umgebende Text waagerecht bleibt. Beachte, dass die gedrehte Box höher ist als das Original; die Zeile, in der sie steht, wird entsprechend höher.

Den Drehpunkt kannst du mit dem optionalen Argument [origin=...] ändern. origin bekommt eine oder zwei Angaben aus l (links), r (rechts), c (Mitte), t (oben), b (unten) und B (Grundlinie). \rotatebox[origin=c]{180}{...} dreht den Inhalt zum Beispiel um 180 Grad um die Mitte seiner Box und stellt ihn auf den Kopf. Standard ist lB (links an der Grundlinie). Feiner geht es mit x= und y= für einen beliebigen Drehpunkt sowie units=, das die Winkeleinheit selbst umdefiniert (units=-360 ergibt Uhrzeigersinn, units=6.283185 Radiant).

latex
\rotatebox[origin=c]{180}{さかさま}\quad\rotatebox{90}{タテ}

Skalieren per Faktor und Spiegeln - \scalebox und \reflectbox

\scalebox{factor}{content} skaliert den Inhalt um einen Faktor. \scalebox{2}{...} verdoppelt ihn, \scalebox{0.5}{...} halbiert ihn. Der Faktor gilt in beiden Richtungen gleich, daher bleibt die Form, also das Seitenverhältnis, erhalten.

Wenn beide Richtungen getrennt gestreckt werden sollen, gib als optionales zweites Argument einen vertikalen Faktor an. Die Form lautet \scalebox{h-factor}[v-factor]{content}. \scalebox{1}[2]{...} lässt die Breite unverändert, verdoppelt aber die Höhe; \scalebox{0.8}[1.2]{...} macht den Inhalt 0,8-mal so breit und 1,2-mal so hoch. Fehlt der vertikale Faktor, wird der horizontale verwendet, also gleichmäßig skaliert.

latex
\scalebox{2}{大きく}\quad\scalebox{0.5}{小さく}\quad\scalebox{1}[2]{縦長}

Ein Faktor darf auch negativ sein; dann wird entlang dieser Achse gespiegelt. \scalebox{-1}[1]{...} bedeutet horizontaler Faktor -1 und vertikaler Faktor 1, also ein horizontales Spiegelbild. Dafür stellt graphicx die Kurzform \reflectbox{content} bereit: Sie bedeutet genau \scalebox{-1}[1]{...}. Entsprechend ergibt \scalebox{1}[-1]{...} eine vertikale Spiegelung.

latex
Able was I \reflectbox{Able was I}

In diesem Beispiel folgt auf die Wendung „Able was I“ ihr Spiegelbild, also dieselbe Wendung von links nach rechts gespiegelt.

Auf eine Zielgröße skalieren - \resizebox

\resizebox{width}{height}{content} skaliert den Inhalt auf eine angegebene Endgröße. Während \scalebox relativ ist, also „so viele Male das Original“, bekommt \resizebox eine absolute Zielgröße, etwa „5cm breit“ oder „2cm hoch“, und LaTeX berechnet den nötigen Faktor. \resizebox{3cm}{2cm}{...} streckt den Inhalt getrennt in beiden Richtungen auf genau 3cm Breite und 2cm Höhe.

Wenn nur eine Dimension festgelegt und das Seitenverhältnis erhalten bleiben soll, setze in die andere ein Ausrufezeichen !. Die !-Richtung übernimmt einfach den aus der angegebenen Richtung berechneten Faktor. Das ist die häufigste Form: \resizebox{\textwidth}{!}{...} macht den Inhalt genau so breit wie den Text und skaliert die Höhe proportional. \resizebox{!}{1cm}{...} macht ihn 1cm hoch, die Breite folgt proportional.

In den Größenargumenten kannst du \width, \height, \totalheight und \depth verwenden; sie stehen für die ursprünglichen Maße des Inhalts. \resizebox{2\width}{!}{...} heißt „doppelte ursprüngliche Breite“. Die Sternform \resizebox*{width}{height}{content} interpretiert das zweite Argument als Höhe + Tiefe, also Gesamthöhe einschließlich allem unterhalb der Grundlinie; die Form ohne Stern zählt nur die Höhe oberhalb der Grundlinie.

latex
% 元の幅の倍に
\resizebox{2\width}{!}{倍の幅}

% 高さ 1cm、横は比例
\resizebox{!}{1cm}{Tall}

Eine zu breite Tabelle verkleinern

Der häufigste praktische Einsatz von \resizebox ist, eine Tabelle zu verkleinern, die über die Textbreite hinausragt. Umschließe das ganze tabular mit \resizebox{\textwidth}{!}{...}, und die Tabelle wird genau auf die Textbreite skaliert. Da Box-Transformationen nicht darauf achten, was innen steckt, funktioniert das mit Tabellen genauso.

latex
\resizebox{\textwidth}{!}{%
  \begin{tabular}{lrrr}
    項目 & 第1四半期 & 第2四半期 & 第3四半期 \\
    \hline
    売上 & 120 & 138 & 151 \\
    費用 & 80 & 84 & 90 \\
  \end{tabular}%
}

Dieser Trick ist allerdings ein zweischneidiges Schwert. Da \resizebox alles im Inneren, einschließlich des Textes, skaliert, führt starkes Verkleinern zu Schrift, die kleiner als der Fließtext und manchmal schwer lesbar ist; außerdem passt sie optisch nicht mehr zur Umgebung. Eine nachträgliche Fontgrößenangabe für die Tabelle hilft nicht, weil am Ende die ganze Box skaliert wird. Der bessere Weg ist daher, die Tabelle selbst passend zu machen: Spaltenbreiten anpassen, \small und Verwandtes verwenden oder Spalten streichen. \resizebox bleibt die letzte Möglichkeit. Details stehen auf der Seite zum Tabellenlayout.

adjustbox als höherwertige Alternative

Die graphicx-Befehle sind schlicht und mächtig, aber in Kombination werden sie schnell tief verschachtelt. Das Paket adjustbox, geladen mit \usepackage{adjustbox}, ist eine höherwertige Alternative, die diese Funktionen in eine \includegraphics-artige Schlüssel-Wert-Schnittstelle bündelt. Mit \adjustbox{key=value,...}{content} kannst du angle= (Drehen), scale= (Faktor), width=/height= (Zielgröße), reflect (Spiegeln) und mehr zugleich angeben; eine gleichnamige Umgebung adjustbox gibt es ebenfalls.

latex
\adjustbox{angle=45,scale=0.8}{まとめて変形}

\adjustbox{max width=\textwidth}{%
  \begin{tabular}{lrr} ... \end{tabular}%
}

Besonders praktisch ist max width=\textwidth, ebenso max totalheight= und Ähnliches. Das \resizebox{\textwidth}{!}{...} aus dem vorigen Abschnitt vergrößert auch eine Tabelle, die schmaler als der Text ist; max width= hingegen verkleinert nur bei Überlauf und lässt den Inhalt sonst unverändert. Tabellen, die passen, behalten also die Schrift des Fließtexts, und nur zu breite Tabellen werden verkleinert. Für Dokumente mit viel Drehen, Skalieren und Spiegeln oder für saubere Überlaufbehandlung ist adjustbox die angenehmere Wahl.