В учебниках истории часто бывает шкала времени, где события и периоды отмечены на линии на правильном относительном расстоянии друг от друга. Как можно создать что-то подобное в LaTeX?
Результат выглядит хорошо. Синтаксис не так прост, как я надеялся, но я думаю, что могу создать несколько команд, чтобы упростить работу. Спасибо за это предложение.
Большинство пакетов временных шкал и решений для LATEX используются для передачи большого количества информации и поэтому построены вертикально. Если вы просто пытаетесь присвоить датам ярлыки, более подходящей может быть более традиционная временная шкала. Вот для чего нужна хронология.
Следует отметить, что этот пакет поддерживает только одну временную шкалу для каждого документа. По крайней мере, для меня я получаю сообщение об ошибке «команда \ c @ step уже определена», когда пытаюсь использовать более одного.
russellpierce
3
Я попытался изменить файл chronology.sty, чтобы получить вертикальную временную шкалу, но безуспешно. Есть ли у него вертикальная версия?
благодаря! как ни странно, парень, который написал документацию, продолжает называть временную шкалу «фризом», как будто это то же самое, что и временная шкала. просто поместите это здесь на случай, если кто-то еще прочитает документацию.
Джонатан Комар
1
@JonathanKomar это от французского фризе, от средневекового латинского frisium. Это широкая горизонтальная полоса скульптурного или раскрашенного декора, а также горизонтальная бумажная полоса.
Жорж
15
Просто обновление.
Текущий пакет TiKZ будет выдавать: Пакет tikz Предупреждение: Змеи были заменены украшениями. Пожалуйста, используйте библиотеки оформления вместо библиотеки змей в строке ввода. . .
Таким образом, соответствующая часть кода должна быть изменена на:
Я думаю , что это теперь стало: \usetikzlibrary{decorations.pathmorphing}. Также сделайте это, \documentclass[tikz]{standalone}если вы хотите вставить сильно обрезанное изображение в другой документ.
PatrickT
14
Тим Сторер написал более гибкий и симпатичный timeline.sty(ссылка на Internet Archive Wayback Machine, поскольку оригинала больше нет). Кроме того, линия горизонтальная, а не вертикальная. Так например:
создает временную шкалу, которая выглядит следующим образом:
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уже определена (если вы не удалите часть выделения и любые другие команды разделения кадра из вашего кадра).
%%% 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 для преобразования дат в «ключи сортировки» в контексте пакета.
Я изо всех сил пытался найти правильный способ создания временной шкалы, что я наконец смог сделать с этой модификацией. Обычно при создании временной шкалы проблема заключалась в том, что я не мог добавить текст, чтобы четко объяснить каждую дату более длинным текстом. Я модифицировал и использовал латексный скрипт @Zoe Gagnon. Не стесняйтесь видеть следующее:
Ответы:
В пакете 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, но это дает хороший график, который выглядит так:
источник
Существует новая chronology.sty по Леви Уайзман . В документации (pdf) говорится:
Вот пример кода:
\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
(ссылка на Internet Archive 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}
создает временную шкалу, которая выглядит следующим образом:
Лично я считаю это более приятным решением, чем другие ответы. Но я также изменяю код, чтобы приблизиться к тому, как, по моему мнению, должна выглядеть временная шкала. Так что, на мой взгляд, окончательного решения нет.
источник
Во-первых, я предпочитаю
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
уже определена (если вы не удалите часть выделения и любые другие команды разделения кадра из вашего кадра).источник
Если вам нужны диаграммы последовательности UML, вас может заинтересовать pkf-umlsd , основанный на TiKZ. Хорошие демки можно найти здесь .
источник
Есть 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 для преобразования дат в «ключи сортировки» в контексте пакета.
источник
Я изо всех сил пытался найти правильный способ создания временной шкалы, что я наконец смог сделать с этой модификацией. Обычно при создании временной шкалы проблема заключалась в том, что я не мог добавить текст, чтобы четко объяснить каждую дату более длинным текстом. Я модифицировал и использовал латексный скрипт @Zoe Gagnon. Не стесняйтесь видеть следующее:
\documentclass{article} \usepackage{tikz} \usetikzlibrary{snakes} \usepackage{rotating} \begin{document} \begin{center} \begin{tikzpicture} % draw horizontal line \draw (-5,0) -- (6,0); % draw vertical lines \foreach \x in {-5,-4,-3,-2, -1,0,1,2} \draw (\x cm,3pt) -- (\x cm,-3pt); % draw nodes \draw (-5,0) node[below=3pt] {$ 0 $} node[above=3pt] {$ $}; \draw (-4,0) node[below=3pt] {$ 1 $} node[above=3pt] {$\begin{turn}{45} All individuals vote \end{turn}$}; \draw (-3,0) node[below=3pt] {$ 2 $} node[above=3pt] {$\begin{turn}{45} Policy vector decided \end{turn}$}; \draw (-2,0) node[below=3pt] {$ 3 $} node[above=3pt] {$\begin{turn}{45} Becoming a bureaucrat \end{turn} $}; \draw (-1,0) node[below=3pt] {$ 4 $} node[above=3pt] {$\begin{turn}{45} Bureaucrats' effort choice \end{turn}$}; \draw (0,0) node[below=3pt] {$ 5 $} node[above=3pt] {$\begin{turn}{45} Tax evasion decision made \end{turn}$}; \draw (1,0) node[below=3pt] {$ 6$} node[above=3pt] {$\begin{turn}{45} $p(x_{t})$ tax evaders caught \end{turn}$}; \draw (2,0) node[below=3pt] {$ 7 $} node[above=3pt] {$\begin{turn}{45} $q_{t}$ shirking bureaucrats \end{turn}$}; \draw (3,0) node[below=3pt] {$ $} node[above=3pt] {$\begin{turn}{45} Public service provided \end{turn} $}; \end{tikzpicture} \end{center} \end{document}
К сожалению, более длинные тексты не допускаются. Это будет выглядеть так: визуальное изображение временной шкалы выше
источник