Skip to content

Explizite Positionierung in LaTeX

Mit LaTeX lassen sich zahlreiche Texte und Werke setzen (auch wenn für einige LaTeX ggf. nicht die erste Wahl ist). Für manche Aufgaben benötigt man eine explizite Positionierung von Objekten. Als Beispiel sei die Postererstellung genannt, wo man die einzelnen Textblöcke frei auf dem Blatt verteilen möchte. Der Artikel soll zwei Möglichkeiten für diese Positionierung aufzeigen.

Einleitung

Für die explizite Positionierung bzw. allgemein für das Setzen von Elementen in einem Gitter gibt es für LaTeX zahlreiche Pakete, von denen viele aber sehr speziell sind und nicht allgemein angewendet werden können.

Es werden daher in diesem Artikel nur die Pakete erwähnt, die eine echte explizite Positionierung erlauben. Dies kann entweder in der Form „Setze mir ein beliebiges LaTeX-Element an eine bestimmte Position (X,Y) auf der Seite“ oder auch „Setze ein beliebiges LaTeX-Element relativ zu anderen auf die Seite“.

textpos

Das LaTeX-Paket textpos wurde von Norman Gray erstellt, existiert bereits seit 1999 und wird immer noch gepflegt. Die einfachste Anwendung sieht so aus:

\documentclass{scrartcl}
\usepackage[absolute]{textpos}

\begin{document}
Das ist der normale Text der Seite,
der normalerweise nicht benutzt wird.

\begin{textblock*}{29mm}(45mm,80mm)
Hier steht ein kleines bisschen mehr
Text als in die ganze Box passt.
\end{textblock*}

\end{document}

Durch die Option absolute des Paketes hat man die Möglichkeit, absolute Positionen für die ein einzelnen Textblöcke anzugeben. Ohne die Option beziehen sich alle Positionsangaben auf die aktuelle Position auf der Seite. In dem Beispiel also auf den Absatz nach „… wird.“

Die textblock*-Umgebung stellt danach einen Textblock an der absoluten Position 45 mm (horizontal) und 80 mm (vertikal) auf der Seite dar, wobei ab der oberen linken Ecke gemessen wird. Der Block selbst hat dann eine Breite von 29 mm. Die Höhe der Box wird durch den Inhalt bestimmt, der per Standard im Blocksatz gesetzt wird. Der Inhalt der Box ist beliebig und kann auch Bilder oder anderes enthalten.

Wenn man die Paket-Option showboxes mit angibt, wird die jeweilige Box noch umrahmt. Wenn man das bei obigem Beispiel macht, sieht man auch, dass es ein kleines Problem beim Umbrechen des Textes gibt, da dieser über den Rand hinausgeht. Dies ist bei Blocksatz und solch kleinen Boxen normal, da der maximale Abstand für Wörter sonst nicht eingehalten werden könnte. Vergrößert man die Box oder nutzt \raggedright, \raggedleft oder \centering innerhalb der Box, gibt es keine Probleme mit Umbruch und Trennung des Textes.

Weitere Möglichkeiten des Paketes textpos sind, dass man ein Gridlayout über \TPGrid angeben kann. Über die Nicht-Stern-Umgebung textblock ist es dann möglich, anhand dieses Grids die Boxen zu positionieren. Zusätzlich lässt sich der Ursprung in der linken oberen Ecke über \textblockorigin verschieben, wenn man beispielsweise einen Rand mit beachten möchte. Alle weiteren Funktionen kann man in der Dokumentation nachlesen.

grid-system

grid-system ist ein relativ neues Paket von Marcus Bitzl. Bei der Erstellung des Paketes wurde sich dabei an den Layoutmöglichkeiten von Cascading Style Sheets (CSS) orientiert. Das Paket ermöglicht die Darstellung von mehrspaltigen Textblöcken, die zueinander ausgerichtet sind.

Ein Minimalbeispiel:

\documentclass{scrartcl}
\usepackage{grid-system}

\begin{document}

\begin{row}{3}{2}
  \noindent%
  \begin{cell}{1}
  Das ist ein kleiner Textblock mit
  einer Spalte an sinnlosem Text.
  \end{cell}
  \begin{cell}{2}
  Dieser Textblock nimmt gleich zwei
  Spalten fuer sich in Beschlag.
  \end{cell}
\end{row}

\end{document}

Das Paket stellt zwei neue Umgebungen row und cell zur Verfügung. row erhält dabei zwei Argumente: zum einen die Anzahl an Spalten, die der gesamte Absatz haben soll und zum anderen die Anzahl an dargestellter Zellen. Die Angabe der Zellen ist dabei notwendig, um vorab bestimmen zu können, wie breit jede einzelne Zelle sein soll.

Die Umgebung cell stellt danach eine Zelle dar, die sich auch über mehrere Spalten erstrecken kann, wie das erste Argument angibt. Die Summe der Zellwerte (erster Wert von cell) muss dabei immer gleich der Anzahl an definierten Spalten (erster Wert der row-Umgebung) sein.

Mit grid-system kann man demnach keine absolute Elemente positionieren, aber zur Postergestaltung eignet sich das Paket gut, solange die platzierten Elemente alle gleich hoch sind. Ansonsten wäre textpos vorzuziehen.

Eine Besonderheit ist aktuell (Dezember 2013) noch, dass entweder \parindent den Wert 0 haben muss oder vor die erste Zelle ein \noindent geschrieben werden muss. Andernfalls ragen die definierten Spalten um den in \parindent definierten Werte in den rechten Rand hinein. Eine korrigierte Version steht seit Januar 2014 zur Verfügung.