[latex] LaTeX로 타임 라인을 만드는 방법은 무엇입니까?

역사 책에는 종종 일정과 기간이 서로 정확한 상대적 거리에있는 선에 표시되는 타임 라인이 있습니다. 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에 너무 전문적이지는 않지만 다음과 같은 좋은 타임 라인을 제공합니다.

여기에 이미지 설명 입력


답변

Levi Wiseman 의 새로운 chronology.sty 가 있습니다. 문서 (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}

다음 출력을 생성합니다.

chronology.sty의 출력 예


답변

또한 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


답변

Tim Storer 는 더 유연하고보기 좋은 글을 썼습니다 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}

다음과 같은 타임 라인을 생성합니다.

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

개인적으로 나는 이것이 다른 답변보다 더 즐거운 해결책이라고 생각합니다. 하지만 타임 라인이 어떻게 생겼는지에 더 가깝게 만들기 위해 코드를 수정하고 있습니다. 그래서 제 생각에는 확실한 해결책이 없습니다.


답변

첫째, tikz더 많은 자유를 제공하기 때문에 가이드 솔루션을 선호합니다 . 둘째, 나는 완전히 새로운 것을 게시하지 않습니다. 그가 길을 보여 주었기 때문에 Zoe Gagnon의 대답과 분명히 비슷합니다.

나는 몇 년의 타임 라인이 필요했고 그것을하는 데 약간의 시간이 걸렸기 때문에 (놀랍습니다!) 결과를 공유하고 있습니다. 나는 당신이 그것을 좋아하기를 바랍니다.

\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 시퀀스 다이어그램을 찾고 있다면 TiKZ 를 기반으로하는 pkf-umlsd에 관심이있을 수 있습니다 . 멋진 데모는 여기 에서 찾을 수 있습니다 .