# a+b whole cubed in Latex Someone posted it on math.stackexchange without code or source. It's an expanded form of (a+b)^3

I would like to write it in Latex, but am clueless as from where to even begin with or which package to use to accomplish this.

• You should rather start with drawing 3d cubes in tikz. If that works, you can proceed with the next step. May 18 at 5:02
• I would recommend the PGF/TikZ 3D library. May 18 at 6:12
• Oh, this became hot network question (maybe thanks to the beautiful figure) Regardless, users are encouraged to try to solve the problem themselves first, in this case for example by learning TikZ. May 18 at 13:39

Welcome to TeX.SE!!!

Here is a possibility. For this you'll need TikZ package an its libraries 3d and perspective. What I'm proposing is to create two macros. The first one, simplecube draws a rectangular cuboid given its dimensions and its line styles. And the second one, cubeab draws the desired result using the first macro to draw the eight cuboids separated (or not), given the dimensions and the separation between them.

Something like this:

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{3d}          % for 'canvas is...' options
\usetikzlibrary{perspective} % for '3d view' option

\tikzset
{
linea/.style={draw=red},
lineb/.style={draw=blue},
}

\newcommand{\simplecube}% origin, dimension x, dimension y, dimension z, style x, style y, style z
{
\begin{scope}[shift={#1}]
\fill[white  ,canvas is xy plane at z=#4] (0,0) rectangle (#2,#3);
\fill[gray!40,canvas is yz plane at x=#2] (0,0) rectangle (#3,#4);
\fill[gray!10,canvas is xz plane at y=#3] (0,0) rectangle (#2,#4);
\foreach\i/\j in {0/1, 1/1, 1/0}
{
\draw[line#5] (0,#3*\i,#4*\j) --++ (#2,0,0);
\draw[line#6] (#2*\i,0,#4*\j) --++ (0,#3,0);
\draw[line#7] (#2*\i,#3*\j,0) --++ (0,0,#4);
}
\end{scope}
}

\newcommand{\cubeab}% origin, a, b, separation
{
\begin{scope}[shift={#1}]
\simplecube{(0    ,0    ,0    )}{#2}{#2}{#2}{a}{a}{a}
\simplecube{(#2+#4,0    ,0    )}{#3}{#2}{#2}{b}{a}{a}
\simplecube{(0    ,#2+#4,0    )}{#2}{#3}{#2}{a}{b}{a}
\simplecube{(#2+#4,#2+#4,0    )}{#3}{#3}{#2}{b}{b}{a}
\simplecube{(0    ,0    ,#2+#4)}{#2}{#2}{#3}{a}{a}{b}
\simplecube{(#2+#4,0    ,#2+#4)}{#3}{#2}{#3}{b}{a}{b}
\simplecube{(0    ,#2+#4,#2+#4)}{#2}{#3}{#3}{a}{b}{b}
\simplecube{(#2+#4,#2+#4,#2+#4)}{#3}{#3}{#3}{b}{b}{b}
\end{scope}
}

\begin{document}
\begin{tikzpicture}[3d view={115}{30},line cap=round,line join=round]
\def\a{3.2}
\def\b{1.2}
\cubeab{(0,0,0)}{\a}{\b}{0}
\cubeab{(0,9,0)}{\a}{\b}{1.5}
\end{tikzpicture}
\end{document} Edit 1: With two figures, as requested.

\documentclass {article}
\usepackage    {lipsum}      % dummy text
\usepackage    {showframe}   % just for this example
\usepackage    {subcaption}
\usepackage    {tikz}
\usetikzlibrary{3d}          % for 'canvas is...' options
\usetikzlibrary{perspective} % for '3d view' option

\tikzset
{
linea/.style={draw=red},
lineb/.style={draw=blue},
}

\newcommand{\simplecube}% origin, dimension x, dimension y, dimension z, style x, style y, style z
{
\begin{scope}[shift={#1}]
\fill[white  ,canvas is xy plane at z=#4] (0,0) rectangle (#2,#3);
\fill[gray!40,canvas is yz plane at x=#2] (0,0) rectangle (#3,#4);
\fill[gray!10,canvas is xz plane at y=#3] (0,0) rectangle (#2,#4);
\foreach\i/\j in {0/1, 1/1, 1/0}
{
\draw[line#5] (0,#3*\i,#4*\j) --++ (#2,0,0);
\draw[line#6] (#2*\i,0,#4*\j) --++ (0,#3,0);
\draw[line#7] (#2*\i,#3*\j,0) --++ (0,0,#4);
}
\end{scope}
}

\newcommand{\cubeab}% origin, a, b, separation
{
\begin{scope}[shift={#1}]
\simplecube{(0    ,0    ,0    )}{#2}{#2}{#2}{a}{a}{a}
\simplecube{(#2+#4,0    ,0    )}{#3}{#2}{#2}{b}{a}{a}
\simplecube{(0    ,#2+#4,0    )}{#2}{#3}{#2}{a}{b}{a}
\simplecube{(#2+#4,#2+#4,0    )}{#3}{#3}{#2}{b}{b}{a}
\simplecube{(0    ,0    ,#2+#4)}{#2}{#2}{#3}{a}{a}{b}
\simplecube{(#2+#4,0    ,#2+#4)}{#3}{#2}{#3}{b}{a}{b}
\simplecube{(0    ,#2+#4,#2+#4)}{#2}{#3}{#3}{a}{b}{b}
\simplecube{(#2+#4,#2+#4,#2+#4)}{#3}{#3}{#3}{b}{b}{b}
\end{scope}
}

\begin{document}
\lipsum

\begin{figure}[h]\centering
\def\a{3.2}
\def\b{1.2}
\begin{subfigure}[b]{0.45\textwidth}\centering % b = bottom alignment
\begin{tikzpicture}[3d view={115}{30},line cap=round,line join=round,scale=0.5]
\cubeab{(0,0,0)}{\a}{\b}{0}
\end{tikzpicture}
\caption{Subpicture 1, sep=0}\label{fig:figB}
\end{subfigure}
\begin{subfigure}[b]{0.45\textwidth}\centering % b = bottom alignment
\begin{tikzpicture}[3d view={115}{30},line cap=round,line join=round,scale=0.5]
\cubeab{(0,0,0)}{\a}{\b}{1.5}
\end{tikzpicture}
\caption{Subpicture 2, sep=1.5}\label{fig:figB}
\end{subfigure}
\caption{Pictures 1 and 2}\label{fig:figAB}
\end{figure}

\lipsum
\end{document} Edit 2: A beamer animation, just for fun.

\documentclass {beamer}
\usepackage    {tikz}
\usetikzlibrary{3d}          % for 'canvas is...' options
\usetikzlibrary{perspective} % for '3d view' option

\tikzset
{
linea/.style={draw=red},
lineb/.style={draw=blue},
}

\newcommand{\simplecube}% origin, dimension x, dimension y, dimension z, style x, style y, style z
{
\begin{scope}[shift={#1}]
\fill[white  ,canvas is xy plane at z=#4] (0,0) rectangle (#2,#3);
\fill[gray!40,canvas is yz plane at x=#2] (0,0) rectangle (#3,#4);
\fill[gray!10,canvas is xz plane at y=#3] (0,0) rectangle (#2,#4);
\foreach\i/\j in {0/1, 1/1, 1/0}
{
\draw[line#5] (0,#3*\i,#4*\j) --++ (#2,0,0);
\draw[line#6] (#2*\i,0,#4*\j) --++ (0,#3,0);
\draw[line#7] (#2*\i,#3*\j,0) --++ (0,0,#4);
}
\end{scope}
}

\newcommand{\cubeab}% origin, a, b, separation
{
\begin{scope}[shift={#1}]
\simplecube{(0    ,0    ,0    )}{#2}{#2}{#2}{a}{a}{a}
\simplecube{(#2+#4,0    ,0    )}{#3}{#2}{#2}{b}{a}{a}
\simplecube{(0    ,#2+#4,0    )}{#2}{#3}{#2}{a}{b}{a}
\simplecube{(#2+#4,#2+#4,0    )}{#3}{#3}{#2}{b}{b}{a}
\simplecube{(0    ,0    ,#2+#4)}{#2}{#2}{#3}{a}{a}{b}
\simplecube{(#2+#4,0    ,#2+#4)}{#3}{#2}{#3}{b}{a}{b}
\simplecube{(0    ,#2+#4,#2+#4)}{#2}{#3}{#3}{a}{b}{b}
\simplecube{(#2+#4,#2+#4,#2+#4)}{#3}{#3}{#3}{b}{b}{b}
\end{scope}
}

\begin{document}
\begin{frame}
\begin{figure}\centering
\begin{tikzpicture}[3d view={115}{30},scale=0.75,line cap=round,line join=round]
\def\a{3.2}
\def\b{1.2}
\foreach\i in {1,...,29}
{
\pgfmathsetmacro\j{15-int(abs(15-\i))}
\only<\i>
{
\cubeab{(0,0,0)}{\a}{\b}{0.2*\j-0.2}
}
}
\end{tikzpicture}
\end{figure}
\end{frame}
\end{document} • Thanks @juan-castaño, it helps a lot <3 May 18 at 8:31
• been trying to align the two figures horizontally (to label them figure 1 & 2), changing the arguments the command \begin{tikzpicture}[3d view={115}{30},line cap=round,line join=round] is rotating both the figures. May 18 at 9:35
• @P.S, then you need to create two tikzpictures one in each figure. May 18 at 10:13
• Failed in doing so. Uptill now made figures using only \coordinate & \node , learning 3d, not much familiar with \simplecube , \cubeab , scope . Please help aligning the two figures @juan-castaño May 18 at 12:13
• @P.S, see my edit May 18 at 13:03

Update Here is an Asymptote solution to illustrate (a+b)^3 = a^3 + 3a^2b + 3ab^2 + b^3 with a crucial update on light (see its documentation). Without lights, for real 3D objects, some sides of the object will be dark. To overcome, one way is using opacity; however, we can put several light sources at different positions

light White=light(new pen[] {rgb(0.38,0.38,0.45),rgb(0.6,0.6,0.67),
rgb(0.5,0.5,0.57)},specularfactor=3,
new triple[] {(5,5,5),(0,5,5),(-0.5,0,2)});


and turn them on

currentlight=White;


The number t is for shifting boxes. // http://asymptote.ualberta.ca/
// To illustrate (a+b)^3 = a^3 + 3a^2b + 3ab^2 + b^3
unitsize(1cm);
import three;
currentprojection=orthographic(3,2,1,center=true,zoom=.8);
//currentprojection=orthographic(0,10,0,zoom=.8);
light White=light(new pen[] {rgb(0.38,0.38,0.45),rgb(0.6,0.6,0.67),
rgb(0.5,0.5,0.57)},specularfactor=3,
new triple[] {(5,5,5),(0,5,5),(-0.5,0,2)});

currentlight=White;

real a=3.2, b=1.5;
path3[] p=unitbox;
surface q=unitcube;
void mybox(triple A, triple B, pen fillpen=nullpen,
pen drawpen=nullpen,triple shifting=O){
real s=(abs(B-A))/sqrt(3);
draw(shift(shifting)*shift(A)*scale3(s)*q,fillpen+opacity(1));
draw(shift(shifting)*box(A,B),drawpen);
}
triple A=(-a,-a,-a);  // lower vertex
triple B=(b,b,b);     // upper vertex
pen pena=lightyellow; // for a^3
pen penb=pink;        // for b^3
pen pena2b=brown;     // for 3 a^2 b
pen penab2=darkcyan;  // for 3 a b^2
real t=.6;            // for shifting boxes

mybox(A,O,pena,pena);
mybox(O,B,penb,penb,(t,t,t));

// 3 a^2 b
draw(shift(t,-t,-t)*box(O,(b,-a,-a)),pena2b);
draw(shift(-t,-t,t)*box(O,(-a,-a,b)),pena2b);
draw(shift(-t,t,-t)*box(O,(-a,b,-a)),pena2b);

// 3 a b^2
draw(shift(t,t,-t)*box(O,(b,b,-a)),penab2);
draw(shift(-t,t,t)*box(O,(-a,b,b)),penab2);
draw(shift(t,-t,t)*box(O,(b,-a,b)),penab2);


With t=0 - no shifting Here is an advantage of Asymptote: projection - with

currentprojection=orthographic(0,10,0,zoom=.8);


we get a projection of the figure illustrating 2D version, that is (a+b)^2 = a^2 + 2ab + b^2. • I have just added a crucial update on light. May 20 at 7:42