0

I'm scratching my head on this one and may update it with a solution if someone doesn't beat me..

I'm looking to build a timeline (plain horizontal using https://github.com/ArneMeier/timeline) but want to add events with line/arrow callouts including pictures instead of the default rounded rectangles...

This is my ideal end point enter image description here

I guess if anything the challenge is to do a complex node containing an image and a text block?

baradhili
  • 271
  • 4
    Maybe your question would be more attractive with a sketch of what you have and another of what you need. And more with a Minimal Working Example of what you already tried. Thanks in advance. – SebGlav Jul 31 '21 at 16:05
  • A sketch of the expected output would also be really useful. Would you mind adding one to your question? – leandriis Aug 01 '21 at 08:10
  • updated with an ideal timeline goal – baradhili Aug 02 '21 at 01:42

2 Answers2

2

An attempt using the TikZ calendar library. Work only with lualatex (too many nodes for pdflatex). Some further detail in the code comments.

% !TEX program = lualatex   
\documentclass[border=3mm]{standalone}
\usepackage{fontspec}% for LuaLaTeX only
\setsansfont{Roboto}% for LuaLaTeX only
%\usepackage{txfonts}
\usepackage{tikz}
\usetikzlibrary{calendar,shapes.geometric,backgrounds,positioning}

\newcommand{\Divisor}{\draw[white,very thin] (-2*\daywidth,2pt) -- +(0,\timeLineHeigth-4pt);} % divisor on time line

\tikzset{tlAnnot/.style={text=white,inner sep=0pt,outer sep=0pt,text depth=0.2ex,text height=1.5ex,anchor=west,xshift=2*\daywidth}}% style annotation on time line

\newcommand{\timeline}[7]{% \def\TLColor{#1} \def\startYear{#2} \def\startMonth{#3} \def\startDay{#4} \def\endYear{#5} \def\endMonth{#6} \def\endDay{#7} \def\timeLineHeigth{4ex} \def\daywidth{0.5pt} \calendar[ dates=\startYear-\startMonth-\startDay to \endYear-\endMonth-\endDay, day list right, day code={% \begin{scope}[on background layer]
\node[ name=\pgfcalendarsuggestedname, text width=\daywidth, text height=\timeLineHeigth, inner sep=0pt, every day, fill=#1 ]{}; \end{scope} }, day xshift=\daywidth, month xshift=0pt, name=tl, ] if (equals=01-01) {\node[tlAnnot] at (-\daywidth,\timeLineHeigth/2){\pgfcalendarshorthand{y}{-}}; \Divisor} if (equals=04-01) {\node[tlAnnot] at (-\daywidth,\timeLineHeigth/2){\pgfcalendarshorthand{m}{.}}; \Divisor} if (equals=07-01) {\node[tlAnnot] at (-\daywidth,\timeLineHeigth/2){\pgfcalendarshorthand{m}{.}}; \Divisor} if (equals=10-01) {\node[tlAnnot] at (-\daywidth,\timeLineHeigth/2){\pgfcalendarshorthand{m}{.}}; \Divisor} ;% }

\newcommand{\UpCallOut}[6]{% \draw[blue!50,#1] (tl-#4) -- +(0,#2)node[regular polygon,regular polygon sides=3,fill=red,fill=#3,inner sep=0pt,outer sep=0pt,text width=2pt,anchor=corner 2,shape border rotate=-90,xshift=0.5pt,name=COFL]{};

\node[anchor=west,inner sep=1pt,align=left] (annot) at (COFL.corner 1) {#5\[-5pt]{\mbox{\scriptsize \textcolor{gray}{\let%=\pgfcalendarshorthand \pgfcalendar{cal}{#4}{#4} {%d- %m.}}}}};

\node[anchor=south,inner sep=0pt] at (annot.north){#6}; }

\newcommand{\DownCallOut}[6]{% \draw[blue!50,#1] (tl-#4) -- +(0,-#2)node[regular polygon,regular polygon sides=3,fill=red,fill=#3,inner sep=0pt,outer sep=0pt,text width=2pt,anchor=corner 2,shape border rotate=30,xshift=0.5pt,name=COFL]{};

\node[anchor=west,inner sep=1pt,align=left] (annot) at (COFL.corner 3) {\mbox{\scriptsize \textcolor{gray}{\let%=\pgfcalendarshorthand \pgfcalendar{cal}{#4}{#4} {%d- %m.}}}\[-5pt]#5};

\node[anchor=north,inner sep=0pt] at (annot.south){#6}; } \begin{document} \begin{tikzpicture}[font=\sffamily] % \timeline{tlc}{ys}{ms}{ds}{ye}{me}{de} % tlc = time line color % ys = year start of time line % ms = two digits month start of the time line with zero if necessary % ds = two digits day start of the time line with initial zero if necessary (you can use "last" for the last day of the month) % ye = year end of the time line % me = two digits month end of the time line with zero if necessary (es. 02 for Febrary) % de = two digits day end of the time line with initial zero if necessary (you can use "last" for the last day of the month) \timeline{violet}{2018}{12}{01}{2020}{12}{last} % You must draw a time line before using a \UpCallOut or \DownCallOut %\UpCallOut{fpst}{fph}{fc}{date}{cr}{ca} %\DownCallOut{fpst}{fph}{fc}{date}{cr}{ca} % fpst = flagstaff style (default color is blue!50, line width in default) % fph = flagstaff height % fc = flag color (default red) % date = date for the call out % cr = content right of the flag % ca = content above cr (can be an image via \includegraphics{imagefile}) \def\firstPolestaffHeigth{2cm} \def\StyleInNode#1{{\scriptsize \bfseries\textsc{#1}}}

\UpCallOut{}{\firstPolestaffHeigth}{}{2019-01-15}{\StyleInNode{Patients Recruited}}{\includegraphics[width=10ex]{example-image-duck}}

\UpCallOut{}{0.75*\firstPolestaffHeigth}{}{2019-03-01}{\StyleInNode{Patients Enrolled}}{}

\UpCallOut{}{0.5*\firstPolestaffHeigth}{}{2019-04-01}{\StyleInNode{Study Kick-off}}{}

\UpCallOut{}{0.5*\firstPolestaffHeigth}{}{2019-11-01}{\textcolor{red}{\StyleInNode{Report}}}{}

\DownCallOut{}{\firstPolestaffHeigth}{green!60!black}{2020-11-30}{\StyleInNode{Estimate}\[-5pt]\StyleInNode{Drug}\[-5pt]\StyleInNode{Approval}\[-5pt]\StyleInNode{Date}}{}

\end{tikzpicture} \end{document}

time line with call out

vi pa
  • 3,394
0

Well decided to put work in progress here..

Chronos is something I made into a local package from https://tex.stackexchange.com/a/342699/144214 waiting for the author to reply regarding repo location, otherwise I will publish

Right now it only has the coloured butt end line

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{chronos}

\begin{document} \begin{tikzpicture} [ chronos={% period/.style={draw=gray}, start date=1966-01-01, end date=1970-12-31, timeline line={blue, -Butt Cap}, timeline marks, timeline minor marks, timeline mark={gray}, timeline minor mark={gray}, minor steps=4, timeline year={font=\tiny, fill=none}, timeline margin=5mm, timeline height=2.5mm, timeline width=90mm, } ] \chronosevent{1969-07-21}{First Steps\on the Moon} \end{tikzpicture}

\end{document}

baradhili
  • 271