![Zeitpfeil mit sich entwickelnder „aktueller Position“ mit überlagerter Nummer](https://rvso.com/image/461883/Zeitpfeil%20mit%20sich%20entwickelnder%20%E2%80%9Eaktueller%20Position%E2%80%9C%20mit%20%C3%BCberlagerter%20Nummer.png)
Ich zeige Folien, auf denen ich anhand von Schnappschüssen eine zeitliche Entwicklung darstelle. Jeder Schnappschuss entspricht einem bestimmten Zeitpunkt.
Ich möchte einen Zeitpfeil (vertikal an der Seite) mit Aufzählungszeichen anzeigen, die den einzelnen Zeitpunkten entsprechen (ungleichmäßig verteilt). Auf jeder Überlagerung ist eines dieser Aufzählungszeichen ausgefüllt und die aktuelle Zeit angegeben, während die anderen Aufzählungszeichen offen sind (leere Kreise).
Ich denke, dass ich die unanimatisierte Version ganz einfach mit erstellen kann tikz
, bin mir aber nicht sicher, wie ich den Stil der Elemente und das Vorhandensein von Knotentext je nach Overlay-Nummer anpassen kann.
Hier ist ein MWE für einen statischen Zeitpfeil:
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\def\axscale{-0.02}
\def\thex{0}
\def\they{0}
\def\prevy{0}
\def\times{{-5,2, 12, 22, 32, 44, 76, 116, 182, 300,307}}
\def\maxt{9}
\foreach \it in {1,...,\maxt} {
\pgfmathparse{\axscale*\times[\it-1]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\it]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[-{Circle[open]}] (\thex,\prevy) -- (\thex,\they);
\node[right,anchor=west] at (\thex,\they) {
$t=\pgfmathparse{\times[\it]}
\pgfmathprintnumber[ % Print the result
fixed,
fixed zerofill,
precision=0,
assume math mode=true
]{\pgfmathresult}
$};
}
\pgfmathparse{\axscale*\times[\maxt]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\maxt+1]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[->] (\thex,\prevy) -- (\thex,\they);
%\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}
\end{document}
Geben Sie an, welche Elemente animiert werden sollen Circle[open]
und ob die t=...
Beschriftung angezeigt werden soll.
Antwort1
Ich glaube, Sie haben Ihre Antwort, d. h. verwenden Sie EbenenmitTikZ, und beide Antworten zeigen, wie das geht.
Ich möchte eine andere Möglichkeit zeigen, diese Zeitleiste zu zeichnen, indem ich ein paar Goodies verwende, die TikZ zu bieten hat, vor allemder /tikz/y
SchlüsselHier können Sie die Länge und Richtung desjAchse derxyzKoordinatensystem (das ohne Einheiten).
Anstatt zu verwenden, \axscale
können Sie einfach y
auf setzen -0.02cm
(wobei der Standardwert 1cm ist) und TikZ multipliziert Ihren Wert, um ihn in denLeinwandKoordinatensystem (das mit den Einheiten, bei denenjzeigt immer noch nach oben).
Dann gibt es noch diechains
Bibliothek die ich eigentlich nur verwende, um Knoten zu verbinden, indem ich sie nicht habegeh irgendwohin. Dazu setze ich einen Startpunkt, der 1mm
überT= 0 und fügen Sie außerdem einen letzten Punkt hinzu, der immer 1,4 mm unter dem letzten liegtT. (Wenn der obere Anfang der Linie einen festen Abstand über dem ersten haben soll,Teine Anpassung ist hier notwendig.) Auch der letzte wird mit verbunden, ->
so dass wir die eigentliche Pfeilspitze erhalten.
Apropos Pfeilspitzen, während dieCircle
Tippscheint eine nette Sache zu sein, sie berühren nur die angegebene Koordinate, anstatt auf ihr zentriert zu liegen. Dies kannFest, obwohl ich hier einfach Kreisknoten verwenden würde.
Um den Diagrammbeamer bekannt zu machen, klaue ich die <.>
Syntax vonSam Carters Antwortzu haben,label
gleichzeitig mit dem Füllen des Knotens angezeigt. Da ich als Referenz einen Kreisknoten anstelle einer Pfeilspitze verwende, wird der Knoten meiner Meinung nach viel besser ausgerichtet.
Wir könnten auch das label
zu dem hinzufügen fill
, also
alt=<+>{fill, label={$t = \t$}}{}
allerdings wird das Bild dadurch hin und her springen, es sei denn, die Beschriftung würde nicht mehr zum Begrenzungsrahmen beitragen.
Da die visible on
Lösung von overlay-beamer-styles
versteckten Text im Rahmen belässt (der ausgewählt und kopiert werden kann), verwende ich Beamers eigene Methode, \uncover
um den Text zu verbergen.
Code
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, chains, overlay-beamer-styles}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item First.
\item Second.
\end{itemize}
\begin{tikzpicture}[
y=-.02cm, thick, label position=right, start chain = going {},
dot/.style={circle, draw, inner sep=+0pt, minimum size=+1.3mm}]
\coordinate[on chain]() at (0, 1mm); % a start (for the line)
\foreach \t in {2, 12, 22, 32, 44, 76, 116, 182, 300}
\node[dot, on chain, join, alt=<+>{fill},
label/.expanded={$\uncover<.>{t = \t}$}, % no hidden text in output
% label={[visible on=<.>]$t = \t$}, % hidden text in output
] at (0, \t) {};
% and an end that is below the last dot
\coordinate[on chain, join=by ->]() at ([yshift=-1.4mm] chain-end.south);
\end{tikzpicture}
\end{frame}
\end{document}
Ausgabe (klicken für Vollversion)
Antwort2
Sie können sich die Tatsache zunutze machen, dass Tikz-Befehle wie \draw
Overlay-fähig sind:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\def\axscale{-0.02}
\def\thex{0}
\def\they{0}
\def\prevy{0}
\def\times{{-5,2, 12, 22, 32, 44, 76, 116, 182, 300,307}}
\def\maxt{9}
\foreach \it in {1,...,\maxt} {
\pgfmathparse{\axscale*\times[\it-1]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\it]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[-{Circle[open]}] (\thex,\prevy) -- (\thex,\they);
\draw<+(2)>[-{Circle}] (\thex,\prevy) -- (\thex,\they);
\node<.(2)>[right,anchor=west] at (\thex,\they) {
$t=\pgfmathparse{\times[\it]}
\pgfmathprintnumber[ % Print the result
fixed,
fixed zerofill,
precision=0,
assume math mode=true
]{\pgfmathresult}
$};
}
\pgfmathparse{\axscale*\times[\maxt]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\maxt+1]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[->] (\thex,\prevy) -- (\thex,\they);
%\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}
\end{frame}
\end{document}
Antwort3
Mithilfe der großartigen overlay-beamer-styles
Bibliothek können Sie Folgendes tun:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{overlay-beamer-styles}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\def\axscale{-0.02}
\def\thex{0}
\def\they{0}
\def\prevy{0}
\def\times{{-5, 2, 12, 22, 32, 44, 76, 116, 182, 300, 307}}
\def\maxt{9}
\foreach \it in {1,...,\maxt} {
\pgfmathparse{\axscale*\times[\it-1]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\it]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[alt={<\it>{-{Circle[]}}{-{Circle[open]}}}] (\thex,\prevy) -- (\thex,\they);
\node[right,anchor=west] at (\thex,\they) {
$t=\pgfmathparse{\times[\it]}
\pgfmathprintnumber[ % Print the result
fixed,
fixed zerofill,
precision=0,
assume math mode=true
]{\pgfmathresult}
$};
\pgfmathparse{\axscale*\times[\maxt]}
\pgfmathsetmacro{\prevy}{\pgfmathresult}
\pgfmathparse{\axscale*\times[\maxt+1]}
\pgfmathsetmacro{\they}{\pgfmathresult}
\draw[->] (\thex,\prevy) -- (\thex,\they);
}
%\draw(\thex,\prevy) -- (\thex+5,\they);
\end{tikzpicture}
\end{frame}
\end{document}
Oder Sie können es alt={<\it>{-{Circle[]}}{-{Circle[open]}}}
durch ersetzen alt={<\it->{-{Circle[]}}{-{Circle[open]}}}
(d. h., Sie fügen -
nach \it
) hinzu, wenn die vorherigen Punkte ausgefüllt bleiben sollen.