Ich habe folgendes Problem: Wenn ich in beamer ein Template für enumerate item mittels eines tikz nodes erzeuge, dann zerstört mir dieses ein anderes tikzpicture. Ich kann das schwer beschreiben, deswegen zwei Beispiele:

1.Hier sieht alles richtig aus:

Open in Online-Editor
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\begin{document}
\begin{frame}
\begin{enumerate}
\item Eins
\end{enumerate}
\begin{tikzpicture}[scale=0.8]
\draw[thick,bend left=30] (0,0) to (-0.5,1);
\draw[thick,bend left=60] (-0.5,1) to (1,2);
\draw[thick,bend left=40] (1,2) to (2,1.5);
\draw[thick,bend left=10] (2,1.5) to (2,1);
\draw[thick,bend left=20] (2,1) to (1,0.0);
\draw[thick,bend left=25] (1,0.0) to (0,0);
\end{tikzpicture}

\end{frame}
\end{document}

2.Hier gibt es eine Lücke bei (0,0) im tikzpicture

Open in Online-Editor
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}

\defbeamertemplate*{enumerate item}{custom circle}{%
  \raisebox{-2pt}{\tikz\node [color=blue,fill,circle,inner sep=1pt] (0,0) {\footnotesize\textcolor{white}{\textbf{\insertenumlabel}}};}}
\setbeamertemplate{enumerate item}[custom circle]

\begin{document}
\begin{frame}
\begin{enumerate}
\item Eins
\end{enumerate}
\begin{tikzpicture}[scale=0.8]
\draw[thick,bend left=30] (0,0) to (-0.5,1);
\draw[thick,bend left=60] (-0.5,1) to (1,2);
\draw[thick,bend left=40] (1,2) to (2,1.5);
\draw[thick,bend left=10] (2,1.5) to (2,1);
\draw[thick,bend left=20] (2,1) to (1,0.0);
\draw[thick,bend left=25] (1,0.0) to (0,0);
\end{tikzpicture}

\end{frame}
\end{document}

Woran liegt das und wie kann ich das Problem beheben?

gefragt 24 Apr, 17:20

tom75's gravatar image

tom75
1.9k1545
Akzeptiert: 83%

2

Es muss heißen \tikz\node[...] at (0,0) {...};. Anderenfalls erstellst du eine Node mit dem Namen (0,0). Ich weiß zwar auch nicht warum das zu solch unvorhergesehenen Dingen führt, aber Einfügen von at behebt das Problem.

(25 Apr, 03:16) Henri
3

Nicht relevant: Wenn du die gesternte Variante von \defbeamertemplate benutzt kannst du dir \setbeamertemplate sparen. Die gesternte Variante wendet das neue Template gleich an.

(25 Apr, 03:19) Henri

@ Henri: Vielen Dank für beide Hinweise! Eigentlich könnte man das (0,0) auch ganz weg lassen, oder?

(25 Apr, 03:23) tom75

@tom75: Bitte mach zwischen das @ und den Namen des Benutzers, den Du ansprechen willst, kein Leerzeichen. Er wird sonst nicht referenziert und ggf. auch nicht benachrichtigt.

(25 Apr, 04:30) saputello

Die Syntax zum Erstellen eines Nodes ist

Open in Online-Editor
\node[options](name) at (coordinate) {node contents};

Danach ist bei dir name = 0,0, du erstellst also einen Node mit Namen »0,0«. Du meinst aber wahrscheinlich die Koordinate (0,0). Ich weiß zwar auch nicht warum das zu solch unvorhergesehenen Dingen führt, aber Einfügen von at vor (0,0) behebt das Problem.

Ein Node ohne Koordinate wird übrigens implizit bei (0,0) platziert, man kann sie sich also ganz sparen. Es macht jedoch Sinn den Node zu benennen, ich habe ihn bullet genannt. Dann kann man nämlich die Grundlinie des tikzpicture auf die des Textes in der Node setzen, sodass die 1 und Eins dieselbe Grundlinie haben. So spart man sich die \raisebox-Konstruktion, die bei einer Änderung der Schriftgröße auch angepasst werden muss. Ich habe zusätzlich alle Text-Optionen in die Node-Optionen verschoben, damit der tatsächliche Inhalt des Node klar zu erkennen ist. Ein wenig Einrückung habe ich auch spendiert.

Open in Online-Editor
\documentclass{beamer}
\usepackage{tikz}

\defbeamertemplate*{enumerate item}{custom circle}{%
  \tikz[baseline=(bullet.base)] {
    \node[color=blue,fill,circle,inner sep=1pt,
      text=white,font=\footnotesize\bfseries] (bullet) {\insertenumlabel};
  }%
}

\begin{document}
\begin{frame}
  \begin{enumerate}
  \item Eins
  \end{enumerate}
  \begin{tikzpicture}[scale=0.8]
    \draw[thick,bend left=30] (0,0) to (-0.5,1);
    \draw[thick,bend left=60] (-0.5,1) to (1,2);
    \draw[thick,bend left=40] (1,2) to (2,1.5);
    \draw[thick,bend left=10] (2,1.5) to (2,1);
    \draw[thick,bend left=20] (2,1) to (1,0.0);
    \draw[thick,bend left=25] (1,0.0) to (0,0);
  \end{tikzpicture}
\end{frame}
\end{document}

alt text

Permanenter link

beantwortet 25 Apr, 03:28

Henri's gravatar image

Henri
10.0k31730

1

Ich weiß zwar auch nicht warum das zu solch unvorhergesehenen Dingen führt

Weil bei beamer die Namen der Nodes aus den Templates erhalten bleiben und deshalb dann auch für die tikzpicture bei \draw[thick,bend left=30] (0,0) to (-0.5,1) und \draw[thick,bend left=25] (1,0.0) to (0,0) nicht mehr von bzw. zur Koordinate (0,0) sondern vom/zum Knoten mit dem Namen (0,0) gezeichnet wird. Da der Knoten eine Ausdehnung hat, kommt es für die resultierende Koordinate darauf an, von welcher Seite man sich näher. Leicht zu sehen auch, wenn man einmal alle (0,0) durch (bullet) ersetzt.

(25 Apr, 04:14) saputello
1

@saputello Lustigerweise wird nur die Koordinate rechts von to mit dem Namen des Node aufgelöst. Bei \draw (0,0) to ... passiert das nicht. Hier findet die Auflösung auf den Namen erst statt, wenn man noch einen Anker hinzufügt, wie \draw ({0,0}.west) .... Dies lässt sich leicht verifizieren durch Hinzufügen von z.B. \draw (canvas cs:x=0,y=0) circle (2pt);.

(25 Apr, 04:29) Henri
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×94
×8
×2
×1

Frage gestellt: 24 Apr, 17:20

Frage wurde angeschaut: 746 Mal

Zuletzt aktualisiert: 25 Apr, 04:30