2008-10-20 4 views
65

В книгах по истории у вас часто есть временная шкала, где события и периоды отмечены на линии в правильном относительном расстоянии друг от друга. Как можно создать что-то подобное в LaTeX?Как создать временную шкалу с помощью LaTeX?

+1

вот мой ответ: http://tex.stackexchange.com/questions/183046/how-do-i-develop-a-complex- time-line/227149 # 227149 Надеюсь, это может помочь – flav 2015-02-12 12:29:30

ответ

39

tikz упаковка, кажется, имеет то, что вы хотите.

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

Я не слишком эксперт tikz, но это действительно дает хороший график, который выглядит как:

enter image description here

+0

Выход выглядит хорошо. Синтаксис не так прост, как я надеялся, но я думаю, что могу создать некоторые команды, чтобы упростить материал. Спасибо за это предложение. – Mnementh 2008-10-21 11:19:39

+0

Прокрутить вниз, чтобы увидеть обновленную версию этого кода – PatrickT 2014-02-11 11:39:49

2

Существует timeline.sty плавающие вокруг.

Синтаксиса проще, чем с помощью 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. 

Я использовал Питон datetime.data.toordinal для преобразования даты, чтобы «ключи сортировки» в контексте пакета.

+3

Не могли бы вы отредактировать свой ответ, чтобы включить пример? – russellpierce 2012-01-15 17:46:06

12

Tim Storer написал более гибкий и приятный вид timeline.sty (ссылка на интернет-архив Wayback Machine, поскольку оригинал ушел). Кроме того, линия горизонтальная, а не вертикальная. Так, например:

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

производит график, который выглядит следующим образом:

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

Лично я нахожу это более приятным решением, чем другие ответы. Но я также могу изменить код, чтобы получить что-то ближе к тому, что, по моему мнению, должно выглядеть так. На мой взгляд, нет окончательного решения.

2

Если вы ищете диаграммы последовательности UML, возможно, вас заинтересует pkf-umlsd, который основан на TiKZ. Хорошие демонстрации можно найти here.

+0

Нет, меня больше интересовала временная шкала, как в исторической книге. Но, тем не менее, UML-диаграммы в LaTeX могут появиться и в другом проекте. – Mnementh 2009-06-26 10:20:55

9

Во-первых, я предпочитаю ориентированное решение tikz, потому что оно дает вам больше свободы. Во-вторых, я не публикую ничего нового. Очевидно, это похоже на ответ Зои Ганьон, потому что он показал путь.

Мне нужна была временная шкала года, и мне потребовалось некоторое время (что за сюрприз!), Чтобы сделать это, поэтому я делюсь результатами. Я надеюсь, вам понравится.

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

Как вы можете видеть, это с учетом BEAMER презентации (выбрать часть, а также масштабировать вариант), но если вы действительно хотите, чтобы проверить его в презентации, то вы должны двигаться \newlength\yearposx вне определения кадра, потому что в противном случае вы получите ошибочную уверенность в том, что команда \yearposx уже определена (если вы не удалите часть выбора и любые другие команды разделения кадра из вашего фрейма).

enter image description here

+0

спасибо за обмен: я добавил преамбулу к коду и изображение вывода, надеюсь, что вы не против. – PatrickT 2014-02-11 11:51:36

+1

@PatrickT: Любые улучшения в ответах всегда приветствуются, поэтому, очевидно, я не против. :) – przemoc 2014-02-11 16:08:56

14

Просто обновление.

Настоящий пакет TiKZ выдаст: Пакет tikz Предупреждение: Змеи были заменены украшениями. Пожалуйста, используйте библиотеки украшений вместо библиотеки змей на входной строке. , ,

Так относящиеся часть кода должен быть изменен на:

\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

+2

Я думаю, что теперь это стало: `\ usetikzlibrary {decorations.pathmorphing}`. Кроме того, do `\ documentclass [tikz] {standalone}`, если вы хотите, чтобы изображение с плотным обрезанием было вставлено в другой документ. – PatrickT 2014-02-11 11:38:15

64

Существует новая chronology.sty по Levi Wiseman. documentation (PDF) говорит:

Большинство пакетов по временной шкале и решения для LATEX используются, чтобы передать много информации, и поэтому разработаны вертикально. Если вы просто пытаетесь присвоить метки датам, более подходящая временная шкала может быть более подходящей. Это , для какой хронологии.

Вот несколько примеров кода:

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

Который производит этот выход:

example output from chronology.sty

14

Также пакет chronosys обеспечивает хорошее решение. Вот пример из руководства пользователя:

enter image description here

Смежные вопросы