I would like to make the following timeline into LaTeX:
Updated code
%I added my full preamble for proper compiling
\PassOptionsToPackage{table,dvipsnames,svgnames}{xcolor}
\documentclass[11pt, twoside, a4paper]{report}
\usepackage[inner = 30mm, outer = 20mm, top = 30mm, bottom = 20mm, headheight = 13.6pt]{geometry}
\usepackage{emptypage}
\usepackage[toc,page]{appendix}
\usepackage{tikz}
\usepackage[pdfpagelayout=TwoPageRight]{hyperref}
\usepackage{listings}
\usepackage{multicol}
\usepackage{apacite}
\usepackage{color}
\usepackage{textcomp}
\usepackage{chngcntr}
\usepackage[export]{adjustbox}
\hypersetup{colorlinks=true, linktoc=all, allcolors=green!30!black,}
\usepackage{booktabs, siunitx, caption}
\newcommand{\source}[1]{\vspace{-8pt} \caption*{ Source: {#1}} }
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{slashbox}
\usepackage[caption=false]{subfig}
\usepackage{array}
\newlength\tbspace
\setlength\tbspace{3cm}
\newcolumntype{L}{l<{\hspace{\tbspace}}}
\usepackage{wrapfig}
\graphicspath{ {./Figures/} }
\usepackage{gensymb}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\patchcmd{\@makechapterhead}{\vspace*{50\p@}}{}{}{}% Removes space above \chapter head
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}% Removes space above \chapter* head
\makeatother
\usepackage{pgfplots}
\pgfplotsset{compat=1.11,
/pgfplots/ybar legend/.style={
/pgfplots/legend image code/.code={%
\draw[##1,/tikz/.cd,yshift=-0.25em]
(0cm,0cm) rectangle (3pt,0.8em);},},}
\usepgfplotslibrary{statistics}
\usetikzlibrary{arrows}
\usepackage{tcolorbox}
\usepackage{fancyhdr}
\usepackage{layouts}
\usepackage{chronology}
%\usepackage{showframe}
\raggedbottom
\fancyfoot{}
\fancyhead{}
\fancyfoot[LE]{\thepage}
\fancyfoot[RO]{\thepage}
\fancyhead[LE]{\nouppercase{\leftmark}}
\fancyhead[RO]{\nouppercase{\rightmark}}
\pagestyle{fancy}
% Redefine the plain page style so chapter pages match my footer preference
\fancypagestyle{plain}{%
\fancyhf{}%
\fancyfoot[LE]{\thepage}
\fancyfoot[RO]{\thepage}
\renewcommand{\headrulewidth}{0pt}% Line at the header invisible
\renewcommand{\footrulewidth}{0pt}% Line at the footer visible
}
\usetikzlibrary{arrows.meta,calc,positioning}
\colorlet{A}{gray}
\colorlet{B}{lightgray}
\colorlet{C}{white}
\pgfdeclarelayer{background}
\pgfdeclarelayer{timeline}
\pgfdeclarelayer{period}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,timeline,period,main,foreground}
%https://tex.stackexchange.com/a/349215
\tikzset{
timeline/.style={arrows={}}%
,timeline style/.style={timeline/.append style={#1}}%
,year label/.style={font=\small\sffamily\bfseries,below}%
,year label style/.style={year label/.append style={#1}}%
,year tick/.style={tick size=0pt}%
,year tick style/.style={year tick/.append style={#1}}%
,minor tick/.style={tick size=0pt, very thin}%
,minor tick style/.style={minor tick/.append style={#1}}%
,period/.style={solid,line width=\timelinewidth,line cap=square}%
,periodbox/.style={font=\small\sffamily\bfseries,text=black}%
,eventline/.style={draw,red,thick,line cap=round,line join=round}%
,eventbox/.style={rectangle,rounded corners=3pt,inner sep=3pt,fill=red!25!white,text width=3cm,anchor=west,text=black,align=left,font=\small}%
,tick size/.code={\def\ticksize{#1}}%
,labeled years step/.code={\def\yearlabelstep{#1}}%
,minor tick step/.code={\def\minortickstep{#1}}%
,year tick step/.code={\def\yeartickstep{#1}}%
,enlarge timeline/.code={\def\enlarge{#1}}%
,eventboxa/.style={eventbox,text width=#1,draw=A,fill=none}%
,eventboxb/.style={eventbox,text width=#1,draw=A,fill=none}%
}
% Still from %https://tex.stackexchange.com/a/349215
\newcommand*{\drawtimeline}[5][]{%
\def\fromyear{#2}%
\def\toyear{#3}%
\def\timelinesize{#4}%
\def\timelinewidth{#5}%
\pgfmathsetmacro{\timelinesizept}{\timelinesize}%
\pgfmathsetmacro{\timelinewidthpt}{\timelinewidth}%
\pgfmathsetmacro{\timelineoffset}{\timelinewidth/2}
\pgfmathsetmacro{\timelineoffsetpt}{\timelineoffset}
%
\begin{scope}[x=1pt, y=1pt, % Change main units to pt
labeled years step=1,% Set some defaults
minor tick step=0.25,%
enlarge timeline=0cm,%
year tick step=1,#1]
\pgfmathsetmacro{\enlargept}{\enlarge}
\pgfmathsetmacro{\yearticksep}{\timelinesize/((\toyear-\fromyear)/\yeartickstep)}
\pgfmathsetmacro{\minorticksep}{\timelinesize/((\toyear-\fromyear)/\minortickstep)}
\pgfmathsetmacro{\minorticklast}{\minorticksep/\minortickstep}
\foreach \y[remember=\y as \lasty (initially 0), count=\i from \fromyear] in {0,\yearticksep,...,\timelinesizept}{
\coordinate (Y-\i) at (\y,0);
\draw[year tick] (\y,-\ticksize/2) -- ++(0,\ticksize);
\ifnum\i=\toyear\breakforeach\else
\foreach \q[count=\j from 0] in {0,\minorticksep,...,\minorticklast}
{
\coordinate (Y-\i-\j) at (\q+\y,0);
\begin{pgfonlayer}{timeline}
\draw[minor tick] (\q+\y,-\ticksize/2) -- ++(0,\ticksize);
\end{pgfonlayer}
};\fi};%
\pgfmathsetmacro{\nextyear}{int(\fromyear+\yearlabelstep)}
\begin{pgfonlayer}{timeline}
\draw[timeline] (0,0) -- ++(-\enlargept,0) (0,0) -- ++(\timelinesizept,0) coordinate (end) -- ++(\enlargept,0);% Timeline
\end{pgfonlayer}
% \foreach \y in {\fromyear,\nextyear,...,\toyear} \node[year label] at (Y-\y) {\y};
\end{scope}%
}
% Put a period identifier midway between the start and end of the period
% 1 = color of timeline segment
% 2 = period start
% 3 = period end
% 4 = period text
\newcommand{\period}[5]{\begin{pgfonlayer}{period} \draw[period,#1] (Y-#2) -- (Y-#3) node[periodbox,#5,midway,text=white] {\begin{tabular}{l} #4
\end{tabular}}; \end{pgfonlayer}}
%This somewhat follows @cfr's Chronos. It was certainly inspired by Chronos.
%https://tex.stackexchange.com/a/349236
% 1 = format of line and box
% 2 = starting coordinate
% 3 = pin associated with starting coordinate (well suited to using polar coordinate)
% 4 = branch at top of pin (well suited to using polar coordinate)
% 5 = Any extra formatting of node
% 6 = Name of node
% 7 = Node content
\newcommand{\vevent}[7]{\begin{pgfonlayer}{timeline} \draw[eventline,#1](Y-#2) -- ++(#3) -- ++(#4) node[#5] (#6) {#7}; \end{pgfonlayer}}
\begin{document}
\begin{figure}
\begin{tikzpicture}
\drawtimeline[
labeled years step=1,
minor tick step=0.083333,
timeline style={draw=gray,line width=\timelinewidthpt},
minor tick style={-,lightgray,tick size=0pt,line width=0pt,yshift=-\timelineoffsetpt},
]%
{2017}{2019}{19cm}{0.5cm};
%
\period{A}{2017-0}{2017-1}{'17}{}
\period{B}{2017-1}{2017-2}{F}{}
\period{A}{2017-2}{2017-3}{M}{}
\period{B}{2017-3}{2017-4}{A}{}
\period{A}{2017-4}{2017-5}{M}{}
\period{B}{2017-5}{2017-6}{J}{}
\period{A}{2017-6}{2017-7}{J}{}
\period{B}{2017-7}{2017-8}{A}{}
\period{A}{2017-8}{2017-9}{S}{}
\period{B}{2017-9}{2017-10}{O}{}
\period{A}{2017-10}{2017-11}{N}{}
\period{B}{2017-11}{2017-12}{D}{}
\period{A}{2018-0}{2018-1}{'18}{}
\period{B}{2018-1}{2018-2}{F}{}
\period{A}{2018-2}{2018-3}{M}{}
\period{B}{2018-3}{2018-4}{A}{}
\period{A}{2018-4}{2018-5}{M}{}
\period{B}{2018-5}{2018-6}{J}{}
\period{A}{2018-6}{2018-7}{J}{}
\period{B}{2018-7}{2018-8}{A}{}
\period{C}{2018-8}{2018-12}{empty}{}
%
\vevent{A}{2017-0}{90:1cm}{45:0.5cm}{eventboxa=4cm,anchor=west}{H}{Start of ZoW consortium\\10 Jan '17}
\vevent{A}{2017-5}{-90:2cm}{45:-0.5cm}{eventboxa=3cm,anchor=east}{H}{1\textsuperscript{st} Symposium\\8 Jun '17}
\vevent{A}{2017-7}{90:1cm}{45:0.5cm}{eventboxa=2.5cm,anchor=west}{H}{Completion of \\FPV systems\\ 20 Jul '17}
\vevent{A}{2017-12}{-90:2cm}{45:-0.5cm}{eventboxa=3cm,anchor=east}{H}{2\textsuperscript{nd} Symposium\\14 Dec '17}
\vevent{A}{2018-0}{90:1cm}{45:0.5cm}{eventboxa=2cm,anchor=west}{H}{Storm\\3 Jan '18}
\vevent{A}{2018-0}{90:2cm}{45:0.5cm}{eventboxa=2cm,anchor=west}{H}{Storm\\18 Jan '18}
\vevent{A}{2018-6}{-90:2cm}{45:-0.5cm}{eventboxa=3cm,anchor=east}{H}{3\textsuperscript{rd} Symposium\\14 Jun '18}
%
\node[draw=none,rectangle,fill=blue!70!black,text width=5cm,minimum height=1cm, text=white, align=center,font=\normalsize] (AA) at ([yshift=-0.9cm]Y-2018-4) {Internship \\ 12 Feb - 10 Aug};
\end{tikzpicture}
\caption{Timeline}
\label{fig:timeline}
\end{figure}
\end{document}
I adjusted the answer of @Ross to come to the following timeline:
The remaining problems are:
- I can't get the internship box to float between 12 feb and 10 aug. The only variables I have to change position are
text width=5cm
and([yshift=-0.9cm]Y-2018-4)
, right? - I would like the internship box to have the same rounded edges as the event labels
- I would like to place the events at the exact date of occurrence, not at the beginning or end of a month.
- I would like to change the font in the grey bar to default Computer Modern
chronology
package' can be combined with the lines/arrows for events and the bars for periods. Do you want the middle line bit only from the former and the above and below stuff from the latter or what exactly?article
class line and\end{document}
, which I hope is pretty neutral, but you never know.)