# Drawing Lewis Spheres in Tikz

For some reason, I could never get Richard Zach’s Ptolemaic Astronomy diagrams to work correctly, so I set out to write my own macros for TikZ that would allow me to draw Lewis system of sphere diagrams like these:

These aren’t perfect by any means, but they are a decent first start. As far as I can tell, they are built in a similar fashion to Zach’s. The macros are available at the end of this post. Just copy/paste them into your preamble to use.

To get a handle on the syntax, first note that you can specify coordinates in a TikZ drawing using degrees and distance from (0,0). (P.S. Make sure you enclose everything here within the \begin{tikzpicture} \end{tikzpicture} environment!) Thus, we have:

\draw[dotted] (0,0) circle (2cm);\draw (0,0) to (90:2.5);\draw (0,0) to (0:2.5);\draw (0,0) to (180:2.5);\draw (0,0) to (270:2.5);\node at (90:3) {90$^\circ$};\node at (0:3) {0$^\circ$};\node at (180:3) {180$^\circ$};\node at (270:3) {270$^\circ$};

The macro \sphere{n} draws a system of spheres with n elements. Thus, \sphere{3} produces:

The way the macros work, you always need to have \sphere{n} before any commands to draw propositions, represented by arcs that intersect the spheres. The syntax for the proposition command is \prop{x}{y}{z} where x is the degree where you want the proposition arc to start, y is the degree where you want it to end, and z is which sphere number you want it to intersect (starting with 0 for the first sphere, 1 for the next sphere, and so on). So, for instance, \prop{65}{30}{0} draws a proposition arc starting at 65 degrees, intersecting the innermost circle, to 30 degrees. Here, I also draw the degree guide-lines so you can see the relative positions of the start and end of the proposition arc:

\sphere{3}\prop{65}{30}{0}\draw (0,0) to (90:2.5);\draw (0,0) to (0:2.5);\node at (90:3) {90$^\circ$};\node at (0:3) {0$^\circ$};

Here is another example:

\sphere{4}\prop{85}{15}{0}\prop{75}{25}{1}\prop{65}{35}{2}

There is an optional argument to change the style of the proposition arcs:

\sphere{4}\prop[dashed]{85}{15}{0}\prop[thick]{75}{25}{1}\prop[very thick]{65}{35}{2}

• color specifies the color of the shaded region; this defaults to gray if not specified.
• a, b, c are the in, out, and sphere depth coordinates of the first proposition.
• d, e, f are the in, out, and sphere depth coordinates of the second proposition.
• g is the outermost sphere you want to shade.

Here is an example:

\sphere{3}\propshade{75}{25}{0}{50}{0}{1}{1}

And one more:

\sphere{4}\propshade[blue!30!white]{85}{15}{0}{65}{35}{2}{2}\prop[thick]{75}{25}{2}

You can add your own labels to the propositions. Here’s an easy way to do so:

\sphere{3}\propshade{75}{25}{0}{50}{0}{1}{1}\node at (65:2) {\small{\bf A}};\node at (40:2) {\small{\bf B}};

The macros are not super flexible, but they should give you at least a few options for drawing some decent-looking Lewis system of sphere diagrams. I hope you find them useful!

###### Macros

Paste this text in your preamble to get started! Note: this requires TikZ: make sure you also add \usepackage{tikz}. Happy sphering!

%Spheres
\newcommand{\sphere}[1]{
\foreach \x in {0,1,...,#1}
\draw[dotted] (0,0) circle (\x*.5 cm);
\def\sp{#1}
}
%Proposition
\newcommand{\prop}[4][-]{
\pgfmathsetmacro\mytemp{((\sp - (#4/2) - 2)*4)/10}
\draw[#1] (#2:\sp-1) .. controls ({(#2 + #3)/2}: #4/2 - .2 - \mytemp ) .. (#3:\sp-1);
}
%Intersective propositions
\pgfmathsetmacro\mytemp{((\sp - (#4/2) - 2)*4)/10}
\pgfmathsetmacro\mytemps{((\sp - (#7/2) - 2)*4)/10}
\begin{scope}
\clip (0,0) circle (#8cm);
\clip (#2:\sp-1) .. controls ({(#2 + #3)/2}: #4/2 - .2 - \mytemp ) .. (#3:\sp-1);
\clip (#5:\sp-1) .. controls ({(#5 + #6)/2}: #7/2 - .2 - \mytemps ) .. (#6:\sp-1);
\fill[#1] (-\sp,-\sp) rectangle (\sp,\sp);
\end{scope}
\draw (#2:\sp-1) .. controls ({(#2 + #3)/2}: #4/2 - .2 - \mytemp ) .. (#3:\sp-1);
\draw (#5:\sp-1) .. controls ({(#5 + #6)/2}: #7/2 - .2 - \mytemps ) .. (#6:\sp-1);
}