I was wandering through the internet and came across http://graphicalcooking.co. An attractive format, and I said to myself, "TikZ can do that!" And so it can. I wrestled with this this morning and have arrived at the following. My only problem is the lines connecting the hexagons in the instructions for the recipe. I cannot think of a way to get the various lines to intersect with each other (at the circled locations) without explicitly computing the distances. It would be nice to have a macro, \connect
that would do the work, say, by use of the intersections
TikZ library. Any suggestions? I hope I have commented the code sufficiently that there are no mysteries... I've included a couple of examples of what the as-yet fictional \connect
macro might do.
\documentclass{article}
%% Compare with http://graphicalcooking.co
\usepackage{xcolor}
\usepackage{tikz}
\usepackage[papersize={5.5in,8.5in},margin=0.5in,bottom=0.75in]{geometry}
\usepackage{xfrac}
\usetikzlibrary{calc,positioning,shapes.geometric,intersections}
\newlength{\minsize}
\newlength{\skipln}
\setlength{\minsize}{1.00in}
\setlength{\skipln}{0.1in}
\def\fr#1/#2 {\sfrac{#1}{#2} }
\tikzset{% Simplify using TikZ pics
pics/hex/.style n args={4}{% #1= name; #2=color; #3 top in bold; #4 bottom in italics
code={%
\node[%
draw,
very thick,
color=#2,
rounded corners=3pt,
regular polygon,
regular polygon sides=6,
shape border rotate=90, %% !!
inner sep=0pt,
minimum size=\minsize,
inner sep=0pt,
align=center
] (#1) at (0,0) {};
\node[text width=0.95\minsize,align=center] at (#1)
{\textbf{\strut#3\strut}\\\emph{\strut#4\strut}};
}
}
}
\tikzset{rc/.style = {rounded corners=3pt}}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[]
\pgfmathsetlengthmacro{\movehex}{cos(30) * \minsize} %% (0,0) to *side* of hexagon
\pgfmathsetlengthmacro{\branchln}{(\movehex+\skipln)/2/cos(30)} %% length of line after bend
%% Create the hexagons
\pic at (0,0) {hex={A}{blue}{Parmesan}{\fr1/4 cup}};
\pic at (\movehex+\skipln,0.0in) {hex={C}{green!70!black}{Lettuce}{\fr1/2 head}};
\pic at (2*\movehex+2*\skipln,0.0in) {hex={D}{orange}{Carrot}{1}};
\pic at (0.5*\movehex+\skipln/2,-\movehex+\skipln/2) {hex={B}{red}{Tomato}{1}};
\pic at (1.5*\movehex+3*\skipln/2,-\movehex+\skipln/2) {hex={E}{purple}{Red Onion}{\fr1/4 }};
\pic at ($(E) + (\movehex+\skipln,0)$) {hex={F}{yellow!80!green}{EVOO}{\fr1/4 cup}};
\pic at ($(F) + (\movehex+\skipln,0)$) {hex={G}{pink}{Red Wine\\Vinegar}{\fr1/8 cup}};
\coordinate (t1) at ($(B)!.5!(E)$);
\path (t1) -- ++(0,-3.5in) coordinate (t2);
%% Draw the connections
%% This would be neater with a macro something like (\connect yet to be defined!):
%% \connect{1.75in}{B.south}{C.south}{0.85in}{Place in bowl} where
%% #1=vertical displacement; #2=source coordinate; #3=coordinate with which to align end of connector
%% #4=vertical displacement for instruction; #5=instruction
%% Would also allow for arbitrary placement of hexagons
\draw[thick] (C.south) -- (t2);
\draw[rc,blue] (B.south) -- ++(0,-1.75in) -- ++(-30:\branchln) node[circle,draw] {};
%% or \connect{-1.75in}{B.south}{C.south}{0.85in}{Place in bowl}
\draw[rc] (E.south) -- ++(0,-1.5in) -- ++(210:\branchln) node[circle,draw] {};
\draw[rc,red] (A.south) -- ++(0,-1.75in) -- ++(-30:\branchln) node[circle,draw] {};
%% or \connect{-1.5in}{A.south}{B.south}{0.5in}{Slice}
\draw[rc] (D.south) -- ++(0,-2.5in) -- ++(210:2*\branchln) node[circle,draw] {};
\draw[rc] (F.south) -- ++(0,-0.25in) -- ++(-30:\branchln) node[circle,draw] {};
\draw[rc] (G.south) -- ++(0,-0.25in) -- ++(210:\branchln) coordinate (i1);
\draw[rc] (i1) -- ++(0,-1in) -- ++(210:4*\branchln) node[circle,draw] {};
%% Ingredient instructions
\node[below=0.85in of C.south,fill=white] {Place in bowl};
\node[below=1.0in of A.south,fill=white] {Grate};
\node[below=0.5in of B.south,fill=white] {Slice};
\node[below=1.0in of E.south,fill=white] {Dice};
\node[below=1.25in of D.south,fill=white] {Chop};
\node[below=0.25in of i1,fill=white] {Mix in blender};
\node[draw,fill=white,rounded corners=3pt] at (t2) {\strut Toss \& Serve};
\end{tikzpicture}
\newpage
\begin{tikzpicture}
\setlength{\skipln}{0.025in}
\pgfmathsetlengthmacro{\movehex}{cos(30) * \minsize}
\pgfmathsetlengthmacro{\branchln}{(\movehex+\skipln)/2/cos(30)}
\pic at (0,-5.25in) {hex={P}{blue}{Parmesan}{}};
\pic at ($(P) + (-60:\movehex+\skipln)$) {hex={Q}{green!70!black}{blue/Z2}{}};
\pic at ($(P) + (\movehex+\skipln,0)$) {hex={R}{orange}{Cheddar\\xxx}{}};
\pic at ($(R) + (\movehex+\skipln,0)$) {hex={S}{purple}{Eggplant\\yyy}{}};
\pic at ($(Q) + (\movehex+\skipln,0)$) {hex={T}{yellow}{Cream\\zzz}{}};
\end{tikzpicture}
\end{document}