web-dev-qa-db-fra.com

Comment créer une chronologie avec LaTeX?

Dans les livres d'histoire, vous avez souvent une chronologie, où les événements et les périodes sont marqués sur une ligne à la distance relative correcte les uns des autres. Comment est-il possible de créer quelque chose de similaire dans LaTeX?

74
Mnementh

Le paquet tikz semble avoir ce que vous voulez.

\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}

Je ne suis pas trop expert avec tikz, mais cela donne une bonne chronologie, qui ressemble à:

enter image description here

43
Zoe Gagnon

Il y a un nouveau chronology.sty par Levi Wiseman . Le documentation (pdf) dit:

La plupart des packages et des solutions de chronologie pour LATEX sont utilisés pour transmettre beaucoup d'informations et sont donc conçus verticalement. Si vous essayez simplement d'attribuer des étiquettes à des dates, une chronologie plus traditionnelle pourrait être plus appropriée. C'est à ça que sert la chronologie.

Voici un exemple de code:

\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}

Ce qui produit cette sortie:

example output from chronology.sty

69
nibot

Le package chronosys fournit également une bonne solution. Voici un exemple tiré du manuel d'utilisation:

enter image description here

16
Alessandro Cuttin

Juste une mise à jour.

Le paquet TiKZ actuel produira: Paquet tikz Avertissement: Les serpents ont été remplacés par des décorations. Veuillez utiliser les bibliothèques de décoration au lieu de la bibliothèque de serpents sur la ligne d'entrée. . .

La partie du code doit donc être remplacée par:

\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

14
Cesar Rabak

Tim Storer a écrit une image plus flexible et plus agréable timeline.sty (lien Internet Archive Wayback Machine, comme l'original a disparu). De plus, la ligne est horizontale plutôt que verticale. Ainsi, par exemple:

\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}

produit une chronologie qui ressemble à ceci:

2008                              2010
 · · April, 2008 First Podcast    ·
       · July, 2008 Private Beta
           · September, 2008 Public Beta
                · 2009 IPO?

Personnellement, je trouve cette solution plus agréable que les autres réponses. Mais je me retrouve également à modifier le code pour se rapprocher de ce que je pense qu'une chronologie devrait ressembler. Il n'y a donc pas de solution définitive à mon avis.

13
Jon Ericson

Tout d'abord, je préfère la solution guidée tikz, car elle vous donne plus de liberté. Deuxièmement, je ne poste rien de totalement nouveau. C'est évidemment similaire à la réponse de Zoé Gagnon, car il a montré la voie.

J'avais besoin d'un calendrier d'une année et cela m'a pris du temps (quelle surprise!) Pour le faire, donc je partage les résultats. J'espère que vous l'aimerez.

\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}

Comme vous pouvez le voir, il est adapté à la présentation du beamer (sélectionnez une partie et également une option d'échelle), mais si vous voulez vraiment le tester dans une présentation, vous devez déplacer \newlength\yearposx en dehors de la définition de la trame, sinon vous obtiendrez une erreur indiquant véritablement cette commande \yearposx est déjà défini (sauf si vous supprimez la partie de sélection et toute autre commande de fractionnement de cadre de votre cadre).

enter image description here

10
przemoc

Si vous recherchez des diagrammes de séquence UML, vous pourriez être intéressé par pkf-umlsd , qui est basé sur TiKZ. De belles démos peuvent être trouvées ici .

2
wr.

Il y a timeline.sty flottant autour.

La syntaxe est plus simple que d'utiliser 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.

J'ai utilisé datetime.data.toordinal de python pour convertir les dates en "clés de tri" dans le contexte du package.

2
saffsd