% arara: pdflatex
% arara: biber
% arara: pdflatex
% arara: pdflatex
% --------------------------------------------------------------------------
% the GUITARCHORDSCHEMES package
% 
%   Guitar Chord and Scale Tablatures with TikZ
% 
% --------------------------------------------------------------------------
% Clemens Niederberger
% Web:    https://bitbucket.org/cgnieder/guitarchordschemes/
% E-Mail: contact@mychemistry.eu
% --------------------------------------------------------------------------
% Copyright 2013--2016 Clemens Niederberger
% 
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% 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.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
% 
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Clemens Niederberger.
% --------------------------------------------------------------------------
% The guitarchordschemes package consists of the files
%  - guitarchordschemes.sty,
%  - guitarchordschemes_en.tex,
%  - guitarchordschemes_en.pdf,
%  - README
% --------------------------------------------------------------------------
% If you have any ideas, questions, suggestions or bugs to report, please
% feel free to contact me.
% --------------------------------------------------------------------------
\documentclass[load-preamble+]{cnltx-doc}
\usepackage{guitarchordschemes}
\usepackage[chords]{leadsheets}

\setcnltx{
  package = guitarchordschemes ,
  authors = Clemens Niederberger ,
  email   = contact@mychemistry.eu ,
  url     = https://bitbucket.org/cgnieder/guitarchordschemes/ ,
  info    = guitar chord schemes and fingering scales with \TikZ ,
  add-cmds = {
    chordscheme,
    setchordscheme,
    setfingering ,
    scales
  } ,
  add-silent-cmds = textsuperscript ,
  abstract = {%
    \centering
    \chordscheme[
      name      = Gmi7 ,
      position  = II ,
      barre     = {2/2-4:3} ,
      show-root = {4/4} ,
      root      = {2/6:2} ,
      mute      = {1,5}
    ]%
  } ,
  index-setup = {
     othercode = \footnotesize ,
     level = \addsec ,
     noclearpage
  } ,
  makeindex-setup = {
     columns = 3 ,
     columnsep = 1em
  }
}

