Domanda

Nei libri di storia hai spesso una sequenza temporale, in cui eventi e periodi sono segnati su una linea nella corretta distanza relativa tra loro. Come è possibile creare qualcosa di simile in LaTeX?

È stato utile?

Soluzione

Il pacchetto tikz sembra avere quello che vuoi.

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

Non sono troppo esperto di tikz, ma questo fornisce una buona sequenza temporale, che assomiglia a:

inserisci qui la descrizione dell'immagine

Altri suggerimenti

C'è una nuova cronologia. porcile di Levi Wiseman . La documentazione (pdf) dice:

  

La maggior parte dei pacchetti e soluzioni temporali per LATEX sono utilizzati per trasmettere molte informazioni e sono quindi progettati verticalmente. Se stai solo tentando di assegnare etichette alle date, una sequenza temporale più tradizionale potrebbe essere più appropriata. Quello è   a cosa serve la cronologia.

Ecco un esempio di codice:

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

Che produce questo output:

  

esempio di output da chronology.sty

Anche il pacchetto chronosys offre una buona soluzione. Ecco un esempio dal manuale dell'utente:

inserisci qui la descrizione dell'immagine

Solo un aggiornamento.

Il presente pacchetto TiKZ emetterà: Pacchetto tikz Avvertenza: i serpenti sono stati sostituiti da decorazioni. Si prega di utilizzare le librerie di decorazioni invece di libreria di serpenti sulla riga di input. . .

Quindi la parte pertinente del codice deve essere cambiata in:

\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

Tim Storer ha scritto un < code> timeline.sty (collegamento Internet Archive Wayback Machine, poiché l'originale è sparito). Inoltre, la linea è orizzontale anziché verticale. Quindi, ad esempio:

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

produce una sequenza temporale simile a questa:

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

Personalmente, trovo che questa sia una soluzione più piacevole rispetto alle altre risposte. Ma mi ritrovo anche a modificare il codice per avvicinarmi a quello che penso dovrebbe apparire una linea temporale. Quindi non c'è una soluzione definitiva secondo me.

In primo luogo, preferisco la soluzione guidata tikz , perché ti dà più libertà. In secondo luogo, non sto pubblicando nulla di totalmente nuovo. È ovviamente simile alla risposta di Zoe Gagnon, perché ha mostrato la strada.

Avevo bisogno di alcuni anni e mi ci è voluto del tempo (che sorpresa!) per farlo, quindi condivido i risultati. Spero ti piaccia.

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

Come puoi vedere, è su misura per la presentazione del beamer (seleziona la parte e anche l'opzione di ridimensionamento), ma se vuoi davvero testarlo in una presentazione, dovresti spostare \ newlength \ yearposx all'esterno della definizione del frame, perché altrimenti si verificherà un errore che indica in modo veritiero che il comando \ yearposx è già definito (a meno che non si rimuovano la parte di selezione e qualsiasi altro comando di divisione del frame dal frame).

inserisci qui la descrizione dell'immagine

Se stai cercando diagrammi di sequenza UML, potresti essere interessato a pkf-umlsd , basato su TiKZ. È possibile trovare belle demo qui .

C'è timeline.sty fluttuando intorno.

La sintassi è più semplice dell'uso di 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.

Ho usato datetime.data.toordinal di python per convertire le date in "chiavi di ordinamento" nel contesto del pacchetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top