2008-10-20 11 views
65

Trong sách lịch sử, bạn thường có dòng thời gian, trong đó các sự kiện và dấu chấm được đánh dấu trên một dòng trong khoảng cách tương đối chính xác với nhau. Làm thế nào là nó có thể tạo ra một cái gì đó tương tự trong LaTeX?Cách tạo dòng thời gian với LaTeX?

+1

đây câu trả lời của tôi: http://tex.stackexchange.com/questions/183046/how-do-i-develop-a-complex- time-line/227149 # 227149 Tôi hy vọng Nó có thể giúp – flav

Trả lời

39

Gói tikz dường như có những gì bạn muốn.

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

Tôi không quá chuyên gia với tikz, nhưng điều này không đưa ra một thời gian tốt, trông giống như:

enter image description here

+0

Kết quả hiển thị tốt. Cú pháp không đơn giản như tôi mong đợi, nhưng tôi nghĩ tôi có thể tạo một số lệnh để đơn giản hóa nội dung. Cảm ơn bạn đã đề xuất này. – Mnementh

+0

cuộn xuống để xem phiên bản cập nhật của mã này – PatrickT

2

timeline.sty nổi xung quanh.

Cú pháp là đơn giản hơn so với sử dụng 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. 

Tôi đã sử dụng python của datetime.data.toordinal để chuyển đổi ngày để 'phím loại' trong bối cảnh của gói.

+3

Bạn có thể chỉnh sửa câu trả lời của mình để bao gồm ví dụ không? – russellpierce

12

Tim Storer đã viết một cái nhìn linh hoạt và đẹp hơn timeline.sty (liên kết Máy chủ lưu trữ Internet Wayback, khi đã biến mất). Ngoài ra, đường thẳng nằm ngang chứ không phải dọc. Vì vậy, ví dụ:

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

tạo ra một mốc thời gian mà trông như thế này:

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

Cá nhân, tôi thấy đây là một giải pháp làm hài lòng nhiều hơn câu trả lời khác. Nhưng tôi cũng thấy mình sửa đổi mã để có được một cái gì đó gần gũi hơn với những gì tôi nghĩ rằng một dòng thời gian sẽ như thế nào. Vì vậy, không có giải pháp dứt khoát theo ý kiến ​​của tôi.

2

Nếu bạn đang tìm kiếm sơ đồ trình tự UML, bạn có thể quan tâm đến pkf-umlsd, dựa trên TiKZ. Bản trình diễn tuyệt vời có thể được tìm thấy here.

+0

Không, tôi quan tâm nhiều hơn đến dòng thời gian như trong một cuốn sách lịch sử. Nhưng nhờ vậy, các sơ đồ UML trong LaTeX có thể xuất hiện trong một dự án khác. – Mnementh

9

Thứ nhất, tôi thích tikz giải pháp được hướng dẫn, vì nó mang đến cho bạn nhiều tự do hơn. Thứ hai, tôi không đăng bất cứ điều gì hoàn toàn mới. Nó rõ ràng là tương tự như câu trả lời của Zoe Gagnon, bởi vì anh ta đã chỉ đường.

Tôi cần một khoảng thời gian năm và tôi mất một thời gian (thật bất ngờ!) Để làm điều đó, vì vậy tôi đang chia sẻ kết quả. Tôi hy vọng bạn sẽ thích nó.

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

Như bạn thấy, nó phù hợp với máy chiếu thuyết trình (chọn một phần và cũng có thể mở rộng tùy chọn), nhưng nếu bạn thực sự muốn thử nghiệm nó trong một bài thuyết trình, sau đó bạn nên di chuyển \newlength\yearposx bên ngoài của định nghĩa khung hình, vì nếu không bạn sẽ nhận được lỗi một cách rõ ràng nói rằng lệnh \yearposx đã được xác định (trừ khi bạn xóa phần lựa chọn và bất kỳ lệnh tách khung nào khác khỏi khung của bạn).

enter image description here

+0

cảm ơn bạn đã chia sẻ: Tôi đã thêm phần mở đầu cho mã và hình ảnh đầu ra, hy vọng bạn không phiền. – PatrickT

+1

@PatrickT: Mọi cải tiến trong câu trả lời luôn được hoan nghênh, vì vậy rõ ràng là tôi không thể bận tâm. :) – przemoc

14

Chỉ cần cập nhật.

Gói TiKZ hiện tại sẽ phát hành: Gói tikz Cảnh báo: Rắn đã được thay thế bằng trang trí. Vui lòng sử dụng thư viện trang trí thay vì thư viện rắn trên dòng đầu vào. . .

Vì vậy, các bộ phận liên quan của mã phải được đổi thành:

\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

Tôi nghĩ rằng điều này đã trở thành: '\ usetikzlibrary {decorations.pathmorphing}'. Ngoài ra, hãy làm '\ documentclass [tikz] {standalone}' nếu bạn muốn một hình ảnh được cắt chặt để chèn vào một tài liệu khác. – PatrickT

64

Có một mới chronology.sty bởi Levi Wiseman. documentation (pdf) cho biết:

Hầu hết các gói và giải pháp thời gian cho LATEX được sử dụng để truyền đạt nhiều thông tin và do đó được thiết kế theo chiều dọc. Nếu bạn chỉ cố gắng gán nhãn cho các ngày, một dòng thời gian truyền thống hơn có thể phù hợp hơn. Đó là niên đại là gì.

Dưới đây là một số mã ví dụ:

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

nào sản xuất sản lượng này:

example output from chronology.sty

+2

Cần lưu ý rằng gói này dường như chỉ hỗ trợ một dòng thời gian cho mỗi tài liệu. Ít nhất đối với tôi, tôi nhận được lỗi "lệnh \ c @ bước đã được xác định" khi tôi cố gắng có nhiều hơn một. – russellpierce

+3

Tôi đã cố gắng sửa đổi tệp chronology.sty để có được dòng thời gian theo chiều dọc nhưng không thành công. Có phiên bản theo chiều dọc không? – highsciguy

+1

Gói nào chứa '' '\ textwidth'''? –

14

Cũng gói chronosys cung cấp một giải pháp tốt đẹp. Dưới đây là một ví dụ từ các hướng dẫn sử dụng:

enter image description here

+3

cảm ơn!lạ lùng, anh chàng người viết tài liệu vẫn gọi điện thoại cho dòng thời gian là một "sự đóng băng" như thể đó là điều tương tự như một dòng thời gian. chỉ cần đặt ở đây trong trường hợp bất kỳ ai khác đọc tài liệu. –