summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/contracard
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/contracard
Initial commit
Diffstat (limited to 'macros/latex/contrib/contracard')
-rw-r--r--macros/latex/contrib/contracard/LICENSE11
-rw-r--r--macros/latex/contrib/contracard/Makefile32
-rw-r--r--macros/latex/contrib/contracard/README16
-rw-r--r--macros/latex/contrib/contracard/contracard.dtx2382
-rw-r--r--macros/latex/contrib/contracard/contracard.ins55
-rw-r--r--macros/latex/contrib/contracard/contracard.pdfbin0 -> 188440 bytes
6 files changed, 2496 insertions, 0 deletions
diff --git a/macros/latex/contrib/contracard/LICENSE b/macros/latex/contrib/contracard/LICENSE
new file mode 100644
index 0000000000..e94c3cd909
--- /dev/null
+++ b/macros/latex/contrib/contracard/LICENSE
@@ -0,0 +1,11 @@
+Copyright 2013 Samuel Whited
+
+This project may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of
+LaTeX version 2008/05/04 or later.
diff --git a/macros/latex/contrib/contracard/Makefile b/macros/latex/contrib/contracard/Makefile
new file mode 100644
index 0000000000..7a2d019696
--- /dev/null
+++ b/macros/latex/contrib/contracard/Makefile
@@ -0,0 +1,32 @@
+.POSIX:
+.SUFFIXES:
+
+# Standardize on local variables from NetBSD Make.
+.ALLSRC ?= $^
+
+REDIRECT = > /dev/null
+DO_LATEX_WRITE18 = xelatex --shell-escape --interaction=nonstopmode contracard.dtx $(REDIRECT)
+DO_SPLITINDEX = splitindex contracard $(REDIRECT) 2>&1
+DO_MAKEINDEX = makeindex -s gind.ist -o contracard.ind contracard $(REDIRECT) 2>&1
+DO_MAKECHANGES = makeindex -s gglo.ist -o contracard.gls contracard.glo $< $(REDIRECT) 2>&1
+
+contracard.pdf: contracard.sty contracard.cls contracard.dtx by-nc.png by.png
+ $(DO_LATEX_WRITE18)
+ $(DO_LATEX_WRITE18)
+ $(DO_SPLITINDEX)
+ $(DO_MAKEINDEX)
+ $(DO_MAKECHANGES)
+ while ($(DO_LATEX_WRITE18) ; \
+ grep -q "Rerun to get" contracard.log ) do true; \
+ done
+
+contracard.sty contracard.cls: contracard.dtx contracard.ins
+ xelatex --interaction=nonstopmode contracard.ins $(REDIRECT)
+
+contracard.zip: contracard.dtx contracard.ins contracard.pdf Makefile LICENSE
+ rm -f $@
+ mkdir -p contracard/
+ cp README.md contracard/README
+ cp $(.ALLSRC) contracard/
+ zip -9 -f $@ contracard/* >/dev/null
+ rm -rf contracard/
diff --git a/macros/latex/contrib/contracard/README b/macros/latex/contrib/contracard/README
new file mode 100644
index 0000000000..1b96479218
--- /dev/null
+++ b/macros/latex/contrib/contracard/README
@@ -0,0 +1,16 @@
+# Contra Card
+
+A LaTeX package for typesetting traditional contra and square dances, and a
+class which generates calling cards.
+
+## Download
+
+Development of this package occurs primarily at
+https://git.sr.ht/~samwhited/contracard.
+Patches should be submitted there.
+
+The current [release
+version](http://ctan.org/tex-archive/macros/latex/contrib/contracard) of
+Contra Card and associated
+[documentation](http://mirrors.ctan.org/macros/latex/contrib/contracard/contracard.pdf)
+[PDF] is available from [CTAN](http://ctan.org/pkg/contracard).
diff --git a/macros/latex/contrib/contracard/contracard.dtx b/macros/latex/contrib/contracard/contracard.dtx
new file mode 100644
index 0000000000..fc501c72da
--- /dev/null
+++ b/macros/latex/contrib/contracard/contracard.dtx
@@ -0,0 +1,2382 @@
+% \iffalse
+%
+%<*driver>
+\ProvidesFile{contracard.dtx}
+%</driver>
+%
+%<*contracard-pkg>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{contracard}[2019/03/03 Package for typesetting called dances]
+%</contracard-pkg>
+%<*contracard-cls>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{contracard}[2019/03/03 Class for creating dance calling cards]
+\AtEndOfClass{\LoadClass{article}}
+%</contracard-cls>
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{ifxetex,ifluatex}
+\usepackage{fancyvrb,hologo,framed,multicol,url,graphicx,cclicenses,pifont}
+\usepackage[enableidx]{contracard}
+\ifxetex
+ \usepackage{unicode-math}
+\else
+ \ifluatex
+ \usepackage{unicode-math}
+ \else
+ \usepackage[utf8x]{inputenc}
+ \fi
+\fi
+\usepackage[pdfborder=0, bookmarks, colorlinks=false, hidelinks]{hyperref}
+\usepackage[parfill]{parskip}
+\usepackage{bookmark}
+\usepackage[page,toc]{appendix}
+
+\fvset{gobble=2}
+
+\newenvironment*{exampledance}{%
+ \vspace{3em}
+ \begin{framed}
+ \begin{minipage}[t][76.2mm][t]{\textwidth}
+}{%
+ \end{minipage}
+ \end{framed}
+}
+
+\newcommand*{\gittag}{%
+ \immediate\write18{%
+ rm gittag.tex 2> /dev/null; (git describe --tags --dirty || echo "v0.0") 2> /dev/null > gittag.tex
+ }%
+ \InputIfFileExists{gittag.tex}{}{}\unskip%
+ \immediate\write18{%
+ rm gittag.tex 2> /dev/null
+ }%
+}
+
+\newcommand*\name[1]{\textsc{#1}}
+\newcommand*\fname[1]{\textsf{#1}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\newcommand*\code[1]{\texttt{#1}}
+\newcommand*\regexp[1]{\texttt{#1}}
+\newcommand*\word[1]{\textit{#1}}
+\newcommand*{\XeLaTeX}{\hologo{XeLaTeX}}
+\newcommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \GetFileInfo{contracard.dtx}
+% \makeatletter
+% \errorcontextlines=999
+%
+% \title{The Contra Card Project}
+% \author{
+% \name{Sam Whited}\\*
+% \texttt{sam@samwhited.com}
+% }
+% \date{\today\\*\gittag}
+%
+% \maketitle
+% \begin{exampledance}
+% \begin{contra}{Monarch Grove}{Martha Wild}{Duple becket}
+% \move{Slide left and circle left \textthreequarters\moveindex{Circle Left}\moveindex{Slide Left}}
+% \swing*[Neighbor]{8}
+% \longlines
+% \dosido*[Men]{8}
+% \allemande*[Men]{8}{left 1\textonehalf}
+% \move{Partner star promenade and butterfly whirl\moveindex{Star Promenade}\moveindex{Butterfly Whirl}}
+% \dosido*[Women]{8}
+% \swing[partner]{8}
+% \end{contra}
+% \end{exampledance}
+% \tableofcontents
+% \phantomsection
+% \addcontentsline{toc}{section}{\lodtitle}
+% \hypertarget{CC:LOD}{}
+% \listofdances
+%
+% \section{Introduction}
+%
+% The \textbf{Contra Card} project is designed to aid in the formatting and
+% typesetting of caller cards for traditional square and line dances.
+%
+% The project comprises a \LaTeX\ package (\fname{contracard.sty}) and a
+% \LaTeX\ class (\fname{contracard.cls}). The package provides the core
+% functionality of Contra Card while the class file acts as a convenience
+% wrapper for making calling cards.
+%
+% \subsection{About the source}
+%
+% Contributions are welcome, and the latest development version of the project
+% can always be found at \url{https://git.sr.ht/~samwhited/contracard}.
+%
+% \subsection{License}
+%
+% This project may be distributed and/or modified under the conditions of the
+% \LaTeX\ Project Public License, either version 1.3c of this license or (at
+% your opinion) any later version. The latest version of this license is in:
+%
+% \url{http://www.latex-project.org/lppl.txt}
+%
+% and version 1.3c or later is part of all distributions of \LaTeX\ version
+% 2008/05/04 or later.
+%
+% \subsection{Special thanks}
+%
+% \renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+% \addtocounter{footnote}{1}%
+% Several people deserve a special thanks for their contributions to this
+% package. Most notably the various callers and dancers who responded to my
+% queries on the \href{http://www.sharedweight.net/}{Shared Weight},
+% \href{http://groups.yahoo.com/neo/groups/trad-dance-callers/info}{Traditional
+% Dance Callers}, and \href{http://www.contradance.org/}{Chatahoochee Country
+% Dancers}, mailing lists. These comprise Andrea Nettleton, Bill Baritompa, Seth
+% Tepfer, Richard Hopkins, Chris Page, James Saxe, Mark Goodwin, Rob Harper,
+% Eric Black, Kalia Kliban, John Sweeney, Martha Wild\footnote{Dances by Martha
+% Wild used in this publication are reproduced from \textit{Calls of the Wild}
+% by special arrangement with the author.}, and Linda Leslie (in no particular
+% order). Also to Sarah Snyder, and all of my other favorite dance partners from
+% the Atlanta dance community.
+%
+% \begin{exampledance}
+% \begin{contra}{Lament To Sarah}{Sam Whited}{Duple improper}
+% \lines*[In your set, short]
+% \move[4]{open up across}
+% \rollawaysashay
+% \move[4]{Neighbor two hand turn}\unskip\moveindex{Two hand turn}%
+%
+% \move[8]{Cont.\ two hand turn}\unskip\moveindex{Two hand turn}%
+% \swing*[Melt into a]{8}
+%
+% \balanceand\petronella
+% \balanceand\petronella
+% \balanceand\petronella
+% \move[8]{Balance with your partner and two hand turn while rotating to the
+% right to end facing new neighbors}\unskip\moveindex{Balance}\moveindex{Two hand turn}
+% \notes{%
+% Open up with your neighbor in four steps, facing across with leads on the
+% right.%
+% }
+% \end{contra}
+% \end{exampledance}
+%
+% \StopEventually{}
+% \changes{0.1}{2013/02/09}{Created boilerplate for class}
+% \changes{0.3}{2013/02/20}{Split core functionality out into package}
+% \changes{0.4}{2013/02/22}{Support swung dances}
+% \changes{0.4}{2013/02/22}{Add list of dances}
+% \changes{0.4}{2013/02/22}{Add \pkg{tocloft} package to requirements}
+% \changes{1.0.0}{2013/09/09}{Start using \href{http://semver.org}{Semantic
+% Versioning}}
+% \changes{1.0.0}{2013/09/15}{Fix phrase separator issues}
+%
+% \section{Building and using \pkg{contracard}}
+%
+% \paragraph{Dependencies} The following dependencies are loaded by
+% \pkg{contracard} (you do not need to include them in your project,
+% \pkg{contracard} does this for you); before building the \pkg{contracard}
+% package you should verify that they are installed.
+%
+% \begin{macrocode}
+%<*contracard-pkg>
+\RequirePackage{calc,intcalc}
+\RequirePackage{ifthen}
+\RequirePackage{tocloft}
+\RequirePackage{textcomp}
+%</contracard-pkg>
+% \end{macrocode}
+%
+% If you're using the class, you'll want the following additional dependencies:
+%
+% \begin{macrocode}
+%<*contracard-cls>
+\AtEndOfClass{\RequirePackage{geometry}}
+\AtEndOfClass{\RequirePackage[compact]{titlesec}}
+\AtEndOfClass{\RequirePackage{contracard}}
+%</contracard-cls>
+% \end{macrocode}
+% \begin{macrocode}
+%<*contracard-pkg>
+% \end{macrocode}
+%
+% \paragraph{Building \pkg{contracard}} Once you have all the required packages,
+% building \pkg{contracard} from source can be accomplished in multiple ways. If
+% the Makefile is present running \code{make help} will tell you everything you
+% need to know. To manually extract the files and generate the documentation
+% simply run \code{pdflatex} or \code{xelatex} against \fname{contracard.dtx}:
+%
+% \begin{Verbatim}
+% $ xelatex --shell-escape contracard.dtx
+% \end{Verbatim}
+%
+% The \code{-{}-shell-escape} option is only required if you want the output to
+% contain version information. This will also require that you have \pkg{git}
+% installed (and the git repo itself) as the version is determined by running:
+%
+% \begin{Verbatim}
+% $ git describe --tags --dirty
+% \end{Verbatim}
+%
+% \paragraph{Using \pkg{contracard}} Building results in two main files, a class
+% and a package. In general, if you want to make a calling card, use the
+% \pkg{contracard} class and if you want to print a contra dance in a book or
+% article, use a different class and require the \pkg{contracard} package.
+%
+% \subsection{Options}
+%
+% \hypertarget{CCPACKAGE:OPTIONS}{}
+% \begin{macro}{showcountbefore}
+% \begin{macro}{showcountafter}
+% \begin{macro}{enableidx}
+% \changes{1.0.0}{2013/09/08}{New option}
+% The package (or class) can also be loaded with the following options. For more
+% information about each option, see the command which it calls.
+% \begin{macrocode}
+\DeclareOption{showcountafter}{\showcountafter}
+\DeclareOption{showcountbefore}{\showcountbefore}
+\DeclareOption{enableidx}{\AtEndOfPackage{\enableidx}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \clearpage
+% \phantomsection
+% \part{The \pkg{contracard} package}
+%
+% \section{Formatting}
+%
+% These options determine how the dance will look.
+%
+% \begin{macro}{\defaultcontraenv}
+% \begin{macro}{\dancetitleenv}
+% \changes{0.1}{2013/02/14}{Allow user to format moves}
+% \changes{0.3}{2013/02/20}{Allow user to format dance title block}
+% By default, all contra moves and the title block are wrapped in the
+% \code{flushleft} environment. To change this you can renew
+% the following macros:
+% \begin{macrocode}
+\newcommand*{\defaultcontraenv}{flushleft}
+\newcommand*{\dancetitleenv}{flushleft}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dancetitleformat}
+% \begin{macro}{\danceauthorformat}
+% \begin{macro}{\danceformformat}
+% \changes{0.3}{2013/02/20}{Allow the user to change the dance title format}
+% \changes{0.3}{2013/02/20}{Allow the user to change the dance form format}
+% To change the formatting of a dance's title, author, or form, redefine the
+% following macros:
+% \begin{macrocode}
+\newcommand*{\dancetitleformat}{\section*}
+\newcommand*{\danceauthorformat}{\subsection*}
+\newcommand*{\danceformformat}{\hspace{\fill}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\movedelimiter}
+% \changes{0.3}{2013/02/20}{Allow customizing the move delimiter character}
+% \begin{macro}{\partdelimiter}
+% \changes{0.3}{2013/02/20}{Allow customizing the part delimiter}
+% \begin{macro}{\midpartdelimiter}
+% \changes{0.3}{2013/02/20}{Allow customizing the mid-part delimiter}
+% These commands define delimiters that are used between moves, or at the midway
+% point in a part.
+% \begin{macrocode}
+\newcommand*{\movedelimiter}{,}
+\newcommand*{\partdelimiter}{.}
+\newcommand*{\midpartdelimiter}{;}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\phraseseparator}
+% \changes{0.4}{2013/02/22}{Allow custom phrase separator character}
+% \begin{macro}{\phrasevspace}
+% \changes{0.4}{2013/02/22}{Allow custom phrase separation length}
+% The \code{\textbackslash phraseseparator} macro is inserted between every
+% musical phrase and --- by default --- inserts \code{\textbackslash
+% phrasevspace} amount of white space.
+% \begin{macrocode}
+\newlength{\phrasevspace}
+\setlength{\phrasevspace}{1em}
+\newcommand*{\phraseseparator}{\vspace{\phrasevspace}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% A dance with a centered title block, a custom mid-part delimiter (an em-dash
+% in this case), and a nice horticultural dingbat as the phrase separator can be
+% accomplished with:
+%
+% \begin{verbatim}
+% \renewcommand*{\dancetitleenv}{center}
+% \renewcommand*{\midpartdelimiter}{\ ---}
+% \renewcommand*{\phraseseparator}{\ding{167}}
+% \end{verbatim}
+%
+% and looks something like this:
+%
+% \begin{exampledance}
+% \renewcommand*{\dancetitleenv}{center}%
+% \renewcommand*{\midpartdelimiter}{\ ---}%
+% \renewcommand*{\phraseseparator}{\ding{167}}%
+% \begin{contra}{Code's Compiling}{Sam Whited}{Duple becket}
+% \dosido*[Neighbor]{8}
+% \seesaw*[Partner]{8}
+% \swing*[Shadow]{16}
+% \balanceand\petronella
+% \balanceand\petronella
+% \swing*[Partner]{8}
+% \rightandleftthrough*[Left diagonal:]
+% \notes{The Neighbor dosido into a partner see saw should be one fluid
+% motion. Resist spinning in the dosido, and start revolving slowly over your
+% right shoulder as you enter the see saw and everything will flow. Make sure
+% lines have \emph{lots} of space for the dosido.}
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by/3.0/}{%
+% \IfFileExists{by.png}{%
+% \includegraphics[width=1cm]{by.png}%
+% }{\cc\by}}
+% \end{flushright}
+% \end{contra}
+% \end{exampledance}
+%
+% \begin{macro}{\showcountbefore}
+% \changes{1.0.0}{2013/09/07}{Allow showing the count before each move}
+% \begin{macro}{\showcountafter}
+% \changes{1.0.0}{2013/09/07}{Allow showing the count after each move}
+% \begin{macro}{\hidecountbefore}
+% \changes{1.0.0}{2013/09/07}{Allow hiding the count before each move}
+% \begin{macro}{\hidecountafter}
+% \changes{1.0.0}{2013/09/07}{Allow hiding the count after each move}
+% These macros allow the user to show or hide the moves duration before or after
+% each move.
+% \begin{macrocode}
+\newcommand*{\showcountbefore}{\def\@showcountbefore{}}
+\newcommand*{\showcountafter}{\def\@showcountafter{}}
+\newcommand*{\hidecountbefore}{\let\@showcountbefore\undefined}
+\newcommand*{\hidecountafter}{\let\@showcountafter\undefined}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\countleftbracket}
+% \changes{1.0.0}{2013/09/10}{Add ability to change count brackets}
+% \begin{macro}{\countrightbracket}
+% \changes{1.0.0}{2013/09/10}{Add ability to change count brackets}
+% These commands can be used to set the left and right brackets which are
+% inserted on around the count as discussed above. By default, they are set to
+% plain left and right parenthesis. Note that these commands take a single
+% argument (the new bracket) instead of simply being something that you redefine
+% like many of the other formatting commands. They are not used for inserting
+% the brackets themselves; just for changing them.
+% \begin{macrocode}
+\def\cc@countleftbracket{(}
+\def\cc@countrightbracket{)}
+\newcommand*{\countleftbracket}[1]{\def\cc@countleftbracket{#1}}
+\newcommand*{\countrightbracket}[1]{\def\cc@countrightbracket{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% For instance, a dance with the count shown afterwards (and the default
+% brackets) looks like this:
+%
+% \begin{exampledance}
+% \showcountafter%
+% \begin{contra}{Whirling Dervish}{Sam Whited}{Duple improper}
+% \walkaround[neighbor 1\textthreequarters]{8}
+% \move[8]{Men half hey ricochet while ladies cross%
+% \unskip\moveindex{Hey for Four}%
+% \unskip\moveindex{Half Hey}%
+% \unskip\moveindex{Half Hey Ricochet}%
+% \unskip\moveindex{Hey}%
+% }
+% \swing[your partners all]{16}
+% \move[8]{Spin like a Whirling Dervish\moveindex{Whirling Dervish}}
+% \balanceand\petronella
+% \balanceand\move[4]{gents roll neighbor away with a half sashay\moveindex{Half
+% Sashay}\moveindex{Roll Away}\moveindex{Roll Away\ldots Half Sashay}}
+% \move[8]{Balance neighbor and left shoulder round 1 time to new
+% neighbors\moveindex{Balance}\moveindex{Walk around}\moveindex{Left shoulder round}}
+% \notes{A ``Whirling Dervish" is just a circle left in single file except
+% that you should spin over your left shoulder the entire time you're doing
+% it.}
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by/3.0/}{%
+% \IfFileExists{by.png}{%
+% \includegraphics[width=1cm]{by.png}%
+% }{\cc\by}}
+% \end{flushright}
+% \end{contra}
+% \end{exampledance}
+%
+% \begin{macro}{\setdefaultnotesenv}
+% \changes{1.0.0}{2013/09/10}{Allow changing the default notes environment}
+% \begin{macro}{\prenotevspace}
+% \changes{1.0.0}{2013/09/10}{Allow changing the default notes vspace}
+% You might have noticed the nicely formatted notes in the previous example. By
+% default, all notes are set using the \code{flushleft} environment, and with
+% \code{\textbackslash fill} amount of vspace before them. This can easily be
+% changed with this macro and length.
+% \begin{macrocode}
+\def\cc@defaultnotesenv{flushleft}
+\newcommand*{\setdefaultnotesenv}[1]{\def\cc@defaultnotesenv{#1}}
+\newlength{\prenotevspace}
+\setlength{\prenotevspace}{\fill}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Counters}
+%
+% Lots of counters are used throughout Contra Card for various tasks. The
+% following counters do everything from keeping track of the timing, to counting
+% the number of moves in a dance.
+%
+% \subsection{Musical counts}
+%
+% \begin{macro}{dancecount}
+% \begin{macro}{partcount}
+% \changes{0.2}{2013/02/15}{Create a counter for the current musical part}
+% \changes{0.3}{2013/02/21}{Change to contain the count, not the part itself}
+% \begin{macro}{phrasecount}
+% \changes{0.2}{2013/02/15}{Create a counter for the current musical phrase}
+% \changes{0.3}{2013/02/21}{Change to contain the count, not the phrase itself}
+% \begin{macro}{dancepart}
+% \changes{0.3}{2013/02/21}{Create a new counter for the current phrase}
+% \begin{macro}{dancephrase}
+% \changes{0.3}{2013/02/21}{Create a new counter for the current phrase}
+% These counters help us keep track of the counts (or `steps') in the dance. The
+% \code{dancecount} is reset at the start of each new dance, the
+% \code{partcount} is reset at the begining of each part (eg.\ \code{A1} or
+% \code{B1}), and the \code{phrasecount} is reset every time the part changes
+% (eg.~from \code{A} to \code{B}). The \code{dancepart} and \code{dancephrase}
+% counters contain the number of the part of phrase in the dance (instead of the
+% number of steps).
+% \begin{macrocode}
+\newcounter{dancecount}
+\newcounter{partcount}
+\newcounter{phrasecount}
+\newcounter{dancepart}
+\newcounter{dancephrase}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{dancepartlength}
+% \changes{0.4}{2013/02/22}{Create a new counter for the part length}
+% \begin{macro}{dancephraselength}
+% \changes{0.4}{2013/02/22}{Create a new counter for the phrase length}
+% \begin{macro}{\resetdancepartlength}
+% \changes{1.0.0}{2013/08/12}{Add ability to easily reset counter}
+% \begin{macro}{\resetdancephraselength}
+% \changes{1.0.0}{2013/08/12}{Add ability to easily reset counter}
+% Most contra dances are composed of two 32 count phrases, each with two 16
+% count parts, however, it's sometimes useful to change these lengths (for swung
+% dances and the like). It's important to fully understand how the move command
+% works before modifying these values. Changing just one or the other can have
+% unexpected consequences. You can set them back quickly afterwards with the
+% reset commands.
+% \begin{macrocode}
+\newcounter{dancepartlength}
+\newcounter{dancephraselength}
+\newcommand*{\resetdancepartlength}{\setcounter{dancepartlength}{16}}
+\newcommand*{\resetdancephraselength}{\setcounter{dancephraselength}{32}}
+\resetdancepartlength
+\resetdancephraselength
+% \end{macrocode}
+% For example, if we set the \code{dancepartlength} to 12 and the
+% \code{\textbackslash dancephraselength} to 24 (along with some minor tweaks
+% for clarity) like so:
+%
+% \begin{verbatim}
+% \setcounter{dancepartlength}{12}
+% \setcounter{dancephraselength}{24}
+% \showcountafter
+% \end{verbatim}
+%
+% We can create a nice mixer in waltz time:
+%
+% \begin{exampledance}
+% \setcounter{dancepartlength}{12}
+% \setcounter{dancephraselength}{24}
+% \begin{contra}{Turn Around Waltz}{Sam Whited}{Circle waltz}
+% \showcountafter
+%
+% \move[6]{Roll lady on left away}\moveindex{Roll Away}
+% \move[6]{Forward and back}\moveindex{Forward and Back}
+% \move[6]{Roll lady on left away}\moveindex{Roll Away}
+% \move[6]{Forward and back}\moveindex{Forward and Back}
+% \move[6]{Hands out and in, turn out}\moveindex{Turn Alone}
+% \move[6]{Hands in and out, turn in}\moveindex{Turn Alone}
+% \move[6]{Hands out and in ladies cast right}\moveindex{Cast Right}
+% \move[6]{Parallels or free waltz}\moveindex{Parallels}
+%
+% \notes{Repeat \textbf{BABB} if dancing to the Nanci Griffith cover of ``Turn
+% Around". Circles of 4 or 8 couples brings you back to your original partner
+% for free waltz at end; for 3 or 7 put partner on your left to start. Get
+% people into square formation, then ask them to merge squares to make things
+% easier.}
+% \end{contra}
+% \resetdancepartlength
+% \resetdancephraselength
+% \end{exampledance}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\resetdancephrase}
+% \begin{macro}{\resetdancepart}
+% \begin{macro}{\resetdancephrase*}
+% \begin{macro}{\resetdancepart*}
+% \changes{0.2}{2013/02/15}{Allow the user to reset the phrase}
+% \changes{0.3}{2013/02/21}{Change name of \code{\textbackslash progressed}}
+% The phrase will continue to increment (\code{A}, \code{B}, \code{C}) unless
+% the user resets it by calling \code{\textbackslash resetdancephrase}. The user
+% can also manually reset the part. If the value of the phrase or part would be
+% the same after resetting, no action is taken. You can use the splat version of
+% the commands to force a reset (eg.~even if the \code{dancephrase} counter is
+% already at 1, the \code{dancephrase} and \code{phrasecount} counters will
+% still be reset).
+% \begin{macrocode}
+\newcommand*{\resetdancephrase}{%
+ \ifthenelse{\value{partcount}=16}{\newline}{}%
+ \@ifstar{\@resetdancephraseStar}{\@resetdancephraseNoStar}%
+}
+\newcommand*{\@resetdancephraseStar}{%
+ \setcounter{dancephrase}{1}%
+ \setcounter{phrasecount}{0}%
+ \setcounter{phrasemovenum}{0}%
+ \resetdancepart*%
+}
+\newcommand*{\@resetdancephraseNoStar}{%
+ \ifthenelse{\value{dancephrase}=1}{}{%
+ \setcounter{dancephrase}{1}%
+ \setcounter{phrasecount}{0}%
+ \setcounter{phrasemovenum}{0}%
+ \resetdancepart%
+ }%
+}
+\newcommand*{\resetdancepart}{%
+ \@ifstar{\@resetdancepartStar}{\@resetdancepartNoStar}%
+}
+\newcommand*{\@resetdancepartStar}{%
+ \setcounter{dancepart}{1}%
+ \setcounter{partcount}{0}%
+ \setcounter{partmovenum}{0}%
+ \setcounter{halfpartmovenum}{0}%
+}
+\newcommand*{\@resetdancepartNoStar}{%
+ \ifthenelse{\value{dancepart}=1}{}{%
+ \setcounter{dancepart}{1}%
+ \setcounter{partcount}{0}%
+ \setcounter{partmovenum}{0}%
+ \setcounter{halfpartmovenum}{0}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\newdancephrase}
+% \changes{0.3}{2013/02/21}{Allow user to manually start a new phrase}
+% \begin{macro}{\newdancepart}
+% \changes{0.3}{2013/02/21}{Allow user to manually start a new part}
+% The user can also manually start a new phrase or part:
+% \begin{macrocode}
+\newcommand*{\newdancephrase}{%
+ \ifthenelse{\NOT\value{phrasecount}=0}{\par\phraseseparator\par}{}%
+ \addtocounter{dancephrase}{1}%
+ \setcounter{phrasecount}{0}%
+ \setcounter{phrasemovenum}{0}%
+ \resetdancepart*%
+}
+\newcommand*{\newdancepart}{%
+ \par\nopagebreak%
+ \addtocounter{dancepart}{1}%
+ \setcounter{partcount}{0}%
+ \setcounter{partmovenum}{0}%
+ \setcounter{halfpartmovenum}{0}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% To see how this can be useful consider the following blues contras by caller
+% (and all around cat's pajamas) Seth Tepfer. Each one comprises three 16 count
+% phrases (\code{A1}, \code{B1}, and \code{C1}). The first employs the
+% \code{\textbackslash newdancephrase} command to reset the phrase every 16
+% counts, the second changes the \code{dancephraselength} and lets Contra Card
+% handle figuring out how to break up the phrases. Both methods produce the same
+% result.
+%
+% \begin{Verbatim}
+% \begin{contra}{Untitled Blues \textnumero\ 1}{Seth Tepfer}{Duple minor im.}
+% \setlength{\phrasevspace}{0em}
+% \renewcommand*{\partdelimiter}{:}
+% \walkaround*[Neighbor]{8}
+% \walkaround*[Ladies]{8}
+% \newdancephrase
+% \balanceand*[Partner]\swing{12}
+% \newdancephrase
+% \ladieschain
+% \starleft{8}
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by-nc/3.0/}{%
+% \IfFileExists{by-nc.png}{%
+% \includegraphics[width=1cm]{by-nc.png}%
+% }{\cc\bync}}
+% \end{flushright}
+% \end{contra}
+% \end{Verbatim}
+%
+% \begin{exampledance}
+% \begin{contra}{Untitled Blues \textnumero\ 1}{Seth Tepfer}{Duple minor im.}
+% \setlength{\phrasevspace}{0em}
+% \renewcommand*{\partdelimiter}{:}
+% \walkaround*[Neighbor]{8}
+% \walkaround*[Ladies]{8}
+% \newdancephrase
+% \balanceand*[Partner]\swing{12}
+% \newdancephrase
+% \ladieschain
+% \starleft{8}
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by-nc/3.0/}{%
+% \IfFileExists{by-nc.png}{%
+% \includegraphics[width=1cm]{by-nc.png}%
+% }{\cc\bync}}
+% \end{flushright}
+% \end{contra}
+% \end{exampledance}
+%
+% \clearpage
+% \begin{Verbatim}
+% \begin{contra}{Untitled Blues \textnumero\ 2}{Seth Tepfer}{Duple minor im.}
+% \setlength{\phrasevspace}{0em}
+% \renewcommand*{\partdelimiter}{:}
+% \setcounter{dancephraselength}{16}
+%
+% \walkaround*[Neighbor]{8}
+% \move[8]{Gents allemande\moveindex{Allemande} left 1\textonehalf}
+% \balanceand*[Partner]\swing{12}
+% \move[8]{\textonehalf\ promenade\moveindex{Half Promenade}\moveindex{Promenade} across set}
+% \ladieschain
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by-nc/3.0/}{%
+% \IfFileExists{by-nc.png}{%
+% \includegraphics[width=1cm]{by-nc.png}%
+% }{\cc\bync}}
+% \end{flushright}
+% \end{contra}
+% \end{Verbatim}
+%
+% \begin{exampledance}
+% \begin{contra}{Untitled Blues \textnumero\ 2}{Seth Tepfer}{Duple minor im.}
+% \setlength{\phrasevspace}{0em}
+% \renewcommand*{\partdelimiter}{:}
+% \setcounter{dancephraselength}{16}
+%
+% \walkaround*[Neighbor]{8}
+% \move[8]{Gents allemande\moveindex{Allemande} left 1\textonehalf}
+% \balanceand*[Partner]\swing{12}
+% \move[8]{\textonehalf\ promenade\moveindex{Half Promenade}\moveindex{Promenade} across set}
+% \ladieschain
+% \vspace*{\fill}
+% \begin{flushright}
+% \href{http://creativecommons.org/licenses/by-nc/3.0/}{%
+% \IfFileExists{by-nc.png}{%
+% \includegraphics[width=1cm]{by-nc.png}%
+% }{\cc\bync}}
+% \end{flushright}
+% \end{contra}
+% \resetdancephraselength
+% \end{exampledance}
+%
+% \subsection{Move counts}
+
+% \begin{macro}{phrasemovenum}
+% \changes{1.0.0}{2013/09/05}{Add counter for the number of moves in the phrase}
+% \begin{macro}{partmovenum}
+% \changes{1.0.0}{2013/09/05}{Add counter for the number of moves in the part}
+% \begin{macro}{halfpartmovenum}
+% \changes{1.0.0}{2013/09/10}{Add counter for the number of moves in half the part}
+% \begin{macro}{dancemovenum}
+% \changes{1.0.0}{2013/09/05}{Add counter for the number of moves in the dance}
+% The following counters are used to keep track of the number of moves that have
+% occurred thus far in the given dance, phrase, or part. They are incremented
+% every time \code{\textbackslash move} is called.
+% \begin{macrocode}
+\newcounter{phrasemovenum}
+\newcounter{partmovenum}
+\newcounter{halfpartmovenum}
+\newcounter{dancemovenum}
+\setcounter{phrasemovenum}{0}
+\setcounter{partmovenum}{0}
+\setcounter{halfpartmovenum}{0}
+\setcounter{dancemovenum}{0}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{The \code{contra} environment}
+%
+% \begin{macro}{contra}
+% \changes{0.1}{2013/02/14}{Create contra environment}
+% The contra environment is pretty simple. It resets the various counters, and
+% displays some information about the dance---if it is used inside of the
+% \pkg{contracard} class, it also clears the page and moves the dance form into
+% the header.
+% \begin{macrocode}
+\newenvironment{contra}[4][\defaultcontraenv]{%
+ \global\def\dancetitle{\ignorespaces#2\unskip}
+ \global\def\danceauthor{\ignorespaces#3\unskip}
+ \global\def\danceform{\ignorespaces#4\unskip}
+ \setlength{\parskip}{0.3em plus 0.2em minus 0.3em}
+ \refstepcounter{dance}
+ \addcontentsline{lod}{dance}{\protect\numberline{\thedance}\ignorespaces#2\unskip}
+ \setcounter{dancecount}{0}
+ \setcounter{dancemovenum}{0}
+ \resetdancepart*
+ \resetdancephrase*
+ \ifdefined\@ccisclass\clearpage\fi%
+ \ifthenelse{\isundefined{\imki@wrindexentry}}{%
+ \index{\ignorespaces#4\unskip}
+ }{%
+ \index[dbt]{\ignorespaces#4\unskip}
+ \index[dba]{\ignorespaces#3\unskip}
+ }%
+ \begin{\dancetitleenv}
+ \ifdefined\@ccisclass%
+ \pagestyle{myheadings}
+ \thispagestyle{myheadings}
+ \markboth{}{\danceformformat{\ignorespaces#4\unskip}}
+ \else%
+ {\danceformformat{\ignorespaces#4\unskip}}%
+ \fi%
+ {\dancetitleformat{\ignorespaces#2\unskip}}%
+ {\danceauthorformat{\ignorespaces#3\unskip}}%
+ \end{\dancetitleenv}
+ \newcommand*{\@contraenv}{#1}
+ \begin{\@contraenv}
+% \end{macrocode}
+% The next three lines are worth noting. Any new lines, vertical tabs, or form
+% feeds you introduce into your dance won't actually do anything. Contra Card
+% attempts to handle line breaks for your, and provides you with hook to insert
+% vertical space at the appropriate times.
+% \begin{macrocode}
+ \catcode10=9\relax % New line
+ \catcode11=9\relax % Vertical Tab
+ \catcode12=9\relax % Form Feed
+}{%
+ \end{\@contraenv}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Moves}
+%
+% \subsection{The \code{\textbackslash move} command}
+%
+% \begin{macro}{\move}
+% \changes{0.1}{2013/02/14}{Add move command}
+% \changes{0.3}{2013/02/21}{Simplify dance logic using new counters}
+% \changes{1.0.0}{2013/09/10}{Improve indentation and line spacing}
+% \begin{macro}{\move*}
+% The meat of the \pkg{contracard} package is contained in the
+% \code{\textbackslash move} command.
+% This command takes in a move to display, and (optionally) the number of beats
+% the move takes.
+% If the count is not specified, 8 is used as the default.
+% \begin{macrocode}
+\newcommand*{\move}{\@ifstar\@moveStar\@moveNoStar}
+\newcommand*{\@moveStar}[2][8]{%
+ \def\cc@moveStar{}\@moveNoStar[#1]{#2}\let\cc@moveStar\undefined%
+}
+\newlength{\cc@partsepwidth}%
+\newcommand*{\@balanceAnd}{\ignorespaces}%
+\newcommand*{\@extraCount}{0}%
+\newcounter{movecount}%
+\newcommand*{\@moveNoStar}[2][8]{%
+ \setlength{\parindent}{0pt}%
+ \setlength{\cc@partsepwidth}{\widthof{\Alph{dancephrase}\arabic{dancepart}%
+ \partdelimiter\ }}%
+ \setlength{\hangindent}{\cc@partsepwidth}%
+ \ifthenelse{\value{phrasecount}=\value{dancephraselength}}{%
+ \ifthenelse{\NOT\(#1=0\)}{%
+ \newdancephrase%
+ }{}%
+ }{%
+ \ifthenelse{\(\value{partcount}=\value{dancepartlength}\)%
+ \AND\NOT\(#1=0\)}{%
+ \newdancepart%
+ }{}%
+ }%
+ \ifthenelse{\value{partmovenum}=0}{%
+ \Alph{dancephrase}\arabic{dancepart}\partdelimiter\ %
+ }{}%
+ \setcounter{movecount}{0}%
+ \addtocounter{movecount}{#1}%
+ \addtocounter{movecount}{\@extraCount}%
+ \addtocounter{dancecount}{\value{movecount}}%
+ \addtocounter{phrasecount}{\value{movecount}}%
+ \addtocounter{partcount}{\value{movecount}}%
+ \addtocounter{phrasemovenum}{1}%
+ \addtocounter{partmovenum}{1}%
+ \addtocounter{halfpartmovenum}{1}%
+ \addtocounter{dancemovenum}{1}%
+ \ifthenelse{\isundefined{\@showcountbefore}\OR\(\value{movecount}=0\)}{%
+ \relax%
+ }{\cc@countleftbracket\ignorespaces\themovecount\unskip\cc@countrightbracket~}%
+ \@balanceAnd#2\unskip%
+ \ifthenelse{\isundefined{\@showcountafter}\OR\(\value{movecount}=0\)}{%
+ \relax%
+ }{~\cc@countleftbracket\ignorespaces\themovecount\unskip\cc@countrightbracket}%
+ \ifthenelse{\NOT\(\value{movecount}=0\)}{%
+ \ifthenelse{\value{partcount}=\intcalcDiv{\value{dancepartlength}}{2}}{%
+ \setcounter{halfpartmovenum}{0}%
+ }{}%
+ \ifx\cc@moveStar\undefined%
+ \ifthenelse{\value{partcount}=\intcalcDiv{\value{dancepartlength}}{2}}{%
+ \midpartdelimiter\looseness=-1\linebreak[1]\space\nopagebreak\ignorespaces%
+ }{%
+ \ifthenelse{\NOT\value{partcount}=\value{dancepartlength}}{%
+ \movedelimiter\nolinebreak[2]\space\nopagebreak\ignorespaces%
+ }{}%
+ }%
+ \fi%
+ }{}%
+ \renewcommand*{\@balanceAnd}{\ignorespaces}%
+ \renewcommand*{\@extraCount}{0}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Move shortcuts}
+%
+% Often you may find yourself copy and pasting common moves that have the same
+% timing, wording, etc. For times like this \pkg{contracard} provides a number
+% of shortcut macros.
+%
+% \begin{macro}{\allemande}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% \begin{macro}{\allemande*}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% The allemande macro takes two mandatory arguments: the count, and the
+% direction to allemande. It also takes the person to allemande (eg.~shadow,
+% partner, neighbor, etc.) as an optional first argument.
+% \begin{macrocode}
+\newcommand*{\allemande}{%
+ \moveindex{Allemande}%
+ \@ifstar\@allemandeStar\@allemandeNoStar%
+}
+\newcommand*{\@allemandeNoStar}[3][\unskip]{%
+ \move[#2]{Allemande \ignorespaces#3\unskip\ \ignorespaces#1\unskip}%
+}
+\newcommand*{\@allemandeStar}[3][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ allemande \ignorespaces#3\unskip}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\balance}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% \begin{macro}{\balance*}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% \begin{macro}{\balanceand}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% \changes{2.0.0}{2019/02/28}{Now modifies count and text of next move}
+% \begin{macro}{\balanceand*}
+% \changes{1.0.0}{2013/09/05}{Add move shortcut}
+% \changes{2.0.0}{2019/02/28}{Now modifies count and text of next move}
+% The \code{\textbackslash balance} macro takes a single optional argument and
+% prints it after (or before if you use \code{\textbackslash balance*}) the word
+% `balance'. Balances always take up 4 beats.
+% If \code{\textbackslash balanceand} or \code{\textbackslash balanceand*} is
+% used, the balance won't be counted as a separate move.
+% Instead, its count (and the text) will be added to the next move used.
+% \begin{macrocode}
+\newcommand*{\balance}{%
+ \moveindex{Balance}%
+ \@ifstar\@balanceStar\@balanceNoStar%
+}
+\newcommand*{\@balanceNoStar}[1][\unskip]{%
+ \move[4]{Balance \ignorespaces#1\unskip}%
+}
+\newcommand*{\@balanceStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[4]{\ignorespaces#1\unskip\ balance}%
+}
+\newcommand*{\balanceand}{%
+ \cc@checkphrasestart%
+ \moveindex{Balance}%
+ \@ifstar\@balanceandStar\@balanceandNoStar%
+}
+\newcommand*{\@balanceandNoStar}[1][]{%
+ \renewcommand*{\@balanceAnd}{Balance and \ignorespaces#1\unskip\ \expandafter\ignorespaces\expandafter\MakeLowercase}%
+ \renewcommand*{\@extraCount}{4}%
+}
+\newcommand*{\@balanceandStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \renewcommand*{\@balanceAnd}{\ignorespaces#1\unskip\ balance and\ \expandafter\ignorespaces\expandafter\MakeLowercase}%
+ \renewcommand*{\@extraCount}{4}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\butterflywhirl}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\butterflywhirl*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% Both versions of \code{\textbackslash butterflywhirl} also take in an optional
+% string representing the other dance (eg.~partner, neighbor, etc.) and the
+% count as arguments.
+% \begin{macrocode}
+\newcommand*{\butterflywhirl}{%
+ \moveindex{Butterfly Whirl}%
+ \@ifstar\@butterflyStar\@butterflyNoStar%
+}
+\newcommand*{\@butterflyNoStar}[2][\unskip]{%
+ \move[#2]{Butterfly whirl \ignorespaces#1\unskip}%
+}
+\newcommand*{\@butterflyStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ butterfly whirl}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\circleleft}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\circleleft*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\circleright}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\circleright*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% Here are a few commands to deal with circles. As usual, there is an optional
+% argument (in case you need to say something like ``Gents circle left" or
+% ``Circle left 1 time `round") and a mandatory argument (the number of beats to
+% circle).
+% \begin{macrocode}
+\newcommand*{\circleleft}{%
+ \moveindex{Circle Left}%
+ \def\cc@dir{left}%
+ \@ifstar\@circleStar\@circleNoStar%
+}
+\newcommand*{\circleright}{%
+ \moveindex{Circle Right}%
+ \def\cc@dir{right}%
+ \@ifstar\@circleStar\@circleNoStar%
+}
+\newcommand*{\@circleNoStar}[2][\unskip]{%
+ \move[#2]{Circle \cc@dir\ \ignorespaces#1\unskip}%
+}
+\newcommand*{\@circleStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ circle \cc@dir}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\courtesyturn}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\courtesyturn*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% Like most of the move shortcut macros, these take an optional person to turn,
+% and the number of beats. The star version of the command tweaks the wording a
+% bit.
+% \begin{macrocode}
+\newcommand*{\courtesyturn}{%
+ \moveindex{Courtesy Turn}%
+ \@ifstar\@courtesyturnStar\@courtesyturnNoStar%
+}
+\newcommand*{\@courtesyturnNoStar}[2][\unskip]{%
+ \move[#2]{Courtesy turn \ignorespaces#1\unskip}%
+}
+\newcommand*{\@courtesyturnStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ courtesy turn}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dosido}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\dosido*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\seesaw}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\seesaw*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% These commands create a dosido (aka \word{do-si-do}, \word{do-se-do},
+% \word{dosado}, \word{dos-\`a-dos}, etc.) or a see saw (left shoulder dosido).
+% \begin{macrocode}
+\newcommand*{\dosido}{%
+ \moveindex{\spellDosido}%
+ \@ifstar\@dosidoStar\@dosidoNoStar%
+}
+\newcommand*{\@dosidoNoStar}[2][\unskip]{%
+ \move[#2]{\spellDosido\ \ignorespaces#1\unskip}%
+}
+\newcommand*{\@dosidoStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ \spelldosido}%
+}
+\newcommand*{\seesaw}{%
+ \moveindex{See Saw}%
+ \@ifstar\@seesawStar\@seesawNoStar%
+}
+\newcommand*{\@seesawNoStar}[2][\unskip]{%
+ \move[#2]{See saw \ignorespaces#1\unskip}%
+}
+\newcommand*{\@seesawStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ see saw}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\walkaround}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% \begin{macro}{\walkaround*}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% \begin{macro}{\walkaroundleft}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% \begin{macro}{\walkaroundleft*}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% \begin{macro}{\walkaroundright}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% \begin{macro}{\walkaroundright*}
+% \changes{2.0.0}{2019/02/17}{Rename move}
+% Several different macros exist for creating walk arounds (sometimes right or
+% left shoulder round).
+% You can create a direction agnostic version with the \code{\textbackslash
+% walkaround} macro, while the \code{\textbackslash walkaroundleft} and
+% \code{\textbackslash walkaroundright} macros use the ``shoulder round" variant
+% and include the direction, they also index the move under the given direction.
+%
+% For information about the terminology, see appendix \ref{appendix:notation}.
+% \begin{macrocode}
+\newcommand*{\walkaround}{%
+ \moveindex{Walk around}%
+ \@ifstar\@walkAroundStar\@walkAroundNoStar%
+}
+\newcommand*{\walkaroundright}{%
+ \moveindex{Walk around}%
+ \moveindex{Right shoulder round}%
+ \def\cc@thedir{right}%
+ \@ifstar\@walkAroundDirStar\@walkAroundDirNoStar%
+}
+\newcommand*{\walkaroundleft}{%
+ \moveindex{Walk around}%
+ \moveindex{Left shoulder round}%
+ \def\cc@thedir{left}%
+ \@ifstar\@walkAroundDirStar\@walkAroundDirNoStar%
+}
+\newcommand*{\@walkAroundNoStar}[2][\unskip]{%
+ \move[#2]{Walk around \ignorespaces#1\unskip}%
+}
+\newcommand*{\@walkAroundStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ walk around}%
+}
+\newcommand*{\@walkAroundDirNoStar}[2][\unskip]{%
+ \move[#2]{\cc@thedir\ shoulder round \ignorespaces#1\unskip}%
+}
+\newcommand*{\@walkAroundDirStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ \cc@thedir\ shoulder round}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\heyforfour}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\heyforfour*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\halfhey}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\halfhey*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\halfheyricochet}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\halfheyricochet*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\fullhey}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\fullhey*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\fullheyricochet}
+% \changes{2.0.0}{2019/03/03}{Add move shortcut}
+% \begin{macro}{\fullheyricochet*}
+% \changes{2.0.0}{2019/03/03}{Add move shortcut}
+% These macros produce various kinds of hey. Though `hey for four' is often used
+% to indicate `half a hey` we define `hey for four` and `full hey' to be the
+% same thing.
+% \begin{macrocode}
+\newcommand*{\heyforfour}{%
+ \moveindex{Hey}%
+ \moveindex{Hey for Four}%
+ \moveindex{Full Hey}%
+ \@ifstar\@heyforfourStar\@heyforfourNoStar%
+}
+\newcommand*{\@heyforfourNoStar}[1][\unskip]{%
+ \move[16]{Hey for four \ignorespaces#1\unskip}
+}
+\newcommand*{\@heyforfourStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[16]{\ignorespaces#1\unskip\ hey for four}
+}
+\newcommand*{\halfhey}{%
+ \moveindex{Hey}%
+ \moveindex{Hey for Four}%
+ \moveindex{Half Hey}%
+ \@ifstar\@halfheyStar\@halfheyNoStar%
+}
+\newcommand*{\@halfheyNoStar}[1][\unskip]{%
+ \move[8]{Half a hey \ignorespaces#1\unskip}
+}
+\newcommand*{\@halfheyStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ half a hey}
+}
+\newcommand*{\halfheyricochet}{%
+ \moveindex{Hey}%
+ \moveindex{Hey for Four}%
+ \moveindex{Half Hey}%
+ \moveindex{Half Hey Ricochet}%
+ \@ifstar\@halfheyricochetStar\@halfheyricochetNoStar%
+}
+\newcommand*{\@halfheyricochetNoStar}[1][\unskip]{%
+ \move[8]{Half hey ricochet \ignorespaces#1\unskip}
+}
+\newcommand*{\@halfheyricochetStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ half hey ricochet}
+}
+\newcommand*{\fullhey}{%
+ \moveindex{Hey}%
+ \moveindex{Hey for Four}%
+ \moveindex{Full Hey}%
+ \@ifstar\@fullheyStar\@fullheyNoStar%
+}
+\newcommand*{\@fullheyNoStar}[1][\unskip]{%
+ \move[16]{Full hey \ignorespaces#1\unskip}
+}
+\newcommand*{\@fullheyStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[16]{\ignorespaces#1\unskip\ full hey}
+}
+\newcommand*{\fullheyricochet}{%
+ \moveindex{Hey}%
+ \moveindex{Hey for Four}%
+ \moveindex{Full Hey}%
+ \moveindex{Full Hey Ricochet}%
+ \@ifstar\@fullheyricochetStar\@fullheyricochetNoStar%
+}
+\newcommand*{\@fullheyricochetNoStar}[1][\unskip]{%
+ \move[16]{Full hey ricochet \ignorespaces#1\unskip}
+}
+\newcommand*{\@fullheyricochetStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[16]{\ignorespaces#1\unskip\ full hey ricochet}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{exampledance}
+% \begin{contra}{East Meets West}{Martha Wild}{Duple improper}
+% \longlines
+% \move{Walk around star \textthreequarters}\moveindex{Walk Around Star}
+% \move[16]{Right shoulder round and swing partner}\moveindex{Walk around}%
+% \moveindex{Right shoulder round}\moveindex{Swing}
+% \halfpromenade
+% \move{Hey}\moveindex{Hey}\moveindex{Hey for Four}\moveindex{Full Hey}
+% \move{(continue hey)}
+% \ladieschain
+% \end{contra}
+% \end{exampledance}
+%
+% \begin{macro}{\ladieschain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\ladieschain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\menchain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\menchain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfladieschain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfladieschain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfmenchain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfmenchain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\fullladieschain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\fullladieschain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\fullmenchain}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\fullmenchain*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% The ladies chain (and it's less common variant for men) is actually a half of
+% a ladies chain. The full ladies chain is often simply called as two ladies
+% chains, however, the alternate full ladies chain commands are provided
+% anyways. A set of commands for half ladies chains are also provided; these are
+% exactly like the normal ladies chain commands except they include the word
+% `half' in the output.
+% \begin{macrocode}
+\newcommand*{\ladieschain}{%
+ \moveindex{Ladies Chain}%
+ \def\cc@who{ladies}%
+ \@ifstar\@chainStar\@chainNoStar%
+}
+\newcommand*{\menchain}{%
+ \moveindex{Men Chain}%
+ \def\cc@who{men}%
+ \@ifstar\@chainStar\@chainNoStar%
+}
+\newcommand*{\@chainNoStar}[1][\unskip]{%
+ \move[8]{\expandafter\MakeUppercase\cc@who\ chain \ignorespaces#1\unskip}%
+}
+\newcommand*{\@chainStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ \cc@who\ chain}%
+}
+\newcommand*{\halfladieschain}{%
+ \moveindex{Half Ladies Chain}%
+ \def\cc@who{ladies}%
+ \@ifstar\@halfchainStar\@halfchainNoStar%
+}
+\newcommand*{\halfmenchain}{%
+ \moveindex{Half Men Chain}%
+ \def\cc@who{men}%
+ \@ifstar\@halfchainStar\@halfchainNoStar%
+}
+\newcommand*{\@halfchainNoStar}[1][\unskip]{%
+ \move[8]{\expandafter\MakeUppercase\cc@who\ half chain \ignorespaces#1\unskip}%
+}
+\newcommand*{\@halfchainStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ \cc@who\ half chain}%
+}
+\newcommand*{\fullladieschain}{%
+ \moveindex{Full Ladies Chain}%
+ \def\cc@who{ladies}%
+ \@ifstar\@fullchainStar\@fullchainNoStar%
+}
+\newcommand*{\fullmenchain}{%
+ \moveindex{Full Men Chain}%
+ \def\cc@who{men}%
+ \@ifstar\@fullchainStar\@fullchainNoStar%
+}
+\newcommand*{\@fullchainNoStar}[1][\unskip]{%
+ \move[16]{\expandafter\MakeUppercase\cc@who\ full chain \ignorespaces#1\unskip}%
+}
+\newcommand*{\@fullchainStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[16]{\ignorespaces#1\unskip\ \cc@who\ full chain}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lines}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\lines*}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\longlines}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\longlines*}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% The \code{\textbackslash lines} macro (lines forward and back) takes a single
+% optional argument: The type of lines (eg. `short', `long', etc.). Using the
+% starred version of the command tells the lines to go forward (4 counts) but
+% not back. Since ``long lines forward and back" is such a common figure, an
+% alias is provided just for that.
+% \begin{macrocode}
+\newcommand*{\lines}{%
+ \moveindex{Lines Forward and Back}%
+ \@ifstar\@linesStar\@linesNoStar%
+}
+\newcommand*{\@linesNoStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ lines forward and back}%
+}
+\newcommand*{\@linesStar}[1][lines]{%
+ \move[4]{\ignorespaces#1\unskip\ lines forward}%
+}
+\newcommand*{\longlines}{%
+ \moveindex{Long Lines Forward and Back\ \seealso{Lines Forward and Back}{X}}%
+ \@ifstar\@longlinesStar\@longlinesNoStar%
+}
+\newcommand*{\@longlinesNoStar}{%
+ \lines[Long]%
+}
+\newcommand*{\@longlinesStar}{%
+ \lines*[Long]%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\madrobin}
+% \changes{2.0.0}{2018/07/24}{New macro}
+% \begin{macro}{\madrobin*}
+% \changes{2.0.0}{2018/07/24}{New macro}
+% The Mad Robin (sometimes called ``Sashay 'round") always takes up 8 full
+% beats.
+% The star version of the command inserts the optional argument before the text
+% ``mad robin" instead of after it.
+% \begin{macrocode}
+\newcommand*{\madrobin}{%
+ \moveindex{Mad Robin}%
+ \@ifstar\@madrobinStar\@madrobinNoStar%
+}
+\newcommand*{\@madrobinNoStar}[1][\unskip]{%
+ \move[8]{Mad robin \ignorespaces#1\unskip}%
+}
+\newcommand*{\@madrobinStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ mad robin}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\petronella}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \begin{macro}{\petronella*}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \begin{macro}{\petronellanella}
+% \changes{1.1.0}{2018/07/21}{Add nella-nella petronella variants}
+% \begin{macro}{\petronellanella*}
+% \changes{1.1.0}{2018/07/21}{Add nella-nella petronella variants}
+% Petronella's are normally performed in rings of four, and aren't with another
+% individual, however, the \code{\textbackslash petronella} macro still takes a
+% single optional argument for those rare occasions when two individuals are
+% turning in a diamond pattern.
+% A petronella-nella has the same timing as a normal petronella but instead of
+% moving one place to the right dancers move two places.
+% \begin{exampledance}
+% \begin{contra}{Snowball Shimmy}{Seth Tepfer}{Duple becket}
+% \move[8]{Circle left all the way}
+% \allemande*[Gents]{8}{left 1\textonehalf}
+% \balanceand\swing[neighbor]{12}
+% \balanceand\petronella
+% \balanceand\petronellanella
+% \balanceand\swing[partner]{12}
+% \notes{nella-nella variant of Erik Weberg's Wasatch Wiggle}
+% \end{contra}
+% \end{exampledance}
+% \begin{macrocode}
+\newcommand*{\petronella}{%
+ \moveindex{Petronella}%
+ \@ifstar\@petronellaStar\@petronellaNoStar%
+}
+\newcommand*{\@petronellaNoStar}[1][\unskip]{%
+ \move[4]{Petronella \ignorespaces#1\unskip}%
+}
+\newcommand*{\@petronellaStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[4]{\ignorespaces#1\unskip\ petronella}%
+}
+\newcommand*{\petronellanella}{%
+ \moveindex{Petronella}%
+ \moveindex{Petronella-nella}%
+ \@ifstar\@petronellanellaStar\@petronellanellaNoStar%
+}
+\newcommand*{\@petronellanellaNoStar}[1][\unskip]{%
+ \move[4]{Petronella-nella \ignorespaces#1\unskip}%
+}
+\newcommand*{\@petronellanellaStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[4]{\ignorespaces#1\unskip\ petronella-nella}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\promenade}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\promenade*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfpromenade}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\halfpromenade*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% The \code{\textbackslash promenade} and \code{\textbackslash halfpromenade}
+% commands work slightly differently. Both take the person (or direction) you're
+% promenading as the optional argument, but the \code{\textbackslash promenade}
+% command also takes a mandatory argument (the number of beats) while
+% \code{\textbackslash halfpromenade} command is fixed at 8 beats.
+% \begin{macrocode}
+\newcommand*{\promenade}{%
+ \moveindex{Promenade}
+ \@ifstar\@promenadeStar\@promenadeNoStar%
+}
+\newcommand*{\@promenadeNoStar}[2][\unskip]{%
+ \move[#2]{Promenade \ignorespaces#1\unskip}%
+}
+\newcommand*{\@promenadeStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ promenade}%
+}
+\newcommand*{\halfpromenade}{%
+ \moveindex{Promenade}%
+ \moveindex{Half Promenade}%
+ \@ifstar\@halfpromenadeStar\@halfpromenadeNoStar%
+}
+\newcommand*{\@halfpromenadeNoStar}[1][\unskip]{%
+ \move[8]{Half promenade \ignorespaces#1\unskip}%
+}
+\newcommand*{\@halfpromenadeStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ half promenade}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rightandleftthrough}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \begin{macro}{\rightandleftthrough*}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \begin{macro}{\rightsandlefts}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \begin{macro}{\rightsandlefts*}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% Creates a right and left through (aka. rights and lefts). These always take up
+% 8 counts.
+% \begin{macrocode}
+\newcommand*{\rightandleftthrough}{%
+ \moveindex{Right and left through}%
+ \moveindex{Rights and lefts|seealso{Right and left through}}%
+ \@ifstar\@rlStar\@rlNoStar%
+}
+\newcommand*{\rightsandlefts}{%
+ \moveindex{Right and left through}%
+ \moveindex{Rights and lefts|seealso{Right and left through}}%
+ \@ifstar\@rlStar\@rlNoStar%
+}
+\newcommand*{\@rlNoStar}[1][\unskip]{%
+ \move[8]{Right and left through \ignorespaces#1\unskip}%
+}
+\newcommand*{\@rlStar}[1][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[8]{\ignorespaces#1\unskip\ right and left through}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rollaway}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Breaking change to allow complex notation}
+% \begin{macro}{\rollaway*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Breaking change to allow complex notation}
+% \begin{macro}{\rollawaysashay}
+% \changes{2.0.0}{2018/07/25}{Renamed from ``\texttt{\textbackslash rollawayhalfsashay}''}
+% \begin{macro}{\rollawaysashay*}
+% \changes{2.0.0}{2018/07/25}{Renamed from ``\texttt{\textbackslash rollawayhalfsashay*}''}
+% ``Roll away" and ``roll away with a half sashay" may sound similar, but the
+% macros that produce them are a bit different. The \code{\textbackslash
+% rollaway} macro works exactly like most macros here: It takes a single
+% optional argument, and the star version rewords things a bit (it takes no
+% count argument since that's always 4 beats for this figure).
+% The \code{\textbackslash rollawaysashay} macro on the other hand, takes a
+% single optional argument unless you use the splat version in which case it
+% takes a single optional argument \emph{and} a required argument.
+% This allows you to reword things (just like the other commands) by leaving off
+% the optional argument, but also allows you to make more complicated roll aways
+% such as \code{\textbackslash rollawaysashay*{[the gents]}\{Ladies\}} which
+% would be typeset as: ``Ladies roll the gents away with a half sashay".
+% \begin{macrocode}
+\newcommand*{\rollaway}{%
+ \moveindex{Roll away}%
+ \@ifstar\@rollawayStar\@rollawayNoStar%
+}
+\newcommand*{\rollawaysashay}{%
+ \moveindex{Roll Away}%
+ \moveindex{Roll Away with a Half Sashay}%
+ \moveindex{Half Sashay}%
+ \@ifstar\@rawhsStar\@rawhsNoStar%
+}
+\newcommand*{\@rollawayNoStar}[1][\unskip]{%
+ \move[4]{Roll \ignorespaces#1\unskip\ away}%
+}
+\newcommand*{\@rollawayStar}[3][\unskip]{%
+ \move[4]{\ignorespaces#2\unskip\ roll \ignorespaces#3\unskip\ away \ignorespaces#1\unskip}%
+}
+\newcommand*{\@rawhsNoStar}[1][\unskip]{%
+ \move[4]{Roll \ignorespaces#1\unskip\ away with a half sashay}%
+}
+\newcommand*{\@rawhsStar}[3][\unskip]{%
+ \move[4]{\ignorespaces#2\unskip\ roll \ignorespaces#3\unskip\ away with a half sashay \ignorespaces#1\unskip}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\starleft}
+% \changes{1.0.0}{2013/09/09}{Add move shortcut}
+% \begin{macro}{\starleft*}
+% \changes{1.0.0}{2013/09/09}{Add move shortcut}
+% \begin{macro}{\starright}
+% \changes{1.0.0}{2013/09/09}{Add move shortcut}
+% \begin{macro}{\starright*}
+% \changes{1.0.0}{2013/09/09}{Add move shortcut}
+% Though `star left' and `star right' are really the same move (in different
+% directions), there are two separate macros since there aren't any other
+% directions you can star.
+% \begin{macrocode}
+\newcommand*{\starleft}{%
+ \moveindex{Star}%
+ \moveindex{Left hand star}%
+ \def\cc@dir{Left}%
+ \@ifstar\@starStar\@starNoStar%
+}
+\newcommand*{\starright}{%
+ \moveindex{Star}%
+ \moveindex{Right hand star}%
+ \def\cc@dir{right}%
+ \@ifstar\@starStar\@starNoStar%
+}
+\newcommand*{\@starNoStar}[1]{%
+ \move[#1]{\cc@dir\ hand star}%
+}
+\newcommand*{\@starStar}[1]{%
+ \move[#1]{Star \cc@dir}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sashay}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\sashay*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% The sashay command, like \code{\textbackslash rollawaysashay} takes a
+% different number of arguments if you use the starred version.
+% The normal version takes an optional argument and the required count, while
+% the starred version takes the same optional argument, the required count, and
+% another required argument.
+% For instance, \code{\textbackslash sashay*{[down and back]}\{8\}\{Ladies\}}
+% would create the move: ``Ladies sashay down and back''.
+% \begin{macrocode}
+\newcommand*{\sashay}{%
+ \moveindex{Sashay}%
+ \@ifstar\@sashayStar\@sashayNoStar%
+}
+\newcommand*{\@sashayNoStar}[2][\unskip]{%
+ \move[#2]{Sashay \ignorespaces#1\unskip}%
+}
+\newcommand*{\@sashayStar}[3][\unskip]{%
+ \move[#2]{\ignorespaces#3\unskip\ sashay \ignorespaces#1\unskip}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\swing}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\swing*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% Creates a basic swing. Probably the most common move in modern contra dance,
+% and also one of the simplest commands in this package.
+% \begin{macrocode}
+\newcommand*{\swing}{%
+ \moveindex{Swing}%
+ \@ifstar\@swingStar\@swingNoStar%
+}
+\newcommand*{\@swingNoStar}[2][\unskip]{%
+ \move[#2]{Swing \ignorespaces#1\unskip}%
+}
+\newcommand*{\@swingStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ swing}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\turnalone}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\turnalone*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\turncouple}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\turncouple*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\turntogether}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \begin{macro}{\turntogether*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% ``Turn alone" and ``Turn as a couple" aren't exactly dance figures; just
+% directions that are often placed at the end of other figures. For this reason,
+% they all take up 0 logical counts of music and should be prepended to other
+% commands. The normal commands take an optional argument which can be used to
+% add some text after `alone' or `couple'. The starred version of each command
+% is exactly the same, except that it also has a required argument, a number of
+% counts (for those times when you want it to actually take up time in the music
+% and not just be part of another move).
+% \begin{macrocode}
+\newcommand*{\turnalone}{%
+ \moveindex{Turn Alone}%
+ \def\cc@who{alone}%
+ \@ifstar\@turnStar\@turnNoStar%
+}
+\newcommand*{\turncouple}{%
+ \moveindex{Turn as a Couple}%
+ \moveindex{Turn Together|see{Turn as a Couple}}%
+ \def\cc@who{as a couple}%
+ \@ifstar\@turnStar\@turnNoStar%
+}
+\newcommand*{\turntogether}{%
+ \moveindex{Turn as a Couple}%
+ \moveindex{Turn Together|see{Turn as a Couple}}%
+ \def\cc@who{together}%
+ \@ifstar\@turnStar\@turnNoStar%
+}
+\newcommand*{\@turnNoStar}[1][\unskip]{%
+ \cc@checkphrasestart%
+ \move*[0]{Turn \cc@who\ \ignorespaces#1\unskip\ \ \ignorespaces}%
+}
+\newcommand*{\@turnStar}[2][\unskip]{%
+ \move[#2]{Turn \cc@who\ \ignorespaces#1\unskip}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\twirltoswap}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\californiatwirl}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\starthrough}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\starthru}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\boxthegnat}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\swattheflea}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\jerseytwirl}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% \begin{macro}{\arizonatwirl}
+% \changes{1.0.0}{2013/09/11}{Add move shortcut}
+% ``Twirl to Swap" is probably in the running for having the most variations of
+% any Contra dance move. A few of the more common ones are presented here. They
+% don't take any arguments, and there aren't any starred versions. Just simple,
+% 4 count moves.
+% \begin{macrocode}
+\newcommand*{\twirltoswap}{%
+ \moveindex{Twirl to Swap}%
+ \move[4]{Twirl to swap}%
+}
+\newcommand*{\californiatwirl}{%
+ \moveindex{California Twirl}%
+ \move[4]{California twirl}%
+}
+\newcommand*{\starthrough}{%
+ \moveindex{Star Through}%
+ \move[4]{Star through}%
+}
+\newcommand*{\starthru}{%
+ \moveindex{Star Thru|see{Star Through}}%
+ \moveindex{Star Through}%
+ \move[4]{Star thru}%
+}
+\newcommand*{\boxthegnat}{%
+ \moveindex{Box the Gnat}%
+ \move[4]{Box the gnat}%
+}
+\newcommand*{\swattheflea}{%
+ \moveindex{Swat the Flea}%
+ \move[4]{Swat the flea}%
+}
+\newcommand*{\jerseytwirl}{%
+ \moveindex{Jersey Twirl}%
+ \move[4]{Jersey twirl}%
+}
+\newcommand*{\arizonatwirl}{%
+ \moveindex{Arizona Twirl}%
+ \move[4]{Arizona twirl}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\downthehall}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\downthehall*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\upthehall}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% \begin{macro}{\upthehall*}
+% \changes{1.0.0}{2013/09/12}{Add move shortcut}
+% Up and down the hall are often counted as a single move (sometimes with a
+% `turn alone' or similar in between). You may want to use the
+% \code{\textbackslash move} command to define your own versions of these
+% commands, but just in case some shortcuts are provided anyways.
+% \begin{macrocode}
+\newcommand*{\downthehall}{%
+ \moveindex{Down the Hall}%
+ \def\cc@dir{down}%
+ \@ifstar\@walkthehallStar\@walkthehallNoStar%
+}
+\newcommand*{\upthehall}{%
+ \moveindex{Up the Hall}%
+ \def\cc@dir{up}%
+ \@ifstar\@walkthehallStar\@walkthehallNoStar%
+}
+\newcommand*{\@walkthehallNoStar}[2][\unskip]{%
+ \move[#2]{\expandafter\MakeUppercase\cc@dir\ the hall\ \ignorespaces#1\unskip}%
+}
+\newcommand*{\@walkthehallStar}[2][%
+ \expandafter\expandafter\expandafter\MakeUppercase\@gobbletwo]{%
+ \move[#2]{\ignorespaces#1\unskip\ \cc@dir\ the hall}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Dance information}
+%
+% \begin{macro}{\dancetitle}
+% \changes{1.0.0}{2013/09/11}{New macro}
+% \begin{macro}{\danceauthor}
+% \changes{1.0.0}{2013/09/11}{New macro}
+% \begin{macro}{\danceform}
+% \changes{1.0.0}{2013/09/11}{New macro}
+% These macros give information about the current (or previous, if you're not in
+% a dance environment) dance. They can be used for things like adding the dance
+% name and number to the header in a book, referencing the dance author in
+% footnotes, etc.
+% \begin{macrocode}
+\newcommand*{\dancetitle}{}
+\newcommand*{\danceauthor}{}
+\newcommand*{\danceform}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Lists and Indices}
+%
+% \subsection{Lists}
+%
+% Just as many classes allow you to build a table of contents, or a list of
+% figures, \pkg{contracard} allows you to create a list of dances.
+%
+% \begin{macro}{\listofdances}
+% The list of dances is created by a call to \code{\textbackslash listofdance}
+% by default, however, we define an alias: \code{\textbackslash listofdances}
+% to prevent confusion.
+% \begin{macrocode}
+\newlistof{dance}{lod}{\cfttoctitlefont\lodtitle}
+\newcommand*{\listofdances}{\listofdance}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lodtitle}
+% The title of the list of dances will be:
+% \begin{macrocode}
+\newcommand*{\lodtitle}{List of Dances}
+% \end{macrocode}
+% \end{macro}
+%
+% An \hyperlink{CC:LOD}{example list of dances} can be found at the beginning of
+% this document.
+%
+% \subsection{Indices}
+% \changes{1.0.0}{2013/09/08}{Added support for indices}
+%
+% \pkg{Contra Card} has the ability to produce several different indices that
+% might be useful for your book or collection of dances. They are:
+%
+% \begin{center}
+% \begin{tabular}{ l l }
+% Shortcut & Name \\
+% \hline
+% dbt & \hyperlink{CC:DBT}{Dances by Type} \\
+% dba & \hyperlink{CC:DBA}{Dances by Author} \\
+% mvp & \hyperlink{CC:MVP}{Moves by Page} \\
+% mvd & \hyperlink{CC:MVD}{Moves by Dance} \\
+% \end{tabular}
+% \end{center}
+%
+% An example of each type of index can be found at the end of this document.
+%
+% \begin{macro}{\enableidx}
+% \changes{1.0.0}{2013/09/08}{New command}
+% Indexing is not turned on by default in Contra Card. When you enable it, the
+% \href{http://ctan.org/pkg/imakeidx}{\pkg{imakeidx}} package is loaded, and the
+% indices are created. This means that \code{\textbackslash enableidx} should
+% \emph{only} be called in the preamble.
+% \begin{macrocode}
+\newcommand*{\enableidx}{%
+ \PassOptionsToPackage{splitindex}{imakeidx}
+ \RequirePackage{imakeidx}
+ \cc@createindices
+}%
+\newcommand*{\cc@createindices}{%
+ \makeindex[name=\cc@dbt,title=\dbtname]
+ \makeindex[name=\cc@dba,title=\dbaname]
+ \makeindex[name=\cc@mvp,title=\mvpname]
+ \makeindex[name=\cc@mvd,title=\mvdname]
+}%
+% \end{macrocode}
+% Because we use the \code{splitindex} option, you'll need to run the
+% \fname{splitindex} command against the index file. For instance, if your
+% project is called \fname{root.tex} you'll want to run:
+%
+% \begin{quote}
+% \code{\$ splitindex root}
+% \end{quote}
+% \end{macro}
+%
+% \begin{macro}{\pauseindexing}
+% \changes{1.0.0}{2013/09/10}{New command}
+% \begin{macro}{\resumeindexing}
+% \changes{1.0.0}{2013/09/10}{New command}
+% On occasion you might have a dance that you don't want to include in the index
+% for some reason. When this happens, you can temporarily disable indexing (and
+% later enable it again).
+% \begin{macrocode}
+\newcommand*{\pauseindexing}{\def\cc@indexingpaused{}}
+\newcommand*{\resumeindexing}{\let\cc@indexingpaused\undefined}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cc@dbt}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\cc@dba}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\cc@mvp}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\cc@mvd}
+% \changes{1.0.0}{2013/09/08}{New command}
+% Though you probably don't need to change this, the shortcut for each index can
+% be changed by redefining the following commands (before you turn on indexing
+% functionality):
+% \begin{macrocode}
+\newcommand*{\cc@dbt}{dbt}
+\newcommand*{\cc@dba}{dba}
+\newcommand*{\cc@mvp}{mvp}
+\newcommand*{\cc@mvd}{mvd}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dbtname}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\dbaname}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\mvpname}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\mvdname}
+% \changes{1.0.0}{2013/09/08}{New command}
+% The names of each index can also be changed by redefining these commands. This
+% should also be done \emph{before} the indexing functionality is turned on.
+% This means that if you're loading \pkg{Contra Card} with the \code{enableidx}
+% package option, you shouldn't mess with these commands.
+% \begin{macrocode}
+\newcommand*{\dbtname}{Dances by Type}
+\newcommand*{\dbaname}{Dances by Author}
+\newcommand*{\mvpname}{Moves by Page}
+\newcommand*{\mvdname}{Moves by Dance}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\moveindex}
+% \changes{1.0.0}{2013/09/08}{New command}
+% \begin{macro}{\moveindex*}
+% \changes{1.0.0}{2013/09/08}{New command}
+% For any of the move shortcut macros, index entries are automatically added for
+% the given move. However, for moves that you define yourself with the
+% \code{\textbackslash move} command, you'll need to add index entries manually.
+% This can be done with \code{\textbackslash moveindex}. This macro takes a
+% single argument (the index entry to add) and should only be called from within
+% the \code{contra} environment. The star version of the command also typesets
+% the first argument (so you don't have to write it twice).
+% \begin{macrocode}
+\newcommand*{\moveindex}{\@ifstar\moveindexStar\moveindexNoStar}
+\newcommand*{\moveindexStar}[1]{%
+ #1%
+ \ifthenelse{\isundefined{\cc@indexingpaused}}{%
+ \ifthenelse{\isundefined{\imki@wrindexentry}}{%
+ \index{#1}%
+ }{%
+ \index[mvp]{#1}%
+ \imki@wrindexentry{mvd}{#1}{\arabic{dance}}%
+ }%
+ }{}%
+}
+\newcommand*{\moveindexNoStar}[1]{%
+ \ifthenelse{\isundefined{\cc@indexingpaused}}{%
+ \ifthenelse{\isundefined{\imki@wrindexentry}}{%
+ \index{#1}%
+ }{%
+ \index[mvp]{#1}%
+ \imki@wrindexentry{mvd}{#1}{\arabic{dance}}%
+ }%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Helper macros}
+%
+% The following macros are used by the \pkg{contracard} package to perform
+% various tasks. Those that may also be of use to the contra dance writer have
+% been left unhidden.
+%
+% \begin{macro}{\timesaround}
+% \changes{1.0.0}{2013/09/05}{Split out ability to calculate times around}
+% Sometimes it's useful to calculate the approximate number of times a given
+% move can be done in a certain number of beats of music (eg.~the number of
+% times around one can allemande in 6 beats). For this, the \code{\textbackslash
+% timesaround} macro was created. It takes two arguments: the number of beats it
+% takes to go one time around (eg.~4 for an allemande) and the total number of
+% beats you have to work with. It spits out an integer, a fraction, or a mixed
+% number and a word matching the regular expression:
+% \regexp{/{[}1-9{]}*{[}\textonequarter\textonehalf%
+% \textthreequarters{]}?(\textbackslash\ times?)?/}.
+
+%
+% For example: \code{\textbackslash timesaround\{4\}\{6\}} produces:
+% ``\timesaround{4}{6}".
+% \begin{macrocode}
+\newcounter{timesaround}
+\newcounter{quartertimesaround}
+\newcommand*{\timesaround}[2]{%
+ \setcounter{timesaround}{\intcalcDiv{\intcalcNum{#2}}{\intcalcNum{#1}}}%
+ \setcounter{quartertimesaround}{%
+ \intcalcMod{\intcalcNum{#2}}{\intcalcNum{#1}}%
+ }%
+ \ifthenelse{\value{timesaround}>0}{\arabic{timesaround}}{}%
+ \ifthenelse{\value{quartertimesaround}=1}{\textonequarter}{%
+ \ifthenelse{\value{quartertimesaround}=2}{\textonehalf}{%
+ \ifthenelse{\value{quartertimesaround}=3}{\textthreequarters}{}%
+ }%
+ }%
+ \ifthenelse{%
+ \value{timesaround}>1\OR%
+ \(\value{timesaround}=1\AND\NOT\value{quartertimesaround}=0\)%
+ }{\ times}{%
+ \ifthenelse{\value{timesaround}=1}{\ time}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\notes}
+% \changes{1.0.0}{2013/09/10}{Make adding notes easier}
+% This macro can be used to insert some nicely formatted notes at the end of
+% your calling cards. Just use it in the \code{contra} environment right after
+% your last move.
+% \begin{macrocode}
+\newcommand*{\notes}[2][\cc@defaultnotesenv]{%
+ \par\nopagebreak\vspace*{\prenotevspace}
+ \begin{\cc@defaultnotesenv}
+ \setlength{\baselineskip}{1.1em plus 0.1em minus 0.2em}
+ \def\cc@notestitle{\textbf{\ignorespaces Notes\unskip}}%
+ \setlength{\parindent}{0pt}%
+ \setlength{\cc@partsepwidth}{\widthof{\footnotesize \cc@notestitle~}}%
+ \setlength{\hangindent}{\cc@partsepwidth}%
+ {\footnotesize \cc@notestitle~\ignorespaces#2\unskip}%
+ \end{\cc@defaultnotesenv}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spelldosido}
+% \changes{1.0.0}{2013/09/12}{Change how Do-si-do is spelled easily}
+% \begin{macro}{\spellDosido}
+% \changes{1.0.0}{2013/09/12}{Change how Do-si-do is spelled easily}
+% \begin{macro}{\setdosidospelling}
+% \changes{1.0.0}{2013/09/12}{Change how Do-si-do is spelled easily}
+% These macros can be used for easily changing the spelling of `Do-si-do'
+% anywhere a \code{\textbackslash dosido} command is found (and in the index).
+% By default, we spell it the contra dance way (`Do-si-do'), however, this can
+% easily be changed. For example, running \code{\textbackslash
+% setdosidospelling\{dos-\textbackslash \`{}a-dos\}} will cause
+% \code{\textbackslash spellDosido} to render: `Dos-\`a-dos' and
+% \code{\textbackslash spelldosido} to render: `dos-\`a-dos'.
+% \begin{macrocode}
+\def\spelldosido{do-si-do}
+\def\spellDosido{Do-si-do}
+\newcommand*{\setdosidospelling}[1]{%
+ \protected@edef\spelldosido{\expandafter\MakeLowercase#1}
+ \protected@edef\spellDosido{\expandafter\MakeUppercase#1}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cc@checkphrasestart}
+% This macro is used by various parts of contra card to reset the dance phrase
+% and part at the appropriate time. You should probably just move on and leave
+% it alone.
+% \begin{macrocode}
+\newcommand*{\cc@checkphrasestart}{%
+ \ifthenelse{\value{phrasecount}=\value{dancephraselength}}{%
+ \newdancephrase%
+ }{%
+ \ifthenelse{\(\value{partcount}=\value{dancepartlength}\)}{%
+ \newdancepart%
+ }{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\ProcessOptions\relax
+%</contracard-pkg>
+% \end{macrocode}
+%
+% \clearpage
+% \phantomsection
+% \part{The \pkg{contracard} class}
+%
+% \begin{macrocode}
+%<*contracard-cls>
+% \end{macrocode}
+%
+% The Contra Card project also provides a class (\fname{contracard.cls}) which
+% acts as a convenience wrapper around the core functionality provided by the
+% package. This is useful for generating calling cards, and saves you the
+% trouble of looking up standard card sizes and figuring out margins and where
+% to put headings and the like.
+%
+% \phantomsection
+% \hypertarget{CCCLASS:OPTIONS}{}
+% \subsection{Options}
+%
+% \begin{macro}{small}
+% \begin{macro}{medium}
+% \begin{macro}{large}
+% \begin{macro}{a7paper}
+% \begin{macro}{draft}
+% \changes{1.0.0}{2013/09/11}{Pass option through to \code{article} class}
+% The class can be loaded with any of the following options. The various size
+% options are summarized in the table below. Any unrecognized options are passed
+% to the \pkg{contracard} package.
+%
+% \begin{center}
+% \begin{tabular}{ l l l }
+% Option & Size (mm) & Size (in) \\
+% \hline
+% \code{small} & 127.0 $\times$ 76.2 & 5.0 $\times$ 3.0 \\
+% \code{medium} & 152.4 $\times$ 101.6 & 6.0 $\times$ 4.0 \\
+% \code{large} & 203.2 $\times$ 27.0 & 8.0 $\times$ 5.0 \\
+% \code{a7paper} & 105.0 $\times$ 74.0 & 4.1 $\times$ 2.9 \\
+% \end{tabular}
+% \end{center}
+% \begin{macrocode}
+\AtBeginDocument{\large}
+\PassOptionsToPackage{%
+ margin=0.5in,top=0.75in,paperwidth=6in,paperheight=4in%
+}{geometry}%
+\DeclareOption{small}{%
+ \AtBeginDocument{%
+ \titleformat{\section}{\normalsize\bfseries}{\thesection}{1em}{}%
+ \titleformat{\subsection}{\normalsize}{\thesection}{1em}{}%
+ }
+ \PassOptionsToPackage{%
+ margin=0.25in,top=0.75in,paperwidth=5in,paperheight=3in%
+ }{geometry}%
+}
+\DeclareOption{medium}{%
+ \AtBeginDocument{\large}
+ \PassOptionsToPackage{%
+ margin=0.5in,top=0.75in,paperwidth=6in,paperheight=4in%
+ }{geometry}%
+}
+\DeclareOption{large}{%
+ \AtBeginDocument{\Large}
+ \PassOptionsToPackage{%
+ margin=0.75in,top=1in,paperwidth=8in,paperheight=5in%
+ }{geometry}%
+}
+\DeclareOption{a7paper}{%
+ \AtBeginDocument{%
+ \titleformat{\section}{\normalsize\bfseries}{\thesection}{1em}{}%
+ \titleformat{\subsection}{\normalsize}{\thesection}{1em}{}%
+ }
+ \PassOptionsToPackage{%
+ margin=5mm,top=15mm,paperwidth=105mm,paperheight=74mm%
+ }{geometry}%
+}
+\DeclareOption{draft}{%
+ \PassOptionsToClass{draft}{article}%
+}
+\DeclareOption*{%
+ \PassOptionsToPackage{\CurrentOption}{contracard}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Environment setup}
+%
+% The \pkg{contracard} class does a little extra work to turn off headers, and
+% prevent page numbering:
+%
+% \begin{macrocode}
+\AtBeginDocument{\pagestyle{empty}}
+\AtBeginDocument{\pagenumbering{gobble}}
+% \end{macrocode}
+% It also defines a command \code{\textbackslash @ccisclass} to let the
+% \pkg{contracard} package know that it was called via the class:
+% \begin{macrocode}
+\newcommand*{\@ccisclass}{}
+\ProcessOptions\relax
+%</contracard-cls>
+% \end{macrocode}
+%
+% \cleardoublepage
+% \begin{appendices}
+% \section{On Notation}
+% \label{appendix:notation}
+%
+% \begin{macro}{\gypsy}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\gypsy*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\gypsyleft}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\gypsyleft*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\gypsyright}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% \begin{macro}{\gypsyright*}
+% \changes{1.0.0}{2013/09/06}{Add move shortcut}
+% In some circles (pun intended) the move ``walk around" or ``right/left
+% shoulder round" (also ``spiral", ``gyre", ``eyes", etc.) is called a ``gypsy".
+% This is considered an ethnic slur by some groups of the Romani people.
+% While the contra term is not likely to have been derived from the slur, I see
+% no reason not to use an alternative.
+% In version 2 of this document---and in calling cards generated with this
+% package---I have chosen to use the term ``walk around" when no direction needs
+% to be specified, or ``right/left shoulder round" when it does.
+% This avoids creating an uncomfortable situation for a dancer hearing a word
+% that to them may be associated with hostility, and a lifetime of persecution.
+% It seems to me that providing a safe and welcoming dance environment is worth
+% the trivial inconvenience of having to learn a new move name.
+%
+% The commands listed in the margin have been renamed, for their alternatives
+% see \texttt{\textbackslash walkaround} and its variants.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Deprecated macros}
+% \label{appendix:deprecated}
+%
+% \begin{macro}{\longpetronella}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Remove move}
+% \begin{macro}{\longpetronella*}
+% \changes{1.0.0}{2013/09/08}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Remove move}
+% \begin{macro}{\longpetronellanella}
+% \changes{1.1.0}{2018/07/21}{Add nella-nella petronella variants}
+% \changes{2.0.0}{2019/02/24}{Remove move}
+% \begin{macro}{\rollawayhalfsashay}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Renamed to ``\texttt{\textbackslash rollawaysashay}''}
+% \begin{macro}{\rollawayhalfsashay*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Renamed to ``\texttt{\textbackslash rollawaysashay*}''}
+% \begin{macro}{\rawhs}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Remove move}
+% \begin{macro}{\rawhs*}
+% \changes{1.0.0}{2013/09/10}{Add move shortcut}
+% \changes{2.0.0}{2018/07/25}{Remove move}
+% These macros (as well as the ones mentioned in appendix
+% \ref{appendix:notation}) have been removed from the package, resulting in a
+% major version bump.
+% If you were using any of these macros in your documents, you may wish to
+% continue using an older version of this package or update your documents
+% before upgrading.
+% For information about what version each macro was removed in see the change
+% log.
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Upgrading from 1.x}
+%
+% Aside from removing deprecated macros, (see appendix
+% \ref{appendix:deprecated}), you will also want to search your dances for the
+% text \code{\textbackslash balanceand} and decrement the following move by 4
+% counts.
+% Previously, the \code{\textbackslash balanceand} macros took up 0 logical
+% counts of music, but in version 2.0 it adds 4 counts to the next move.
+% Several new move shortcuts were also added in version 2.0 of this package
+% which may be able to replace uses of the generic \code{\textbackslash move}
+% macro in your dances.
+% For a full list, see the change history at the end of this document.
+%
+% \end{appendices}
+%
+% \bookmarksetup{startatroot}
+% \addtocontents{toc}{\bigskip}
+% \clearpage
+% \setcounter{IndexColumns}{2}
+% \phantomsection
+% \addcontentsline{toc}{section}{Index}
+% \PrintIndex
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{\dbtname}
+% \hypertarget{CC:DBT}{}
+% \printindex[\cc@dbt]
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{\dbaname}
+% \hypertarget{CC:DBA}{}
+% \printindex[\cc@dba]
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{\mvpname}
+% \hypertarget{CC:MVP}{}
+% \printindex[\cc@mvp]
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{\mvdname}
+% \hypertarget{CC:MVD}{}
+% \printindex[\cc@mvd]
+%
+% \makeatletter
+% \renewenvironment{theglossary}{%
+% \glossary@prologue
+% \setlength\emergencystretch{5em}
+% \GlossaryParms \let\item\@idxitem \ignorespaces}{}
+% \makeatother
+% \clearpage
+% \phantomsection
+% \addcontentsline{toc}{section}{Change History}
+% \PrintChanges
+% \Finale
+%
+% \iffalse
+%\fi
+\endinput
diff --git a/macros/latex/contrib/contracard/contracard.ins b/macros/latex/contrib/contracard/contracard.ins
new file mode 100644
index 0000000000..4bda64f2b4
--- /dev/null
+++ b/macros/latex/contrib/contracard/contracard.ins
@@ -0,0 +1,55 @@
+%% contracard.ins -- part of contracard
+
+\input l3docstrip.tex\relax
+
+\keepsilent
+\usedir{tex/latex/contracard}
+\let\MetaPrefix\relax
+\preamble
+
+ Copyright 2013 Sam Whited
+
+ This file may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any later
+ version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+ and version 1.3c or later is part of all distributions of
+ LaTeX version 2008/05/04 or later.
+
+ For the maintenance status and other document metadata,
+ see the end of this document.
+
+\endpreamble
+\postamble
+
+ ___________
+ This work has the LPPL maintenance status `maintained'.
+
+ Author: Sam Whited
+ Maintainer: Sam Whited
+ Website: https://blog.samwhited.com
+ Contact: sam@samwhited.com
+
+\endpostamble
+\askforoverwritefalse
+
+\let\MetaPrefix\DoubleperCent
+\generate{\file{contracard.sty}{\from{contracard.dtx}{contracard-pkg}}}
+\generate{\file{contracard.cls}{\from{contracard.dtx}{contracard-cls}}}
+
+\endbatchfile
+\endinput
+
+%%
+%% ___________
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% Author: Sam Whited
+%% Maintainer: Sam Whited
+%% Website: https://blog.samwhited.com
+%% Contact: sam@samwhited.com
+%%
+%% End of file `contracard.ins'.
diff --git a/macros/latex/contrib/contracard/contracard.pdf b/macros/latex/contrib/contracard/contracard.pdf
new file mode 100644
index 0000000000..3827df3fd6
--- /dev/null
+++ b/macros/latex/contrib/contracard/contracard.pdf
Binary files differ