У книгах з історії у вас часто є хронологія, де події та періоди позначені на рядку на правильній відносній відстані один від одного. Як можна створити щось подібне в LaTeX?
Відповіді:
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, але це дає хороший графік, який виглядає так:
З’явилася нова хронологія . Леві Вайсман . У документації (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}
Що дає цей результат:
\textwidth
?
{3ex}
).
Також пакет chronosys забезпечує приємне рішення. Ось приклад з посібника користувача:
Просто оновлення.
Цей пакет 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
\usetikzlibrary{decorations.pathmorphing}
. Також зробіть, \documentclass[tikz]{standalone}
якщо ви хочете, щоб щільно обрізане зображення вставлялося в інший документ.
Тім Сторер написав більш гнучкий та приємний вигляд 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?
Особисто я вважаю це більш приємним рішенням, ніж інші відповіді. Але я також виявляю, що модифікую код, щоб наблизити щось до того, що, на мою думку, має виглядати шкала часу. Отже, остаточного рішення, на мій погляд, немає.
По-перше, я віддаю перевагу 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}
Як бачите, він пристосований до променівної презентації (виберіть частину, а також параметр масштабу), але якщо ви дійсно хочете протестувати це в презентації, то вам слід перейти \newlength\yearposx
за межі визначення кадру, оскільки в іншому випадку ви отримаєте помилку, в якій справді буде зазначено ця команда \yearposx
вже визначена (якщо ви не видалите частину виділення та будь-які інші команди розділення кадру зі своєї рамки).
Навколо плаває 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.
Я використовував python datetime.data.toordinal для перетворення дат у "ключі сортування" в контексті пакету.