# How to draw honeycomb (line of hexagon)?

How can I draw a series of hexagon with a number inside of every hexagon (multiplication honeycomb)? I didn't find that pattern in logicpuzzle package.

Updating: I'm trying to wrtite $2x$ instead +2, $-3x$ instead -3 and $-6x^2$ instead -6, but it doesn't work. Why? I post my code. The hexagons are completely white.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{amsbsy}
\usepackage{amsmath}
\newcommand{\hexmult}[2]{\begin{tikzpicture}[hexa/.style= {shape=regular polygon,regular polygon sides=6,minimum size=1cm, draw,inner sep=0,anchor=south,rotate=30}]
\foreach \j in {1,...,#1}{%
\foreach \i in {1,...,\j}{%
\node[hexa] (h\i;\j) at ({(\i-\j/2)*sin(60)},{\j*0.75}) {};} }
\begin{scope}[execute at begin node=$, execute at end node=$]
\foreach \k/\l in {#2}{\node at (h\k) {\l}; }
\end{scope}
\end{tikzpicture}}

\begin{document}
\hexmult{2}{1;2/$+2$,2;2/{$-3$},1;1/}
\end{document}

• Have you looked here? Nov 19, 2017 at 16:49
• thanks for your answer. yes. The problem is that I can't fit the global blue hexagon structure into a structure that I've drawn down.
– ryuk
Nov 19, 2017 at 17:06
• As a rule, packages make some things easier and others harder. There will come a point where you are better off not using a package than using it. Nov 19, 2017 at 17:19
• How about this: tex.stackexchange.com/questions/6019/drawing-hexagons Nov 19, 2017 at 20:49
• Don't use $..$. This code automatically parses entries in math mode. Just write \hexmult{2}{1;2/2x,2;2/-3x,1;1/-6x^2}. Jan 15, 2018 at 20:32

If you don't mind specifying the numbers backwards:

\documentclass[varwidth,border=5]{standalone}
\usepackage{tikz}
\tikzdeclarecoordinatesystem{hex}{%
\pgfmathsetmacro\y{int(floor(sqrt(2*(#1))+0.5))}%
\pgfmathsetmacro\x{int((\y-1)/2*\y))}%
\pgfpointxy{((#1)-\x-\y/2)* sin(60)}{\y*0.75}}
\tikzset{hex/.style={insert path={[every hex/.try]
(30:1/2) \foreach \j in { 1,...,5} {-- (30+\j*60:1/2) } -- cycle
(0,0) node {$#1$}}}}
\begin{document}
\tikz\foreach \n [count=\i]in {+24,-4,-6,+2,-2,-3,-1,-2,+1,-3}
\path [draw, shift=(hex cs:\i), hex=\n];
\tikz\foreach \n [count=\i]in {-6,+2,-3}
\path [draw, shift=(hex cs:\i), hex=\n];
\tikz[every hex/.style={fill=blue!50!white!50!cyan, draw=white, text=white}]
\foreach \n [count=\i]in {-2,+1,+3,-1,+1,+2}
\path [draw, shift=(hex cs:\i), hex=\n];
\end{document}


• Beautiful too your work. +1 Nov 21, 2017 at 8:02

I defined a new command \hexmult that takes 2 arguments. The first is a positive integer giving the number of rows of hexagons. The second is a comma-separated list, where each entry is of the form i;j/k. The j is the row (starting from the bottom), the i is the hexagon number (from the left), and the k is the cell contents, parsed in math mode (so the minus signs look right). You can fill as many of the cells as you like, or none by making the second argument empty.

The grid is a modification of Alain Matthes's solution here.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}

\newcommand{\hexmult}[2]{\begin{tikzpicture}[hexa/.style= {shape=regular polygon,regular polygon sides=6,minimum size=1cm, draw,inner sep=0,anchor=south,rotate=30}]
\foreach \j in {1,...,#1}{%
\foreach \i in {1,...,\j}{%
\node[hexa] (h\i;\j) at ({(\i-\j/2)*sin(60)},{\j*0.75}) {};} }
\begin{scope}[execute at begin node=$, execute at end node=$]
\foreach \k/\l in {#2}{\node at (h\k) {\l}; }
\end{scope}
\end{tikzpicture}}

\begin{document}
\hexmult{4}{1;4/-1,2;4/-2,3;4/+1,4;4/-3,1;3/+2,2;3/-2,3;3/-3,1;2/-4,2;2/+6,1;1/-24}
\hexmult{3}{1;3/-1,2;3/+1,3;3/+2,2;2/+2}
\hexmult{2}{1;2/+2,2;2/-3,1;1/-6}
\end{document}


Note that you are not restricted to using numbers in the hexes. The code

\hexmult{2}{1;2/2x,2;2/-3x,1;1/-6x^2}


will produce the output:

• Any idea how to color each hex a different color? Feb 24, 2018 at 2:19

Here's a way to draw your grids "by hand" using Metapost. The links in the comments show you similar approaches in tikz.

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
pair u, v;
u = 23 right;
v = u rotated 120;
path gon;
gon = for i=0 upto 5: 0.57735026919 u rotated (30 + 60i) -- endfor cycle;

vardef mark(expr x, y, s) =
save p; pair p;
p = origin shifted (x*u) shifted (y*v);
fill gon shifted p withcolor 7/8[blue, white];
draw gon shifted p withcolor 3/4 blue;
label(s, p);
enddef;

mark(0, 0, "$+24$");
mark(0, 1, "$-4$");
mark(1, 1, "$-6$");
mark(0, 2, "$+2$");
mark(1, 2, "$-2$");
mark(2, 2, "$+3$");
mark(0, 3, "$-1$");
mark(1, 3, "$-2$");
mark(2, 3, "$+1$");
mark(3, 3, "$+3$");

endfig;
\end{mplibcode}
\end{document}


This is wrapped up in luamplib so compile with lualatex or adapt for plain MP or gmp package.

## Update 2021

I know this is old, but since it got another up vote the other day, I thought perhaps an automatic version would be interesting:

Here the products are all calculated for you from the top row of cells. As before, compile with lualatex.

\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
path hexagon;
hexagon = for i=0 upto 5: 14 up rotated 60 i -- endfor cycle;
pair u, v;
u = point 9/2 of hexagon - point 3/2 of hexagon;
v = point 7/2 of hexagon - point 1/2 of hexagon;

vardef hexit(expr n) =
image(
fill hexagon withcolor 7/8[if n < 0: blue elseif n > 0: red else: white fi, white];
draw hexagon withcolor 2/3 blue;
picture t; t = thelabel("$" & if n > 0: "+" elseif n < 0: "-" else: "" fi & decimal(abs(n)) & "$", origin);
numeric wd; wd = xpart (urcorner t - llcorner t) + 4;
draw t scaled min(1, (abs(u) / wd));
)
enddef;

vardef trex(text t) =
save cell, i, cells; numeric cell[], i, cells;
image(
i = 0; for n=t:
cell[incr i] = n;
draw hexit(cell[i]) shifted (i * u);
endfor
cells = i;
for j=cells-1 downto 1:
for k=1 upto j:
cell[incr i] = cell[i-j-1] * cell[i-j];
draw hexit(cell[i]) shifted ((cells-j) * v) shifted (k * u);
endfor
endfor
)
enddef;

beginfig(1);

draw trex(-1,-2,1,3);
draw trex(-1,1,2) shifted 120 right;
draw trex(1,-2,1,-2,1) shifted (32, -100);

endfig;
\end{mplibcode}
\end{document}