# Drawing hexagons

I have a case where I need to draw a hexagonal grid in LaTeX. I am considering just reading the grid from an eps file.

Is there an alternative way to do it completely within LaTeX?

-
You can use TikZ and adopt the code from this triangular grid. –  Caramdir Nov 26 '10 at 23:14
as usual tikz or pstricks or metapost among others –  pluton Nov 26 '10 at 23:17
By the way, I was quite amused by your no-so-veiled "threat" to LaTeX: "I am considering just reading the grid from an eps file.".... :-) –  Yossi Farjoun Nov 28 '10 at 9:18
Thanks for mentioning TikZ. I want to typeset some astrology charts and this might be just the thing. –  Larry Coleman Nov 28 '10 at 23:14

Here's a quick option:

\begin{tikzpicture}
\foreach \i in {0,...,3}
\foreach \j in {0,...,3} {
\foreach \a in {0,120,-120} \draw (3*\i,2*sin{60}*\j) -- +(\a:1);
\foreach \a in {0,120,-120} \draw (3*\i+3*cos{60},2*sin{60}*\j+sin{60}) -- +(\a:1);}
\end{tikzpicture}


Which results in

-
I think your approximations are not good enough. The lines of the grid cross each other slightly. –  Caramdir Nov 26 '10 at 23:46
Fixed. I was lazy before, and it was late... –  Yossi Farjoun Nov 27 '10 at 10:40
That is an amazingly good solution! –  Yiannis Lazarides Nov 27 '10 at 12:48
I have to give you the checkmark. You did exactly how I dreamt it. –  John Smith Nov 29 '10 at 0:13
Took a bit of searching for the code to do this (but faster than doing it myself) but thanks. It's helped me too. –  Matthew Orlinski Apr 8 at 23:09

With TikZ, you can define a pattern which allows to fill any shape with a hexagonal grid by adding the option pattern=hexagons:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{patterns}

\def\hexagonsize{0.5cm}
\pgfdeclarepatternformonly
{hexagons}% name
{\pgfpointorigin}% lower left
{\pgfpoint{3*\hexagonsize}{0.866025*2*\hexagonsize}}%  upper right
{\pgfpoint{3*\hexagonsize}{0.866025*2*\hexagonsize}}%  tile size
{% shape description
\pgfsetlinewidth{0.4pt}
\pgftransformshift{\pgfpoint{0mm}{0.866025*\hexagonsize}}
\pgfpathmoveto{\pgfpoint{0mm}{0mm}}
\pgfpathlineto{\pgfpoint{0.5*\hexagonsize}{0mm}}
\pgfpathlineto{\pgfpoint{\hexagonsize}{-0.866025*\hexagonsize}}
\pgfpathlineto{\pgfpoint{2*\hexagonsize}{-0.866025*\hexagonsize}}
\pgfpathlineto{\pgfpoint{2.5*\hexagonsize}{0mm}}
\pgfpathlineto{\pgfpoint{3*\hexagonsize+0.2mm}{0mm}}
\pgfpathmoveto{\pgfpoint{0.5*\hexagonsize}{0mm}}
\pgfpathlineto{\pgfpoint{\hexagonsize}{0.866025*\hexagonsize}}
\pgfpathlineto{\pgfpoint{2*\hexagonsize}{0.866025*\hexagonsize}}
\pgfpathlineto{\pgfpoint{2.5*\hexagonsize}{0mm}}
\pgfusepath{stroke}
}
\begin{document}

\begin{tikzpicture}
\fill[pattern=hexagons] (0,0) rectangle (10,5);
\end{tikzpicture}

\begin{tikzpicture}
\fill[pattern=hexagons] (0,0) circle (3cm);
\end{tikzpicture}

\end{document}


You can change the size of the hexagons by modifying the value of the macro \hexagonsize.

-
I like it! Nice solution. –  Yossi Farjoun Nov 29 '10 at 8:16
Ah finally found it. I was looking for this nice snippet for a while with bad keywords :-) Would you like to write an answer to the open question tex.stackexchange.com/questions/54358/… ? I think this would be the perfect example. –  percusse Jun 17 '12 at 21:32
@percusse: thanks for notifying me. I'll add an answer later on. –  Philippe Goutet Jun 18 '12 at 6:34