\addbibresource{\jobname.bib}
\begin{filecontents}{\jobname.bib}
@online{web:pietsch:fonts,
  author  = {Jochen Pietsch} ,
  title   = {Jazz Fonts} ,
  url     = {http://notation.jochenpietsch.de/index_e.html} ,
  urldate = {2012-05-10}
}
@book{leavitt:mmfg:1,
  author    = {William G. Leavitt},
  title     = {A Modern Method for Guitar},
  volume    = {1},
  publisher = {Berklee Press Publications, Boston},
  year      = {1966}
}
\end{filecontents}

\usepackage{ccicons}

\setchordscheme{
  finger-format+ = \biolinumLF ,
  name-format+   = \libertineLF ,
  chord-name-cs  = \chordname
}

\newcommand*\TikZ{Ti\textit{k}Z}

\begin{document}

\section{License and Requirements}

\license

\guitarchordschemes{} loads the packages \TikZ~\cite{pkg:pgf},
\pkg{etoolbox}~\cite{pkg:etoolbox} and \pkg{pgfopts}~\cite{pkg:pgfopts}.  It
also loads the \TikZ{} libraries \code{shapes.misc}, \code{arrows} and
\code{calc}.

% Depending on an option it also loads
% \pkg{realbookchords}~\cite{pkg:realbookchords}.  This package is not yet
% published on \CTAN{} and thus not part of any \TeX{} distribution. Until it is
% you can find it at \url{https://bitbucket.org/cgnieder/realbookchords/}.  See
% section~\ref{sec:realbookchords} for details on this option.

\section{The Commands}
This package mainly provides two commands:
\begin{commands}
  \command{chordscheme}[\oarg{options}]
    Typeset a guitar chord scheme.
  \command{scales}[\oarg{option}]
    Typeset a fingering scale.
\end{commands}
These commands set the frame for the chord and scale tablatures and can be used
to create sheets for manually writing down tablatures:
\begin{example}[side-by-side]
  \chordscheme
\end{example}

Similarly \cs{scales} creates a frame with two more frets:
\begin{example}
  \scales
\end{example}

\subsection{Options for \cs*{chordscheme}}
The \meta{options} argument is where the actual details for a chord
happen. These are the available ones for \cs{chordscheme}:
\begin{options}
  \keyval{fret-number}{number}\Default{4}
    \sinceversion{0.6}The number of frets that are drawn.  This number must be
    at least 4.  The option should be set as first option since it influences
    other options.
  \keyval{name}{chordsymbol}
    Set the chord symbol. This option accepts a comma separated list of
    entries.
  \keyval{position}{position}
    Set the position for the first of the four frets.
  \keychoice{finger}{\meta{fret}/\meta{string}:\meta{label}}
    Specify the finger positions for a chord.  This option accepts a comma
    separated list of entries.  The \code{:\meta{label}} is optional.
  \keychoice{root}{\meta{fret}/\meta{string}:\meta{label}}
    The same as finger but uses a square instead of a circle to indicate that
    this finger is playing the root of the chord.  This option accepts a comma
    separated list of  entries. The \code{:\meta{label}} is optional.
  \keychoice{show-root}{\meta{fret}/\meta{string}}
    Specify positions of the root that are \emph{not} part of the actual chord
    but are somewhere in the vicinity of it on the guitar neck.  This option
    accepts a comma separated list of entries.
  \keychoice{barre}{\meta{fret}/\meta{string range}:\meta{label}}
    Specify a barr\'e position for a chord.  The \meta{string range} part must
    contain a two string numbers separated with a dash.  This option accepts a
    list of entries. The \code{:\meta{label}} is optional.
  \keyval{ring}{string}
    Specify open strings.  This option accepts a comma separatedlist of
    entries.
  \keyval{mute}{string}
    Specify muted/un-played strings.  This option accepts a comma separated
    list of entries.
\end{options}

Let's take a look at a few examples:

\begin{example}[side-by-side]
  \chordscheme[
    name      = G ,
    position  = I ,
    finger    = {2/5:1} ,
    root      = {3/6:2, 3/1:4} ,
    ring      = {2,3,4}
  ]
\end{example}
\makeatletter
\setchordscheme{chord-name-cs=\@firstofone}
\makeatother

Or a more "`jazzy"' chord:
\begin{example}[side-by-side]
  \chordscheme[
    name      = G\textsuperscript{6} ,
    position  = II ,
    finger    = {1/4:1, 3/3:4, 2/2:3} ,
    root      = 2/6:2 ,
    show-root = 4/4 ,
    mute      = {1,5}
  ]
\end{example}

One with a barr\'e:

\begin{example}[side-by-side]
  \chordscheme[
    name      = Gmi\textsuperscript{7} ,
    position  = II ,
    barre     = 2/2-4:3 ,
    show-root = 4/4 ,
    root      = 2/6:2 ,
    mute      = {1,5}
  ]
\end{example}

\subsection{Options for \cs*{scales}}
The \meta{options} argument for \cs{scales} are similar to the ones for
\cs{chordscheme}:
\begin{options}
  \keyval{fret-number}{number}\Default{6}
    \sinceversion{0.6}The number of frets that are drawn.  This number must be
    at least 6.  The option should be set as first option since it influences
    other options.
  \keyval{name}{title}
    Set a title for the scale.
  \keyval{position}{position}
    Set the position for the first of the six frets.
  \keychoice{finger}{\meta{fret}/\meta{string}:\meta{label}}
    Specify the finger positions for the scale.  This option accepts a comma
    separated list of entries.  The \code{:\meta{label}} is optional.
  \keychoice{root}{\meta{fret}/\meta{string}:\meta{label}}
    The same as finger but uses a square instead of a circle to indicate that
    this finger is playing the root of the scale.  This option accepts a comma
    separated list of entries.  The \code{:\meta{label}} is optional.
  \keyval{fret number}{integer}\Default{6}
    The number of frets displayed for a scale.  The minimum number is 6.
  \keychoice{fingering}{type 1,type 1A,type 2,type 3,type 4}
    Set a whole predefined fingering.  The types correspond to ones taught
    in \citeauthor{leavitt:mmfg:1}'s
    \citetitle{leavitt:mmfg:1}~\cite{leavitt:mmfg:1}.  This option assumes an
    ionic scale and places the roots correspondingly.
  \keychoice{fingering*}{type 1,type 1A,type 2,type 3,type 4}
    The same as \option{fingering} but no scale is assumed and no roots are
    indicated.
  \keychoice{fingering?}{type 1,type 1A,type 2,type 3,type 4}
    The same as \option{fingering*} but also no labels for the fingers are given.
\end{options}

Let's see an example:
\begin{example}
  \scales[
    name      = F-major (Fingering Type~1A) ,
    position  = I ,
    fingering = type 1A
  ]
\end{example}

An example for \option{fingering*}:
\begin{example}
  \scales[
    name       = Fingering Type~3 ,
    fingering* = type 3
  ]
\end{example}

Now an example for \option{fingering?}:
\begin{example}
  \scales[
    name       = Fingering Type~2 ,
    fingering? = type 2
  ]
\end{example}

At last an example for an explicitly set scale:
\begin{example}
  \scales[
    finger = {
      2/1:1,               5/1:4,
      2/2:1,               5/2:4,
      2/3:1,        4/3:3, 5/3:4,
      2/4:1,        4/4:3,
      2/5:1, 3/5:2, 4/5:3,      
      2/6:1,               5/6:4
    }
  ]
\end{example}

You can add other predefined fingerings or change the existing ones with the
following command:
\begin{commands}
  \command{setfingering}[\marg{name}\marg{fingers}\marg{roots}]
    \sinceversion{0.7}\marg{name} sets the name as chosen by
    \option{fingering}, \option{fingering*} or \option{fingering?},
    \meta{fingers} is passed to the \option{finger} option and \meta{roots}
    either to the \option{finger} option or the \option{root} option depending
    if the fingering is called by \option{fingering}, \option{fingering*} or
    \option{fingering?}.
\end{commands}
As an example here is how fingering type 1A has been defined:
\begin{sourcecode}
  \setfingering{type 1A}{
                   3/1:2,        5/1:4,
                   3/2:2,        5/2:4,
            2/3:1, 3/3:2,        5/3:4,
            2/4:1,               5/4:4,
    1/5:1s,        3/5:2,        5/5:4,
                   3/6:2,        5/6:4
  }{1/1:1s, 3/4:2, 1/6:1s}
\end{sourcecode}

\section{Options}
There are quite a number of options determining the layout of the tablatures.
They can either be set as package options or via the setup command:
\begin{commands}
  \command{setchordscheme}[\marg{options}]
    The setup command for \guitarchordschemes.
\end{commands}

Below every option and its corresponding default setting is described.
\begin{options}
  \keyval{x-unit}{dim}\Default{.8cm}
    The basic $x$ unit for the \TikZ{} picture the chord scheme is set in.
  \keyval{y-unit}{dim}\Default{.8cm}
    The basic $y$ unit for the \TikZ{} picture the chord scheme is set in.
  \keyval{rotate}{angle}\Default{0}
    \sinceversion{0.7}Rotates the diagram counter-clockwise by \meta{angle}.
  \keyval{finger-format}{\TeX{} code}\Default{\cs*{sffamily}\cs*{small}}
    The format the numbers for the fingers are typeset with.
  \keyval{finger-format+}{\TeX{} code}\Default
    Code to be appended to \option{finger-format}.
  \keyval{position-format}{\TeX{} code}\Default{\cs*{sffamily}}
    The format the number for the position is typeset with.
  \keyval{position-format+}{\TeX{} code}\Default
    Code to be appended to \option{position-format}.
  \keyval{name-format}{\TeX{} code}\Default{\cs*{large}}
    The format the chord name/symbol is typeset with.
  \keyval{name-format+}{\TeX{} code}\Default
    Code to be appended to \option{name-format}.
  \keybool{name-below}\Default{false}
    \sinceversion{0.7}If set to \code{true} the name will be written below
    instead of above the diagram.
  \keyval{name-distance}{dim}\Default{.5em}
    \sinceversion{0.7}The distance between name and chord diagram.
  \keyval{chord-name-cs}{cs}\Default{\cs*{@firstofone}}
    \sinceversion{0.5}The command that is used to parse the chord name.
    \meta{cs} needs to be a command that takes a mandatory argument.
  \keyval{scales-name-cs}{cs}\Default{\cs*{@firstofone}}
    \sinceversion{0.5}The command that is used to parse the scales name.
    \meta{cs} needs to be a command that takes a mandatory argument.
  \keyval{string-name-format}{\TeX{} code}\Default{\cs*{sffamily}\cs*{small}}
    The format the names of the strings are typeset with.
  \keyval{string-name-format+}{\TeX{} code}\Default
    Code to be appended to \option{string-name-format}.
  \keyval{strings}{num}\Default{6}
    \sinceversion{0.7}Sets the number of strings.
  \keyval{chord-frets}{number}\Default{4}
    \sinceversion{0.6}The default number of frets of a chord scheme.
    \meta{number} must be at least 4. 
  \keyval{scales-frets}{number}\Default{6}
    \sinceversion{0.6}The default number of frets of a scales scheme.
    \meta{number} must be at least 6.
  \keyval{line-width}{dim}\Default{1pt}
    The line width used for all lines drawn in the chord scheme.
  \keyval{finger-radius}{num}\Default{.1875}
    The radius of the circles that represent the fingers in multiples of
    \option{x-unit}.  Also determines the size of the root markers and the
    barr\'e.
  \keyval{finger-x-offset}{num}\Default{.375}
    The $x$ offset of the number with respect to the circle in multiples of
    \option{x-unit}.
  \keyval{finger-y-offset}{num}\Default{.375}
    The $y$ offset of the number with respect to the circle in multiples of
    \option{y-unit}.
  \keyval{finger-style}{\TikZ{} style}\Default{fill}
    The \TikZ{} style the circles representing the fingers are drawn with.
    This is equivalent to \cs*{tikzset}\Marg{finger
      style/.style=\{\meta{\TikZ{} style}\}}.
  \keyval{root-style}{\TikZ{} style}\Default{fill}
    The \TikZ{} style the squares representing the roots are drawn with.
    This is equivalent to \cs*{tikzset}\Marg{root style/.style=\{\meta{\TikZ{}
        style}\}}.
  \keyval{show-root-style}{\TikZ{} style}\Default{draw}
    The \TikZ{} style the squares representing the "`ghost roots"' are drawn
    with.  This is equivalent to \cs*{tikzset}\Marg{show root
      style/.style=\{\meta{\TikZ{} style}\}}.
  \keyval{ringing-style}{\TikZ{} style}\Default{draw}
    The \TikZ{} style the circles representing the open string markers are
    drawn with.  This is equivalent to \cs*{tikzset}\Marg{ringing
      style/.style=\{\meta{\TikZ{} style}\}}.
  \keyval{muted-style}{\TikZ{} style}\Default{cross out,draw}
    The \TikZ{} style the nodes representing muted strings are drawn with.
    This is equivalent to \cs*{tikzset}\Marg{muted style/.style=\{\meta{\TikZ{}
        style}\}}.
  \keyval{tuning}{comma separated list of string names}\Default{E,B,G,D,A,E}
    The tuning.  The strings are named from first to sixth string.  If you
    want to remove all names use \keyis{tuning}{,,,,,}.
  \keybool{restrict-bounding-box}\Default{false}
    \sinceversion{0.7}If set to \code{true} the bounding box of the \TikZ{}
    picture is not extended by string names, position labels etc.\@ but
    restricted (more or less) only to the chord scheme diagram itself.
\end{options}

\end{document}
