In manchen besonderen Fällen möchte ich Grafiken und Text-Boxen an bestimmten absoluten Positionen einer Seite anzeigen, ohne dass der restliche Text auf der Seite das beeinflusst. Wie geht das mit LaTeX? Bisher hatte ich mit \vspace und \hspace herumgeschoben, bis es passte.

Ich brauche es zwar gerade für eine beamer-Präsentation und wäre auch an beamer-spezifischer Lösung interessiert, doch eben auch ganz allgemein für LaTeX-Dokumente. So könnte ich z.B. Institut-Logo und Meta-Informationen auf festen Stellen der Seiten platzieren, ggf. kombiniert mit fancyhdr-Befehlen für "je Seite".

Hier ein Beispiel - ich wollte eine Grafik 3 cm von oben und 2 cm von links beginnend platzieren, und den Text 6 cm von oben und 4 cm von links. Evtl. geht es ja für beides in der gleichen Weise, dann reicht mir natürlich ein Tipp für das Platzieren eines Elements. Sorry wenn das Beispiel zu langweilig generisch ist.

\PassOptionsToPackage{demo}{graphicx}
\documentclass{beamer}
\begin{document}
\begin{frame}
\includegraphics{diagramm}

\fbox{Ein Text}
\end{frame}
\end{document}

Wie kann ich mit LaTeX absolut positionieren?

gefragt 20 Jul '13, 13:30

jan12's gravatar image

jan12
770272732
Akzeptiert-Rate: 100%

bearbeitet 14 Aug '13, 17:23

saputello's gravatar image

saputello
11.1k174365

TikZ bietet die Node current page, die man verwenden kann, um Dinge absolut auf einer Seite zu positionieren. Die Pakete textpos und eso-pic bieten ebenfalls Möglichkeiten.

