Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question
    
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
1  
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
add comment

2 Answers 2

up vote 30 down vote accepted

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

alt text

share|improve this answer
1  
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 '13 at 23:09
add comment

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

alt text

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

share|improve this answer
    
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
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.