2008-10-20 42 views
65

En los libros de historia, a menudo tiene una línea de tiempo, donde los eventos y períodos se marcan en una línea con la distancia relativa correcta entre ellos. ¿Cómo es posible crear algo similar en LaTeX?¿Cómo crear una línea de tiempo con LaTeX?

+1

aquí mi respuesta: http://tex.stackexchange.com/questions/183046/how-do-i-develop-a-complex- línea de tiempo/227149 # 227149 Espero que pueda ayudar – flav

Respuesta

39

El paquete tikz parece tener lo que desea.

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

no soy muy experto con TikZ, pero esto da una buena línea de tiempo, que se parece:

enter image description here

+0

La salida se ve bien. La sintaxis no es tan simple como esperaba, pero creo que puedo crear algunos comandos para simplificar las cosas. Gracias por esta sugerencia. – Mnementh

+0

desplácese hacia abajo para ver una versión actualizada de este código – PatrickT

2

Hay timeline.sty flotando alrededor.

La sintaxis es más simple que el uso de 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. 

He usado de datetime.data.toordinal pitón para convertir las fechas para '' claves de ordenación en el contexto del paquete.

+3

¿Podría editar su respuesta para incluir un ejemplo? – russellpierce

12

Tim Storer escribió un aspecto más flexible y más agradable timeline.sty (Internet Archive Wayback Enlace de la máquina, como original se ha ido). Además, la línea es horizontal en lugar de vertical. Así, por ejemplo:

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

produce una línea de tiempo que tiene este aspecto:

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

Personalmente, creo que ésta sea una solución más agradable que las otras respuestas. Pero también me encuentro modificando el código para acercarme más a lo que creo que debería ser una línea de tiempo. Entonces no hay una solución definitiva en mi opinión.

2

Si está buscando diagramas de secuencia UML, podría estar interesado en pkf-umlsd, que se basa en TiKZ. Las demos agradables se pueden encontrar here.

+0

No, estaba más interesado en una línea de tiempo como en un libro de historia. Pero gracias, sin embargo, los diagramas UML en LaTeX también pueden aparecer en otro proyecto. – Mnementh

9

En primer lugar, prefiero tikz solución guiada, ya que le da más libertad. En segundo lugar, no estoy publicando nada totalmente nuevo. Obviamente es similar a la respuesta de Zoe Gagnon, porque mostró el camino.

Necesitaba un año de línea de tiempo y me tomó un tiempo (¡qué sorpresa!) Hacerlo, así que estoy compartiendo los resultados. Espero que te guste.

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

Como se puede ver, se adapta a Beamer presentación (sólo en parte y también escalar opción), pero si realmente quieres probarlo en una presentación, debe mover \newlength\yearposx fuera de la definición del marco, porque de lo contrario, obtendrá un error que indicará que el comando \yearposx ya está definido (a menos que elimine la parte de selección y cualquier otro comando de división de cuadros de su marco).

enter image description here

+0

gracias por compartir: he agregado un preámbulo al código y una imagen de la salida, espero que no te importe. – PatrickT

+1

@PatrickT: Cualquier mejora en las respuestas siempre es bienvenida, así que obviamente no me importa. :) – przemoc

14

Apenas una actualización.

El presente paquete TiKZ emitirá: Paquete tikz Advertencia: las serpientes han sido reemplazadas por las decoraciones . Utilice las bibliotecas de decoración en lugar de la biblioteca de serpientes en la línea de entrada. . .

Así que la parte relativa del código tiene que ser cambiado a:

\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

Creo que esto se ha convertido en: '\ usetikzlibrary {decorations.pathmorphing}'. Además, haga '\ documentclass [tikz] {standalone}' si desea que una imagen compactada se inserte en otro documento. – PatrickT

64

Hay un nuevo chronology.sty por Levi Wiseman. El documentation (pdf) dice:

mayoría de los paquetes de línea de tiempo y soluciones para el látex se utilizan para transmitir una gran cantidad de información y, por tanto, están diseñados verticalmente. Si solo intenta asignar etiquetas a las fechas, una línea de tiempo más tradicional podría ser más apropiada. Eso es para qué es la cronología.

Aquí es un código de ejemplo:

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

que produce esta salida:

example output from chronology.sty

+2

Debe tenerse en cuenta que este paquete parece solo admitir una línea de tiempo por documento. Al menos para mí, obtengo el error "command \ c @ step already defined" cuando intento tener más de uno. – russellpierce

+3

Intenté modificar el archivo chronology.sty para obtener una línea de tiempo vertical pero no tuve éxito. ¿Hay una versión vertical de esto? – highsciguy

+1

¿Qué paquete contiene '' '\ textwidth'''? –

14

también el paquete chronosys proporciona una buena solución. He aquí un ejemplo del manual de usuario:

enter image description here

+3

gracias!aunque extraño, el tipo que escribió la documentación sigue llamando a la línea de tiempo un "friso" como si eso fuera lo mismo que una línea de tiempo. solo poniendo eso aquí en caso de que alguien más lea la documentación. –

Cuestiones relacionadas