How to typeset moon phase symbols?
You could use TikZ for drawing the lunar phases. Here's a command \moon{<day>}
that takes the day of the lunar month as an argument and draws the corresponding lunar phase. The symbols scale with the surrounding text, normal TikZ options can be passed using the optional argument, and the standard lunar phase names have been defined as additional macros (\waxingcrescent
, \fullmoon
, etc.). The code uses the method for drawing 3D circles that Andrew Stacey describes in Drawing simple 3D cylinders in TikZ.
Edit: I've edited the code to draw the moon more accurately (using a sinusoidal function instead of a linear one). You can now also provide a date to the moon
macro for which the moon phase will be drawn. Furthermore, the colour of the moon and the sky can be set using the moon colour
and sky colour
keys. The key southern hemisphere
will flip the diagram vertically.
\foreach \d in {0,2,...,30}{%
\d: \moon{\d} \\
}
\moon[scale=10]{2011-11-20}
\moon[scale=10,sky colour=blue!50!black,moon colour=yellow,southern hemisphere]{2011-11-20}
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calendar,fpu}
\tikzset{
moon colour/.style={
moon fill/.style={
fill=#1
}
},
sky colour/.style={
sky draw/.style={
draw=#1
},
sky fill/.style={
fill=#1
}
},
southern hemisphere/.style={
rotate=180
}
}
\makeatletter
\pgfcalendardatetojulian{2010-01-15}{\c@pgf@counta} % 2010-01-15 07:11 UTC -- http://aa.usno.navy.mil/cgi-bin/aa_moonphases.pl?year=2010&ZZZ=END
\def\synodicmonth{29.530588853}
\newcommand{\moon}[2][]{%
\edef\checkfordate{\noexpand\in@{-}{#2}}%
\checkfordate%
\ifin@%
\pgfcalendardatetojulian{#2}{\c@pgf@countb}%
\pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro\dayssincenewmoon{\the\c@pgf@countb-\the\c@pgf@counta-(7/24+11/(24*60))}%
\pgfmathsetmacro\lunarage{mod(\dayssincenewmoon,\synodicmonth)}
\pgfkeys{/pgf/fpu=false}%%
\else%
\def\lunarage{#2}%
\fi%
\pgfmathsetmacro\leftside{ifthenelse(\lunarage<=\synodicmonth/2,cos(360*(\lunarage/\synodicmonth)),1)}%
\pgfmathsetmacro\rightside{ifthenelse(\lunarage<=\synodicmonth/2,-1,-cos(360*(\lunarage/\synodicmonth))}%
\tikz [moon colour=white,sky colour=black,#1]{
\draw [moon fill, sky draw] (0,0) circle [radius=1ex];
\draw [sky draw, sky fill] (0,1ex)
arc (90:-90:\rightside ex and 1ex)
arc (-90:90:\leftside ex and 1ex)
-- cycle;
}%
}
\newcommand{\newmoon}{\moon{0}}
\newcommand{\waxingcrescent}{\moon{\synodicmonth/8}}
\newcommand{\firstquartermoon}{\moon{2*\synodicmonth/8}}
\newcommand{\waxinggibbous}{\moon{3*\synodicmonth/8}}
\newcommand{\fullmoon}{\moon{4*\synodicmonth/8}}
\newcommand{\waninggibbous}{\moon{5*\synodicmonth/8}}
\newcommand{\thirdquartermoon}{\moon{6*\synodicmonth/8}}
\newcommand{\waningcrescent}{\moon{7*\synodicmonth/8}}
\begin{document}\noindent\raggedleft%
\foreach \d in {0,2,...,30}{%
\d: \moon{\d} \\
}
\
\moon[scale=10]{2011-11-20}
\moon[scale=10,sky colour=blue!50!black,moon colour=yellow,southern hemisphere]{2011-11-20}
\end{document}
You can find scores of symbols in the Comprehensive LaTeX Symbol List
For the moon phases you'll find that \usepackage{wasysym}
will provide
\fullmoon \leftmoon \newmoon \rightmoon
The following provides a possible solution using pstricks
. Obviously the code is not as powerful as the tikz
solution above, but it will get you started. The presentation of this solution is analogous to the one above:
\foreach \d in {0,2,...,30}{%
\d: \moon{\d} \\ }
\newmoon
\waxingcrescent
\firstquartermoon
\waxinggibbous
\fullmoon
\waninggibbous
\thirdquartermoon
\waningcrescent
\documentclass[border=5mm]{standalone}
\usepackage{pstricks}
\usepackage{pst-plot}
\newcommand{\moon}[1]{%
\begingroup%
\psset{unit=1ex}%
\psset{linewidth=0.02em}%
\def\synodicmonth{29.530588853}%
\def\lunarage{#1}%
\edef\waxswitch{\ifdim\lunarage pt>.5\dimexpr\synodicmonth pt 1\else -1\fi}%
\begin{pspicture}[showgrid=false](-1.1,-.65)(1.1,1)%
\parametricplot[plotpoints=91]{0}{360}{t sin t cos}%
\pscustom[fillstyle=solid,fillcolor=black]{%
\parametricplot[plotpoints=91]{\waxswitch\space 180 mul}{0}{t sin t cos}%
\parametricplot[plotpoints=91]{0}{180}{t sin \lunarage\space \synodicmonth\space div 1 \waxswitch\space add 4 div add 360 mul cos mul t cos}%
}%end pscustom
\end{pspicture}%
\endgroup%
}%end moon command
\newcommand{\newmoon}{\moon{0}}% following incremented by one 8th of \synodicmonth:
\newcommand{\waxingcrescent}{\moon{3.69}}
\newcommand{\firstquartermoon}{\moon{7.38}}
\newcommand{\waxinggibbous}{\moon{11.07}}
\newcommand{\fullmoon}{\moon{14.77}}
\newcommand{\waninggibbous}{\moon{18.46}}
\newcommand{\thirdquartermoon}{\moon{22.15}}
\newcommand{\waningcrescent}{\moon{25.84}}
\begin{document}
\begin{minipage}{3cm}
\raggedleft
\foreach \d in {0,2,...,30}{%
\d: \moon{\d} \\ }
\newmoon
\waxingcrescent
\firstquartermoon
\waxinggibbous
\fullmoon
\waninggibbous
\thirdquartermoon
\waningcrescent
\end{minipage}
\end{document}