(20 Jul '13, 14:05) cgnieder

@Clemens Sorry, dass ich Dir die Antwort geklaut habe, ich hatte die schlicht erstellt, während Du den Kommentar verschickt hast. eso-pic hat bei meinen Tests übrigens mit beamer nicht funktioniert. Es gab zwar keine Fehlermeldung, aber die Grafik war selbst dann nicht zu sehen, wenn ich sie mit \AtPageCenter mitten auf die Seite platziert habe.

(20 Jul '13, 14:34) saputello

@saputello macht gar nichts :)

(20 Jul '13, 14:37) cgnieder

Normalerweise würde man das entweder mit dem Paket eso-pic oder textpos machen. Allerdings haben diese das Problem, dass beamer normalerweise mit einem nicht transparenten Hintergrund arbeitet. Diesen transparent zu machen ist nur dann eine Option, wenn er tatsächlich leer ist. Allerdings bietet eso-pic auch die Möglichkeit, das Bild im Vordergrund statt im Hintergrund auszugeben:

\PassOptionsToPackage{demo}{graphicx}
\documentclass{beamer}
\usepackage{eso-pic,picture}
\begin{document}
\begin{frame}
  \AddToShipoutPictureFG*{%
    \AtPageUpperLeft{%
      \put(3cm,-2cm){%
        \makebox(0,0)[lt]{\includegraphics{demo}}%
      }%
    }%
  }%
  \fbox{Ein Text}
\end{frame}
\end{document}

Das Paket picture wird im Beispiel verwendet, um die Anweisung \LenToUnit, die eso-pic bereit stellt, einzusparen. Es ermöglicht, bei den Grafikbefehlen – im Beispiel \put – direkt Längenangaben an Stelle von Vielfachen von \unitlength zu verwenden. Die \makebox-Anweisung wird verwendet, um die Grafik mit der linken oberen Ecke zur angegebenen Koordinate auszurichten. Man hätte stattdessen auch das Paket adjustbox verwenden können. Näheres ist dessen Anleitung zu entnehmen.

Soll die Grafik auf jeder Seite erscheinen, lässt man den Stern bei \AddToShipoutPictureFG weg. Zu weiteren Funktionen des Pakets sei auf dessen Anleitung verwiesen. Dort ist auch angegeben, wie man alles Vordergrundmaterial wieder löschen kann.

Da beamer ohnehin bereits pgf verwendet, bietet es sich aber an, das ganze mit TikZ zu lösen. Eine von unzähligen Möglichkeiten dafür wäre beispielsweise:

\PassOptionsToPackage{demo}{graphicx}
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{frame}
\tikz[overlay, remember picture] {
  \coordinate (picture) at ($(current page.north west)+(3cm,-2cm)$);
  \node [below right] at (picture) {\includegraphics{demo}};
}% <-- Das ist wichtig!
\fbox{Ein Text}
\end{frame}
\end{document}

Ich nutze dabei einerseits die overlay-Eigenschaft, andererseits current page, um Material relativ zur aktuellen Seite zu platzieren. Nach zwei LaTeX-Läufen erhält man dann das Ergebnis:

Ergebnisseite

Will man auf die calc Bibliothek verzichten, so kann man übrigens auch

\draw (current page.north west) ++(3cm,-2cm) coordinate (picture);
\node[anchor=north west] at (picture) {\includegraphics{demo}}

schreiben. Bei TikZ führen bekanntlich viele Wege nach Rom.

Will man bei beamer eine Grafik auf allen Seiten haben, so sollte man übrigens ein passendes theme erstellen.

Alle gezeigten Lösungen funktionieren auch mit anderen Klassen. Allerdings ist es bei anderen Klassen eventuell sinnvoller die Grafik in den Hintergrund zu verschieben. Das geht, indem man bei der eso-pic-Lösung \AddToShipoutPictureFG durch \AddToShipoutPictureBG ersetzt.

Das oben nur genannte Paket textpos bietet mit Option overlay ebenfalls die Möglichkeit, absolut positioniertes Material im Vordergrund statt im Hintergrund auszugeben. Für die konkrete Verwendung dieses Pakets sei auf dessen Anleitung verwiesen.

Permanenter link

beantwortet 20 Jul '13, 14:33

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 14 Aug '13, 17:23

Wenn man \draw (current page.north west) ++(3cm,-2cm) node[anchor=north west] {\includegraphics{demo}}; verwendet, kann man auf die calc library verzichten.

(20 Jul '13, 14:39) cgnieder

@Clemens: Stimmt. Ich fand es einfach nur schöner, die Koordinate getrennt von der Abbildung anzugeben. So kommst Du doch noch zu einer Antwort. ;)

(20 Jul '13, 14:45) saputello

@saputello Geht auch: \draw (current page.north west) ++(3cm,-2cm) coordinate (picture); \node[anchor=north west] at (picture) {\includegraphics{demo}}; Eine neue Antwort wäre nur eine Variation Deiner Antwort... wäre das sinnvoll?

(20 Jul '13, 14:54) cgnieder

eso-pic funktioniert meiner Erfahrung nach tadellos mit beamer - allerdings muss man den Hintergrund transparent machen, um was zu sehen. \setbeamercolor{background canvas}{bg=}.

(20 Jul '13, 19:08) Ulrike Fischer

Mit oder ohne calc kann man das ganze auch ohne den zusätzlichen Pfad lösen: \tikz[overlay, remember picture] \node [below right] at ([shift={(3cm,-2cm)}] current page.north west) {\includegraphics{demo}};% (das % ist hier immer noch genauso notwendig wie mit der { }-Variante). (Ein \coordinate (…) at ([…] …); ist natürlich immer noch möglich, wenn es denn unbedingt sein muss.)

(26 Jul '13, 05:54) Qrrbrbirlbel
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×141
×41
×39
×18

gestellte Frage: 20 Jul '13, 13:30

Frage wurde gesehen: 34,823 Mal

zuletzt geändert: 14 Aug '13, 17:23