W podręcznikach historii często masz oś czasu, na której wydarzenia i okresy są zaznaczone na linii we właściwej odległości od siebie. Jak można stworzyć coś podobnego w LaTeX?
Wynik wygląda dobrze. Składnia nie jest tak prosta, jak się spodziewałem, ale myślę, że mogę stworzyć kilka poleceń, aby uprościć wszystko. Dziękuję za tę sugestię.
Większość pakietów i rozwiązań dotyczących osi czasu dla LATEX służy do przekazywania wielu informacji i dlatego jest projektowana pionowo. Jeśli próbujesz tylko przypisać etykiety do dat, bardziej odpowiednia może być bardziej tradycyjna oś czasu. Po to jest chronologia.
Należy zauważyć, że ten pakiet wydaje się obsługiwać tylko jedną oś czasu na dokument. Przynajmniej dla mnie pojawia się błąd „polecenie \ c @ krok już zdefiniowane”, gdy próbuję mieć więcej niż jeden.
russellpierce
3
Próbowałem zmodyfikować plik chronology.sty, aby uzyskać pionową oś czasu, ale nie udało mi się. Czy istnieje wersja pionowa?
Jeśli podczas kompilowania tego przykładu występuje błąd „brakującego numeru”, zobacz następujące pytanie: tex.stackexchange.com/questions/233781/… (usuń {3ex}).
badroit
22
Również pakiet chronosys zapewnia ładne rozwiązanie. Oto przykład z instrukcji obsługi:
dzięki! dziwne jednak, że facet, który napisał dokumentację, wciąż nazywa oś czasu „fryzem”, jakby to było to samo, co oś czasu. umieszczając to tutaj na wypadek, gdyby ktoś inny czytał dokumentację.
Jonathan Komar
1
@JonathanKomar pochodzi z francuskiego frise, ze średniowiecznego łacińskiego frisium. Odnosi się do szerokiego poziomego pasma rzeźbionej lub malowanej dekoracji lub też poziomego paska papieru.
Georges
15
Tylko aktualizacja.
Obecny pakiet TiKZ wyda: Pakiet tikz Ostrzeżenie: Węże zostały zastąpione dekoracjami. Proszę używać bibliotek dekoracji zamiast biblioteki węży w linii wejściowej. . .
Zatem odpowiednia część kodu musi zostać zmieniona na:
Myślę, że to stało się obecnie: \usetikzlibrary{decorations.pathmorphing}. Zrób również, \documentclass[tikz]{standalone}jeśli chcesz, aby mocno przycięty obraz został wstawiony do innego dokumentu.
PatrickT,
14
Tim Storer napisał bardziej elastyczny i ładniejszy wygląd timeline.sty(łącze Internet Archive Wayback Machine, ponieważ oryginał zniknął). Ponadto linia jest raczej pozioma niż pionowa. Na przykład:
2008 2010
· · April, 2008 First Podcast ·
· July, 2008 Private Beta
· September, 2008 Public Beta
· 2009 IPO?
Osobiście uważam to za bardziej przyjemne rozwiązanie niż inne odpowiedzi. Ale czuję też, że modyfikuję kod, aby zbliżyć się do tego, jak moim zdaniem powinna wyglądać oś czasu. Więc moim zdaniem nie ma ostatecznego rozwiązania.
Po pierwsze wolę tikzrozwiązanie z przewodnikiem, ponieważ daje Ci większą swobodę. Po drugie, nie publikuję niczego zupełnie nowego. Jest to oczywiście podobne do odpowiedzi Zoe Gagnon, ponieważ wskazał drogę.
Potrzebowałem kalendarza na jakiś rok i zajęło mi to trochę czasu (co za niespodzianka!), Aby to zrobić, więc dzielę się wynikami. Mam nadzieję że to polubisz.
\documentclass[tikz]{standalone}
\usepackage{verbatim}
\begin{document}
\newlength\yearposx\begin{tikzpicture}[scale=0.57] % timeline 1990-2010->% define coordinates (begin, used, end, arrow)\foreach\x in {1990,1992,2000,2002,2004,2005,2008,2009,2010,2011}{
\pgfmathsetlength\yearposx{(\x-1990)*1cm};
\coordinate (y\x) at (\yearposx,0);
\coordinate (y\x t) at (\yearposx,+3pt);
\coordinate (y\x b) at (\yearposx,-3pt);
}
% draw horizontal line with arrow\draw [->] (y1990) -- (y2011);
% draw ticks\foreach\x in {1992,2000,2002,2004,2005,2008,2009}
\draw (y\x t) -- (y\x b);
% annotate\foreach\x in {1992,2002,2005,2009}
\node at (y\x) [below=3pt] {\x};
\foreach\x in {2000,2004,2008}
\node at (y\x) [above=3pt] {\x};
\begin{comment}
% for use in beamer class\only<2> {\fill (y1992) circle (5pt);}
\only<3-5> {\fill (y2000) circle (5pt);}
\only<4-5> {\fill (y2002) circle (5pt);}
\only<5> {\fill[red] (y2004) circle (5pt);}
\only<6> {\fill (y2005) circle (5pt);}
\only<7> {\fill[red] (y2005) circle (5pt);}
\only<8-11> {\fill (y2008) circle (5pt);}
\only<11> {\fill (y2009) circle (5pt);}
\end{comment}
\end{tikzpicture}
\end{document}
Jak widać, jest dostosowany do prezentacji beamer (wybierz część, a także opcję skalowania), ale jeśli naprawdę chcesz to przetestować w prezentacji, powinieneś wyjść \newlength\yearposxpoza definicję ramki, ponieważ w przeciwnym razie pojawi się błąd o istnieniu to polecenie \yearposxjest już zdefiniowane (chyba że usuniesz część zaznaczenia i wszelkie inne polecenia podziału ramki z ramki).
Nie, bardziej interesowała mnie oś czasu, jak w książce do historii. Niemniej jednak dzięki, diagramy UML w LaTeX mogą pojawić się również w innym projekcie.
%%% In LaTeX:%%% \begin{timeline}{length}(start,stop)%%% .%%% .%%% .%%% \end{timeline}%%%%%% in plain TeX%%% \timeline{length}(start,stop)%%% .%%% .%%% .%%% \endtimeline%%% in between the two, we may have:%%% \item{date}{description}%%% \item[sortkey]{date}{description}%%% \optrule%%%%%% the options to timeline are:%%% length The amount of vertical space that the timeline should%%% use.%%% (start,stop) indicate the range of the timeline. All dates or%%% sortkeys should lie in the range [start,stop]%%%%%% \item without the sort key expects date to be a number (such as a%%% year).%%% \item with the sort key expects the sort key to be a number; date%%% can be anything. This can be used for log scale time lines%%% or dates that include months or days.%%% putting \optrule inside of the timeline environment will cause a%%% vertical rule to be drawn down the center of the timeline.
Użyłem pliku datetime.data.toordinal Pythona do konwersji dat na „klucze sortowania” w kontekście pakietu.
Starałem się znaleźć właściwy sposób na stworzenie osi czasu, co w końcu mógłbym zrobić z tą modyfikacją. Zwykle podczas tworzenia osi czasu problem polegał na tym, że nie mogłem dodać tekstu, aby jasno wyjaśnić każdą datę za pomocą dłuższego tekstu. Zmodyfikowałem i dalej wykorzystałem lateksowy skrypt @Zoe Gagnon. Zapraszamy do zapoznania się z następującymi informacjami:
Odpowiedzi:
TikZ pakiet wydaje się mieć, co chcesz.
\documentclass{article} \usepackage{tikz} \usetikzlibrary{snakes} \begin{document} \begin{tikzpicture}[snake=zigzag, line before snake = 5mm, line after snake = 5mm] % draw horizontal line \draw (0,0) -- (2,0); \draw[snake] (2,0) -- (4,0); \draw (4,0) -- (5,0); \draw[snake] (5,0) -- (7,0); % draw vertical lines \foreach \x in {0,1,2,4,5,7} \draw (\x cm,3pt) -- (\x cm,-3pt); % draw nodes \draw (0,0) node[below=3pt] {$ 0 $} node[above=3pt] {$ $}; \draw (1,0) node[below=3pt] {$ 1 $} node[above=3pt] {$ 10 $}; \draw (2,0) node[below=3pt] {$ 2 $} node[above=3pt] {$ 20 $}; \draw (3,0) node[below=3pt] {$ $} node[above=3pt] {$ $}; \draw (4,0) node[below=3pt] {$ 5 $} node[above=3pt] {$ 50 $}; \draw (5,0) node[below=3pt] {$ 6 $} node[above=3pt] {$ 60 $}; \draw (6,0) node[below=3pt] {$ $} node[above=3pt] {$ $}; \draw (7,0) node[below=3pt] {$ n $} node[above=3pt] {$ 10n $}; \end{tikzpicture} \end{document}
Nie jestem zbyt ekspertem w zakresie tikz, ale daje to dobrą oś czasu, która wygląda następująco:
źródło
Jest nowa chronologia .sty autorstwa Levi Wisemana . Dokumentacja (pdf) mówi:
Oto przykładowy kod:
\documentclass{article} \usepackage{chronology} \begin{document} \begin{chronology}[5]{1983}{2010}{3ex}[\textwidth] \event{1984}{one} \event[1985]{1986}{two} \event{\decimaldate{25}{12}{2001}}{three} \end{chronology} \end{document}
Który generuje ten wynik:
źródło
\textwidth
?{3ex}
).Również pakiet chronosys zapewnia ładne rozwiązanie. Oto przykład z instrukcji obsługi:
źródło
Tylko aktualizacja.
Obecny pakiet TiKZ wyda: Pakiet tikz Ostrzeżenie: Węże zostały zastąpione dekoracjami. Proszę używać bibliotek dekoracji zamiast biblioteki węży w linii wejściowej. . .
Zatem odpowiednia część kodu musi zostać zmieniona na:
\documentclass{article} \usepackage{tikz} \usetikzlibrary{decorations} \begin{document} \begin{tikzpicture} %draw horizontal line \draw (0,0) -- (2,0); \draw[decorate,decoration={snake,pre length=5mm, post length=5mm}] (2,0) -- (4,0); \draw (4,0) -- (5,0); \draw[decorate,decoration={snake,pre length=5mm, post length=5mm}] (5,0) -- (7,0); %draw vertical lines \foreach \x in {0,1,2,4,5,7} \draw (\x cm,3pt) -- (\x cm,-3pt); %draw nodes \draw (0,0) node[below=3pt] {$ 0 $} node[above=3pt] {$ $}; \draw (1,0) node[below=3pt] {$ 1 $} node[above=3pt] {$ 10 $}; \draw (2,0) node[below=3pt] {$ 2 $} node[above=3pt] {$ 20 $}; \draw (3,0) node[below=3pt] {$ $} node[above=3pt] {$ $}; \draw (4,0) node[below=3pt] {$ 5 $} node[above=3pt] {$ 50 $}; \draw (5,0) node[below=3pt] {$ 6 $} node[above=3pt] {$ 60 $}; \draw (6,0) node[below=3pt] {$ $} node[above=3pt] {$ $}; \draw (7,0) node[below=3pt] {$ n $} node[above=3pt] {$ 10n $}; \end{tikzpicture} \end{document}
HTH
źródło
\usetikzlibrary{decorations.pathmorphing}
. Zrób również,\documentclass[tikz]{standalone}
jeśli chcesz, aby mocno przycięty obraz został wstawiony do innego dokumentu.Tim Storer napisał bardziej elastyczny i ładniejszy wygląd
timeline.sty
(łącze Internet Archive Wayback Machine, ponieważ oryginał zniknął). Ponadto linia jest raczej pozioma niż pionowa. Na przykład:\begin{timeline}{2008}{2010}{50}{250} \MonthAndYearEvent{4}{2008}{First Podcast} \MonthAndYearEvent{7}{2008}{Private Beta} \MonthAndYearEvent{9}{2008}{Public Beta} \YearEvent{2009}{IPO?} \end{timeline}
tworzy oś czasu, która wygląda następująco:
Osobiście uważam to za bardziej przyjemne rozwiązanie niż inne odpowiedzi. Ale czuję też, że modyfikuję kod, aby zbliżyć się do tego, jak moim zdaniem powinna wyglądać oś czasu. Więc moim zdaniem nie ma ostatecznego rozwiązania.
źródło
Po pierwsze wolę
tikz
rozwiązanie z przewodnikiem, ponieważ daje Ci większą swobodę. Po drugie, nie publikuję niczego zupełnie nowego. Jest to oczywiście podobne do odpowiedzi Zoe Gagnon, ponieważ wskazał drogę.Potrzebowałem kalendarza na jakiś rok i zajęło mi to trochę czasu (co za niespodzianka!), Aby to zrobić, więc dzielę się wynikami. Mam nadzieję że to polubisz.
\documentclass[tikz]{standalone} \usepackage{verbatim} \begin{document} \newlength\yearposx \begin{tikzpicture}[scale=0.57] % timeline 1990-2010-> % define coordinates (begin, used, end, arrow) \foreach \x in {1990,1992,2000,2002,2004,2005,2008,2009,2010,2011}{ \pgfmathsetlength\yearposx{(\x-1990)*1cm}; \coordinate (y\x) at (\yearposx,0); \coordinate (y\x t) at (\yearposx,+3pt); \coordinate (y\x b) at (\yearposx,-3pt); } % draw horizontal line with arrow \draw [->] (y1990) -- (y2011); % draw ticks \foreach \x in {1992,2000,2002,2004,2005,2008,2009} \draw (y\x t) -- (y\x b); % annotate \foreach \x in {1992,2002,2005,2009} \node at (y\x) [below=3pt] {\x}; \foreach \x in {2000,2004,2008} \node at (y\x) [above=3pt] {\x}; \begin{comment} % for use in beamer class \only<2> {\fill (y1992) circle (5pt);} \only<3-5> {\fill (y2000) circle (5pt);} \only<4-5> {\fill (y2002) circle (5pt);} \only<5> {\fill[red] (y2004) circle (5pt);} \only<6> {\fill (y2005) circle (5pt);} \only<7> {\fill[red] (y2005) circle (5pt);} \only<8-11> {\fill (y2008) circle (5pt);} \only<11> {\fill (y2009) circle (5pt);} \end{comment} \end{tikzpicture} \end{document}
Jak widać, jest dostosowany do prezentacji beamer (wybierz część, a także opcję skalowania), ale jeśli naprawdę chcesz to przetestować w prezentacji, powinieneś wyjść
\newlength\yearposx
poza definicję ramki, ponieważ w przeciwnym razie pojawi się błąd o istnieniu to polecenie\yearposx
jest już zdefiniowane (chyba że usuniesz część zaznaczenia i wszelkie inne polecenia podziału ramki z ramki).źródło
Jeśli szukasz diagramów sekwencji UML, możesz być zainteresowany pkf-umlsd , który jest oparty na TiKZ. Ładne dema można znaleźć tutaj .
źródło
Wokół unosi się timeline.sty .
Składnia jest prostsza niż przy użyciu tikz:
%%% In LaTeX: %%% \begin{timeline}{length}(start,stop) %%% . %%% . %%% . %%% \end{timeline} %%% %%% in plain TeX %%% \timeline{length}(start,stop) %%% . %%% . %%% . %%% \endtimeline %%% in between the two, we may have: %%% \item{date}{description} %%% \item[sortkey]{date}{description} %%% \optrule %%% %%% the options to timeline are: %%% length The amount of vertical space that the timeline should %%% use. %%% (start,stop) indicate the range of the timeline. All dates or %%% sortkeys should lie in the range [start,stop] %%% %%% \item without the sort key expects date to be a number (such as a %%% year). %%% \item with the sort key expects the sort key to be a number; date %%% can be anything. This can be used for log scale time lines %%% or dates that include months or days. %%% putting \optrule inside of the timeline environment will cause a %%% vertical rule to be drawn down the center of the timeline.
Użyłem pliku datetime.data.toordinal Pythona do konwersji dat na „klucze sortowania” w kontekście pakietu.
źródło
Starałem się znaleźć właściwy sposób na stworzenie osi czasu, co w końcu mógłbym zrobić z tą modyfikacją. Zwykle podczas tworzenia osi czasu problem polegał na tym, że nie mogłem dodać tekstu, aby jasno wyjaśnić każdą datę za pomocą dłuższego tekstu. Zmodyfikowałem i dalej wykorzystałem lateksowy skrypt @Zoe Gagnon. Zapraszamy do zapoznania się z następującymi informacjami:
\documentclass{article} \usepackage{tikz} \usetikzlibrary{snakes} \usepackage{rotating} \begin{document} \begin{center} \begin{tikzpicture} % draw horizontal line \draw (-5,0) -- (6,0); % draw vertical lines \foreach \x in {-5,-4,-3,-2, -1,0,1,2} \draw (\x cm,3pt) -- (\x cm,-3pt); % draw nodes \draw (-5,0) node[below=3pt] {$ 0 $} node[above=3pt] {$ $}; \draw (-4,0) node[below=3pt] {$ 1 $} node[above=3pt] {$\begin{turn}{45} All individuals vote \end{turn}$}; \draw (-3,0) node[below=3pt] {$ 2 $} node[above=3pt] {$\begin{turn}{45} Policy vector decided \end{turn}$}; \draw (-2,0) node[below=3pt] {$ 3 $} node[above=3pt] {$\begin{turn}{45} Becoming a bureaucrat \end{turn} $}; \draw (-1,0) node[below=3pt] {$ 4 $} node[above=3pt] {$\begin{turn}{45} Bureaucrats' effort choice \end{turn}$}; \draw (0,0) node[below=3pt] {$ 5 $} node[above=3pt] {$\begin{turn}{45} Tax evasion decision made \end{turn}$}; \draw (1,0) node[below=3pt] {$ 6$} node[above=3pt] {$\begin{turn}{45} $p(x_{t})$ tax evaders caught \end{turn}$}; \draw (2,0) node[below=3pt] {$ 7 $} node[above=3pt] {$\begin{turn}{45} $q_{t}$ shirking bureaucrats \end{turn}$}; \draw (3,0) node[below=3pt] {$ $} node[above=3pt] {$\begin{turn}{45} Public service provided \end{turn} $}; \end{tikzpicture} \end{center} \end{document}
Niestety dłuższe teksty nie są dozwolone. Będzie to wyglądać tak:
źródło