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:

\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

\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 '16, 23:20

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

bearbeitet 26 Jan '20, 12:30

saputello's gravatar image

saputello
11.1k174365

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 '16, 09: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 '16, 09:19) Henri

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

(25 Apr '16, 09: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 '16, 10: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 '16, 09:28

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

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 '16, 10: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 '16, 10:29) Henri
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
×76
×17
×4

gestellte Frage: 24 Apr '16, 23:20

Frage wurde gesehen: 7,415 Mal

zuletzt geändert: 25 Apr '16, 10:30