How to create a timeline with LaTeX?

前端 未结 8 1433
感动是毒
感动是毒 2020-12-12 09:52

In history-books you often have timeline, where events and periods are marked on a line in the correct relative distance to each other. How is it possible to create somethin

相关标签:
8条回答
  • 2020-12-12 10:23

    Just an update.

    The present TiKZ package will issue: Package tikz Warning: Snakes have been superseded by decorations. Please use the decoration libraries instead of the snakes library on input line. . .

    So the pertaining part of code has to be changed to:

    \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

    0 讨论(0)
  • 2020-12-12 10:23

    There is timeline.sty floating around.

    The syntax is simpler than using 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.
    

    I've used python's datetime.data.toordinal to convert dates to 'sort keys' in the context of the package.

    0 讨论(0)
  • 2020-12-12 10:25

    The tikz package seems to have what you want.

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

    I'm not too expert with tikz, but this does give a good timeline, which looks like:

    enter image description here

    0 讨论(0)
  • 2020-12-12 10:29

    If you are looking for UML sequence diagrams, you might be interested in pkf-umlsd, which is based on TiKZ. Nice demos can be found here.

    0 讨论(0)
  • 2020-12-12 10:32

    Tim Storer wrote a more flexible and nicer looking timeline.sty (Internet Archive Wayback Machine link, as original is gone). In addition, the line is horizontal rather than vertical. So for instance:

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

    produces a timeline that looks like this:

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

    Personally, I find this a more pleasing solution than the other answers. But I also find myself modifying the code to get something closer to what I think a timeline should look like. So there's not definitive solution in my opinion.

    0 讨论(0)
  • 2020-12-12 10:36

    There is a new chronology.sty by Levi Wiseman. The documentation (pdf) says:

    Most timeline packages and solutions for LATEX are used to convey a lot of information and are therefore designed vertically. If you are just attempting to assign labels to dates, a more traditional timeline might be more appropriate. That's what chronology is for.

    Here is some example 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}
    

    Which produces this output:

    example output from chronology.sty

    0 讨论(0)
提交回复
热议问题