summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-08-26 21:57:03 +0000
committerKarl Berry <karl@freefriends.org>2013-08-26 21:57:03 +0000
commit288848b5e24e465cc7b0d9687d0309e19f3b8e97 (patch)
treea2e08417cacb5df27ca59ddccea8a7bdbc2a3cb3 /Master/texmf-dist
parentc492fcca271ba84bff91e6b6237a981061ccc10d (diff)
guitarchordschemes (26aug13)
git-svn-id: svn://tug.org/texlive/trunk@31524 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/guitarchordschemes/README33
-rw-r--r--Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.pdfbin0 -> 116509 bytes
-rw-r--r--Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.tex442
-rw-r--r--Master/texmf-dist/tex/latex/guitarchordschemes/guitarchordschemes.sty594
4 files changed, 1069 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/guitarchordschemes/README b/Master/texmf-dist/doc/latex/guitarchordschemes/README
new file mode 100644
index 00000000000..0397df22b11
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/guitarchordschemes/README
@@ -0,0 +1,33 @@
+--------------------------------------------------------------------------
+the GUITARCHORDSCHEMES package v 0.4
+
+ Guitar Chord and Scale Tablatures with TikZ
+
+2013/08/25
+--------------------------------------------------------------------------
+Clemens Niederberger
+Web: https://bitbucket.org/cgnieder/guitarchordschemes/
+E-Mail: contact@mychemistry.eu
+--------------------------------------------------------------------------
+Copyright 2013 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.
+--------------------------------------------------------------------------
diff --git a/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.pdf b/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.pdf
new file mode 100644
index 00000000000..87c0de8bbaf
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.tex b/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.tex
new file mode 100644
index 00000000000..18891ca9c46
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/guitarchordschemes/guitarchordschemes_en.tex
@@ -0,0 +1,442 @@
+% arara: xelatex
+% !arara: biber
+% !arara: xelatex
+% !arara: xelatex
+% --------------------------------------------------------------------------
+% the GUITARCHORDSCHEMES package
+%
+% Guitar Chord and Scale Tablatures with TikZ
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://bitbucket.org/cgnieder/guitarchordschemes/
+% E-Mail: contact@mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2012--2013 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[toc=index,toc=bib]{cnpkgdoc}
+\docsetup{
+ pkg = [use-rbc]guitarchordschemes ,
+ subtitle = Guitar Chord and Scale Tablatures with \TikZ ,
+ code-box = {
+ backgroundcolor = gray!7!white ,
+ skipbelow = .6\baselineskip plus .5ex minus .5ex ,
+ skipabove = .6\baselineskip plus .5ex minus .5ex ,
+ roundcorner = 3pt ,
+ } ,
+ gobble = 1
+}
+\usepackage{polyglossia}
+\setmainlanguage{english}
+\usepackage[oldstyle,proportional]{libertine}
+\usepackage{libertinehologopatch}
+\cnpkgusecolorscheme{friendly}
+
+\setmonofont[Ligatures=TeX,Scale=MatchLowercase]{Bitstream Vera Sans Mono}
+
+\usepackage{fnpct}
+\pagestyle{headings}
+
+\usepackage[biblatex]{embrac}[2013/03/22]
+\ChangeEmph{[}[,.02em]{]}[.055em,-.08em]
+\ChangeEmph{(}[-.01em,.04em]{)}[.04em,-.05em]
+
+\renewcommand*\othersectionlevelsformat[3]{%
+ \textcolor{main}{#3\autodot}\enskip}
+\renewcommand*\partformat{%
+ \textcolor{main}{\partname~\thepart\autodot}}
+
+\addcmds{
+ chordscheme,
+ setchordscheme,
+ scales,
+ textsuperscript
+}
+
+\usepackage{filecontents}
+\usepackage{imakeidx}
+\begin{filecontents*}{\jobname.ist}
+ heading_prefix "{\\bfseries "
+ heading_suffix "\\hfil}\\nopagebreak\n"
+ headings_flag 1
+ delim_0 "\\dotfill\\hyperpage{"
+ delim_1 "\\dotfill\\hyperpage{"
+ delim_2 "\\dotfill\\hyperpage{"
+ delim_r "}\\textendash\\hyperpage{"
+ delim_t "}"
+ suffix_2p "\\nohyperpage{\\,f.}"
+ suffix_3p "\\nohyperpage{\\,ff.}"
+\end{filecontents*}
+\indexsetup{othercode=\footnotesize}
+\makeindex[options={-s \jobname.ist},intoc,columns=3,columnsep=1em]
+
+\usepackage[backend=biber,style=alphabetic]{biblatex}
+\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}
+}
+@package{pkg:etoolbox,
+ title = {\paket*{etoolbox}},
+ author = {Philipp Lehman},
+ date = {2011-01-21},
+ version = {2.1},
+ url = {http://mirror.ctan.org/macros/latex/contrib/etoolbox}
+}
+@package{pkg:pgfopts,
+ title = {\paket*{pgfopts}},
+ author = {Joseph Wright},
+ date = {2011-06-02},
+ version = {2.1},
+ url = {http://mirror.ctan.org/macros/latex/contrib/pgfopts}
+}
+@package{pkg:realbookchords,
+ title = {\paket*{realbookchords}},
+ author = {Clemens Niederberger},
+ date = {2013-04-29},
+ version = {0.1},
+ url = {https://bitbucket.org/cgnieder/guitarchordschemes/}
+}
+@package{pkg:tikz,
+ author = {Till Tantau and Mark Wibrow and Christian Feuersänger},
+ title = {Ti\textit{k}Z/pgf},
+ sorttitle = {TikZ},
+ version = {2.10},
+ date = {2010-02-25},
+ url = {http://sourceforge.net/projects/pgf/},
+ urldate = {2013-04-18}
+}
+@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}
+
+
+\let\verb\lstinline
+\makeatletter
+\def\TikZ@logo{Ti\textit{k}Z}
+\renewrobustcmd\TikZ{\TikZ@logo\index{TikZ@\TikZ@logo}}
+\makeatother
+
+\usepackage{ccicons}
+
+\usepackage{acro,accsupp}
+\DeclareAcronym{ctan}{
+ short = ctan ,
+ long = the \textsc{Comprehensive \TeX{} Archive Network} ,
+ short-format = \scshape ,
+ pdfstring = CTAN ,
+ accsupp = CTAN
+}
+\acsetup{first-style=footnote}
+
+\setchordscheme{
+ finger-format+=\biolinumLF ,
+ name-format+=\libertineLF
+}
+
+\TitlePicture{%
+\chordscheme[
+ name = Gmi7 ,
+ position = II ,
+ barre = {2/2-4:3} ,
+ show-root = {4/4} ,
+ root = {2/6:2} ,
+ mute = {1,5}
+]}
+\begin{document}
+
+\section{License and Requirements}
+
+\guitarchordschemes is placed under the terms of the \LaTeX{} Project Public License,
+version 1.3 or later (\url{http://www.latex-project.org/lppl.txt}).
+It has the status “maintained”.
+
+\guitarchordschemes loads the packages \TikZ~\cite{pkg:tikz},
+\paket*{etoolbox}~\cite{pkg:etoolbox} and \paket*{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 \paket*{realbookchords}~\cite{pkg:realbookchords}.
+This package is not yet published on \ac{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 more or less provides a single command:
+\begin{beschreibung}
+ \Befehl{chordscheme}[<options>]
+ \Befehl{scales}[<option>]
+\end{beschreibung}
+These commands set the frame for the chord and scale tablatures and can be used
+to create sheets for manually writing down tablatures:
+\begin{beispiel}
+ \chordscheme
+\end{beispiel}
+
+Similarly \cmd{scales} creates a frame with two more frets:
+\begin{beispiel}[below]
+ \scales
+\end{beispiel}
+
+\subsection{Options for \cmd*{chordscheme}}
+The \oa{options} argument is where the actual details for a chord happen. These
+are the available ones for \cmd{chordscheme}:
+\begin{beschreibung}
+ \Option{name}{<chordsymbol>}\newline
+ Set the chord symbol. This option accepts a list of entries.
+ \Option{position}{<position>}\newline
+ Set the position for the first of the four frets.
+ \Option{finger}{<fret>/<string>:<label>}\newline
+ Specify the finger positions for a chord. This option accepts a list of entries.
+ The \code{:<label>} is optional.
+ \Option{root}{<fret>/<string>:<label>}\newline
+ 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 list of
+ entries. The \code{:<label>} is optional.
+ \Option{show-root}{<fret>/<string>}\newline
+ 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 list of entries.
+ \Option{barre}{<fret>/<string range>:<label>}\newline
+ Specify a barr\'e position for a chord. The \code{<string range>} part must
+ contain a two string numbers separated with a dash. This option accepts a list
+ of entries. The \code{:<label>} is optional.
+ \Option{ring}{<string>}\newline
+ Specify open strings. This option accepts a list of entries.
+ \Option{mute}{<string>}\newline
+ Specify muted/un-played strings This option accepts a list of entries.
+\end{beschreibung}
+
+Let's take a look at a few examples:
+
+\setchordscheme{use-rbc=false}
+\begin{beispiel}
+ \chordscheme[
+ name = G ,
+ position = I ,
+ finger = {2/5:1} ,
+ root = {3/6:2, 3/1:4} ,
+ ring = {2,3,4}
+ ]
+\end{beispiel}
+
+Or a more “jazzy” chord:
+\begin{beispiel}
+ \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{beispiel}
+
+One with a barr\'e:
+
+\begin{beispiel}
+ \chordscheme[
+ name = Gmi\textsuperscript{7} ,
+ position = II ,
+ barre = 2/2-4:3 ,
+ show-root = 4/4 ,
+ root = 2/6:2 ,
+ mute = {1,5}
+ ]
+\end{beispiel}
+
+\subsection{Options for \cmd*{scales}}
+The \oa{options} argument for \cmd{scales} are similar to the ones for
+\cmd{chordscheme}:
+\begin{beschreibung}
+ \Option{name}{<title>}\newline
+ Set a title for the scale.
+ \Option{position}{<position>}\newline
+ Set the position for the first of the six frets.
+ \Option{finger}{<fret>/<string>:<label>}\newline
+ Specify the finger positions for the scale. This option accepts a list of entries.
+ The \code{:<label>} is optional.
+ \Option{root}{<fret>/<string>:<label>}\newline
+ 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 list of
+ entries. The \code{:<label>} is optional.
+ \Option{fret number}{<integer>}\Default{6}
+ The number of frets displayed for a scale. The minimum number is 6.
+ \Option{fingering}{type 1|type 1A|type 2|type 3|type 4}\newline
+ 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 a places the roots correspondingly.
+ \Option{fingering*}{type 1|type 1A|type 2|type 3|type 4}\newline
+ The same as \key{fingering} but not scale is assumed and no roots are
+ indicated.
+ \Option{fingering?}{type 1|type 1A|type 2|type 3|type 4}\newline
+ The same as \key{fingering*} but also no labels for the fingers are given.
+\end{beschreibung}
+
+Let's see an example:
+\begin{beispiel}[below]
+ \scales[
+ name = F-major (Fingering Type~1A) ,
+ position = I ,
+ fingering = type 1A
+ ]
+\end{beispiel}
+
+An example for \key{fingering*}:
+\begin{beispiel}[below]
+ \scales[
+ name = Fingering Type~3 ,
+ fingering* = type 3
+ ]
+\end{beispiel}
+
+Now an example for \key{fingering?}:
+\begin{beispiel}[below]
+ \scales[
+ name = Fingering Type~2 ,
+ fingering? = type 2
+ ]
+\end{beispiel}
+
+At last an example for an explicitly set scale:
+\begin{beispiel}[below]
+ \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{beispiel}
+
+
+\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{beschreibung}
+ \Befehl{setchordscheme}{<options>}
+\end{beschreibung}
+
+Below every option and its corresponding default setting is described.
+\begin{beschreibung}
+ \Option{x-unit}{<dim>}\Default{.8cm}
+ The basic $x$ unit for the \TikZ{} picture the chord scheme is set in.
+ \Option{y-unit}{<dim>}\Default{.8cm}
+ The basic $y$ unit for the \TikZ{} picture the chord scheme is set in.
+ \Option{finger-format}{<TeX code>}\Default{\cmd*{sffamily}\cmd*{small}}
+ The format the numbers for the fingers are typeset with.
+ \Option{finger-format+}{<TeX code>}\Default{}
+ Code to be appended to \key{finger-format}.
+ \Option{position-format}{<TeX code>}\Default{\cmd*{sffamily}}
+ The format the number for the position is typeset with.
+ \Option{position-format+}{<TeX code>}\Default{}
+ Code to be appended to \key{position-format}.
+ \Option{name-format}{<TeX code>}\Default{\cmd*{large}}
+ The format the chord name/symbol is typeset with.
+ \Option{name-format+}{<TeX code>}\Default{}
+ Code to be appended to \key{name-format}.
+ \Option{string-name-format}{<TeX code>}\Default{\cmd*{sffamily}\cmd*{small}}
+ The format the names of the strings are typeset with.
+ \Option{string-name-format+}{<TeX code>}\Default{}
+ Code to be appended to \key{string-name-format}.
+ \Option{line-width}{<dim>}\Default{1pt}
+ The line width used for all lines drawn in the chord scheme.
+ \Option{finger-radius}{<dim>}\Default{.1875}
+ The radius of the circles that represent the fingers in multiples of
+ \key{x-unit}. Also determines the size of the root markers and the barr\'e.
+ \Option{finger-x-offset}{<dim>}\Default{.375}
+ The $x$ offset of the number with respect to the circle in multiples of
+ \key{x-unit}.
+ \Option{finger-y-offset}{<dim>}\Default{.375}
+ The $y$ offset of the number with respect to the circle in multiples of
+ \key{y-unit}.
+ \Option{finger-style}{<tikz style>}\Default{fill}
+ The \TikZ{} style the circles representing the fingers are drawn with.
+ This is equivalent to\linebreak \cmd{tikzset}{finger style/.style=\{<tikz style>\}}.
+ \Option{root-style}{<tikz style>}\Default{fill}
+ The \TikZ{} style the squares representing the roots are drawn with.
+ This is equivalent to\linebreak \cmd{tikzset}{root style/.style=\{<tikz style>\}}.
+ \Option{show-root-style}{<tikz style>}\Default{draw}
+ The \TikZ{} style the squares representing the “ghost roots” are drawn with.
+ This is equivalent to \cmd{tikzset}{show root style/.style=\{<tikz style>\}}.
+ \Option{ringing-style}{<tikz style>}\Default{draw}
+ The \TikZ{} style the circles representing the open string markers are drawn
+ with. This is equivalent to \cmd{tikzset}{ringing style/.style=\{<tikz style>\}}.
+ \Option{muted-style}{<tikz style>}\Default{\{cross out,draw\}}
+ The \TikZ{} style the nodes representing muted strings are drawn with.
+ This is equivalent to \cmd{tikzset}{muted style/.style=\{<tikz style>\}}.
+ \Option{tuning}{<comma list of string names>}\Default{\{E,B,G,D,A,E\}}
+ The tuning.
+ \Option{use-rbc}{\default{true}|false}\Default{false}
+ If set to true the \key{name} will be set in the command \cmd{rbc} from the
+ \paket*{realbookchords}. If this option is not used as a package option
+ then make sure you also load \paket*{realbookchords}~\cite{pkg:realbookchords}.
+ Please be aware that the latter requires \XeLaTeX{} or \LuaLaTeX. See
+ section~\ref{sec:realbookchords} for details.
+\end{beschreibung}
+
+\section{Using \paket*{realbookchords}}\label{sec:realbookchords}
+Setting \cmd{setchordscheme}{use-rbc=true} or using the same as package option
+will set the chord names/symbols in \paket*{realbookchords}' command \cmd{rbc}.
+
+In order to use this option you need to install the \paket*{realbookchords}
+package~\cite{pkg:realbookchords}. I expect it to go to \ac{ctan} eventually but
+until then you can get it at \url{https://bitbucket.org/cgnieder/realbookchords/}.
+The package uses Jochen Pietsch's “New Real Book” font~\cite{web:pietsch:fonts}
+for typesetting the chord symbols which you can get at
+\url{http://notation.jochenpietsch.de/} or from me. I published it here: \url{http://www.niederberger.com.de/gitarren-akkorde-und-skalen-mit-latex}.
+It is placed under the Creative Commons Attribution-Noncommercial-Share Alike~3.0
+Unported License \ccbyncsaeu.
+
+\paket*{realbookchords} requires that you compile your document with \XeLaTeX{}
+or \LuaLaTeX.
+
+Here is an example of how the chord symbol looks with \paket*{realbookchords}:
+\begin{beispiel}
+ \setchordscheme{use-rbc=true}
+ \chordscheme[
+ name = Gmi7(\b5) ,
+ position = II ,
+ finger = {1/2:1, 2/3:4, 2/4:3} ,
+ show-root = {4/4} ,
+ root = {2/6:2} ,
+ mute = {1,5}
+ ]
+\end{beispiel}
+
+\printbibliography
+
+\printindex
+
+\end{document}
diff --git a/Master/texmf-dist/tex/latex/guitarchordschemes/guitarchordschemes.sty b/Master/texmf-dist/tex/latex/guitarchordschemes/guitarchordschemes.sty
new file mode 100644
index 00000000000..8e6f9e75a61
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/guitarchordschemes/guitarchordschemes.sty
@@ -0,0 +1,594 @@
+% --------------------------------------------------------------------------
+% 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 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.
+% --------------------------------------------------------------------------
+%
+% package info and requirements:
+\NeedsTeXFormat{LaTeX2e}
+\def\gcs@date{2013/08/25}
+\def\gcs@version{v0.4}
+\def\gcs@description{Guitar Chord and Scale Tablatures with TikZ (CN)}
+
+\ProvidesPackage{guitarchordschemes}[\gcs@date\space \gcs@version\space \gcs@description]
+
+\RequirePackage{tikz,etoolbox,pgfopts}
+\usetikzlibrary{shapes.misc,arrows,calc}
+% --------------------------------------------------------------------------
+% message handling
+\def\gcs@create@message#1{%
+ \ifstrequal{#1}{Error}
+ {%
+ \lowercase{\csdef{gcs@#1}}##1##2{%
+ \csuse{Package#1}{guitarchordschemes}{##1}{##2}}%
+ }{%
+ \lowercase{\csdef{gcs@#1}}##1{%
+ \csuse{Package#1}{guitarchordschemes}{##1}}%
+ }}
+\gcs@create@message{Error}
+\gcs@create@message{Warning}
+\gcs@create@message{WarningNoLine}
+\gcs@create@message{Info}
+
+\def\gcs@missing@date@error#1#2{%
+ \gcs@error
+ {#1: empty #2}
+ {#1: It seems you didn't specify the #2}%
+}
+
+\def\gcs@cs@new{\protected\def}
+
+% --------------------------------------------------------------------------
+% package options and setup:
+\newbool{gcs@rbc}
+
+\def\gcs@finger@font{\sffamily\small}
+\def\gcs@position@font{\sffamily}
+\def\gcs@name@font{\large}
+\def\gcs@string@name@format{\sffamily\small}
+
+\def\gcs@x@unit{.8cm}
+\def\gcs@y@unit{.8cm}
+\def\gcs@line@width{1pt}
+\def\gcs@finger@radius{.1875}
+\def\gcs@finger@x@offset{.375}
+\def\gcs@finger@y@offset{.275}
+
+\pgfkeys{
+ guitarchordschemes/.cd ,
+ x-unit/.code = \def\gcs@x@unit{#1} ,
+ y-unit/.code = \def\gcs@y@unit{#1} ,
+ finger-format/.code = \def\gcs@finger@font{#1} ,
+ finger-format+/.code =
+ \expandafter\def\expandafter\gcs@finger@font
+ \expandafter{\gcs@finger@font#1} ,
+ position-format/.code = \def\gcs@position@font{#1} ,
+ position-format+/.code =
+ \expandafter\def\expandafter\gcs@position@font
+ \expandafter{\gcs@position@font#1} ,
+ name-format/.code = \def\gcs@name@font{#1} ,
+ name-format+/.code =
+ \expandafter\def\expandafter\gcs@name@font
+ \expandafter{\gcs@name@font#1} ,
+ string-name-format/.code = \def\gcs@string@name@format{#1} ,
+ string-name-format+/.code =
+ \expandafter\def\expandafter\gcs@string@name@format
+ \expandafter{\gcs@string@name@format#1} ,
+ line-width/.code = \def\gcs@line@width{#1} ,
+ finger-radius/.code = \def\gcs@finger@radius{#1} ,
+ finger-x-offset/.code = \def\gcs@finger@x@offset{#1} ,
+ finger-y-offset/.code = \def\gcs@finger@y@offset{#1} ,
+ finger-style/.code = \tikzset{finger style/.style={#1}} ,
+ root-style/.code = \tikzset{root style/.style={#1}} ,
+ show-root-style/.code = \tikzset{show root style/.style={#1}} , ,
+ ringing-style/.code = \tikzset{ringing style/.style={#1}} ,
+ muted-style/.code = \tikzset{muted style/.style={#1}} ,
+ tuning/.code = \gcs@chord@tuning{#1} ,
+ use-rbc/.is if = gcs@rbc
+}
+
+% the setup command:
+\newrobustcmd*\setchordscheme[1]{\pgfqkeys{/guitarchordschemes}{#1}}
+
+\newcounter{gcs@string@number}
+\newcommand\gcs@chord@tuning[1]{%
+ \setcounter{gcs@string@number}{0}%
+ \foreach \string@name in {#1}
+ {%
+ \stepcounter{gcs@string@number}%
+ \csxdef{guitar@string@\arabic{gcs@string@number}}{\expandonce\string@name}%
+ }%
+}
+
+% some defaults - need to be set before options are processed:
+\setchordscheme{
+ tuning = {E,B,G,D,A,E} ,
+ muted-style = {cross out,draw} ,
+ root-style = {fill} ,
+ show-root-style = {draw} ,
+ ringing-style = {draw} ,
+ finger-style = {fill}
+}
+
+\ProcessPgfOptions*
+
+% --------------------------------------------------------------------------
+% are we using `realbookchords'?
+\ifbool{gcs@rbc}{\RequirePackage{realbookchords}}{}
+
+% --------------------------------------------------------------------------
+% settings for the whole scheme:
+\tikzset{
+ gcs/finger/.style =
+ {
+ xshift = \gcs@finger@x@offset*\gcs@x@unit ,
+ yshift = \gcs@finger@y@offset*\gcs@y@unit ,
+ font = \gcs@finger@font
+ }
+}
+
+% setting a chord scheme:
+\pgfkeys{
+ gcs/chord/.cd ,
+ name/.code = \gcs@chord@name{#1} ,
+ position/.code = \def\gcs@chord@position{#1} ,
+ finger/.code = \gcs@chord@finger{#1} ,
+ root/.code = \gcs@chord@root{#1} ,
+ show-root/.code = \gcs@chord@show@root{#1} ,
+ mute/.code = \gcs@chord@mute{#1} ,
+ ring/.code = \gcs@chord@ring{#1} ,
+ barre/.code = \gcs@chord@barre{#1}
+}
+
+% setting a scale:
+\pgfkeys{
+ gcs/scales/.cd ,
+ name/.code = \gcs@scales@name{#1} ,
+ position/.code = \def\gcs@scales@position{#1} ,
+ finger/.code = \gcs@scales@finger{#1} ,
+ root/.code = \gcs@scales@root{#1} ,
+ fret number/.code =
+ \ifnumless{#1}{6}
+ {%
+ \gcs@warning{You cannot use less than 6 frets for a scale!}%
+ \def\gcs@scales@fret@number{6}%
+ }
+ {\def\gcs@scales@fret@number{#1}} ,
+ fingering/.is choice ,
+ fingering/type 1/.code =
+ \gcs@scales@finger{%
+ 1/1:1s, 3/1:2, 5/1:4,
+ 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3,
+ 2/4:1, 3/4:2, 5/4:4,
+ 2/5:1, 5/5:4,
+ 1/6:1s, 3/6:2, 5/6:4
+ }%
+ \gcs@scales@root{5/3:4, 3/5:2} ,
+ fingering/type 1A/.code =
+ \gcs@scales@finger{%
+ 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
+ }%
+ \gcs@scales@root{1/1:1s, 3/4:2, 1/6:1s} ,
+ fingering/type 2/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 5/1:4,
+ 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3, 5/3:4,
+ 2/4:1, 4/4:3,
+ 2/5:1, 3/5:2, 5/5:4,
+ 2/6:1, 5/6:4
+ }%
+ \gcs@scales@root{3/1:2, 5/4:4, 3/6:2},
+ fingering/type 3/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 3/1:2, 5/1:4,
+ 2/2:1, 5/2:4,
+ 2/3:1, 4/3:3,
+ 2/4:1, 4/4:3, 5/4:4,
+ 2/5:1, 4/5:3,
+ 2/6:1, 3/6:2, 5/6:4
+ }%
+ \gcs@scales@root{3/2:2, 5/5:4},
+ fingering/type 4/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 4/1:3,
+ 2/2:1, 3/2:2, 5/2:4,
+ 4/3:3,
+ 2/4:1, 4/4:3, 6/4:4s,
+ 2/5:1, 4/5:3, 5/5:4,
+ 2/6:1, 4/6:3
+ }%
+ \gcs@scales@root{5/1:4, 2/3:1, 5/6:4},
+ fingering*/.is choice ,
+ fingering*/type 1/.code =
+ \gcs@scales@finger{%
+ 1/1:1s, 3/1:2, 5/1:4,
+ 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3, 5/3:4,
+ 2/4:1, 3/4:2, 5/4:4,
+ 2/5:1, 3/5:2, 5/5:4,
+ 1/6:1s, 3/6:2, 5/6:4
+ } ,
+ fingering*/type 1A/.code =
+ \gcs@scales@finger{%
+ 1/1:1s, 3/1:2, 5/1:4,
+ 3/2:2, 5/2:4,
+ 2/3:1, 3/3:2, 5/3:4,
+ 2/4:1, 3/4:2, 5/4:4,
+ 1/5:1s, 3/5:2, 5/5:4,
+ 1/6:1s, 3/6:2, 5/6:4
+ } ,
+ fingering*/type 2/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 3/1:2, 5/1:4,
+ 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3, 5/3:4,
+ 2/4:1, 4/4:3, 5/4:4,
+ 2/5:1, 3/5:2, 5/5:4,
+ 2/6:1, 3/6:2, 5/6:4
+ } ,
+ fingering*/type 3/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 3/1:2, 5/1:4,
+ 2/2:1, 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3,
+ 2/4:1, 4/4:3, 5/4:4,
+ 2/5:1, 4/5:3, 5/5:4,
+ 2/6:1, 3/6:2, 5/6:4
+ } ,
+ fingering*/type 4/.code =
+ \gcs@scales@finger{%
+ 2/1:1, 4/1:3, 5/1:4,
+ 2/2:1, 3/2:2, 5/2:4,
+ 2/3:1, 4/3:3,
+ 2/4:1, 4/4:3, 6/4:4s,
+ 2/5:1, 4/5:3, 5/5:4,
+ 2/6:1, 4/6:3, 5/6:4
+ },
+ fingering?/.is choice ,
+ fingering?/type 1/.code =
+ \gcs@scales@finger{%
+ 1/1, 3/1, 5/1,
+ 3/2, 5/2,
+ 2/3, 4/3, 5/3,
+ 2/4, 3/4, 5/4,
+ 2/5, 3/5, 5/5,
+ 1/6, 3/6, 5/6
+ } ,
+ fingering?/type 1A/.code =
+ \gcs@scales@finger{%
+ 1/1, 3/1, 5/1,
+ 3/2, 5/2,
+ 2/3, 3/3, 5/3,
+ 2/4, 3/4, 5/4,
+ 1/5, 3/5, 5/5,
+ 1/6, 3/6, 5/6
+ } ,
+ fingering?/type 2/.code =
+ \gcs@scales@finger{%
+ 2/1, 3/1, 5/1,
+ 3/2, 5/2,
+ 2/3, 4/3, 5/3,
+ 2/4, 4/4, 5/4,
+ 2/5, 3/5, 5/5,
+ 2/6, 3/6, 5/6
+ } ,
+ fingering?/type 3/.code =
+ \gcs@scales@finger{%
+ 2/1, 3/1, 5/1,
+ 2/2, 3/2, 5/2,
+ 2/3, 4/3,
+ 2/4, 4/4, 5/4,
+ 2/5, 4/5, 5/5,
+ 2/6, 3/6, 5/6
+ } ,
+ fingering?/type 4/.code =
+ \gcs@scales@finger{%
+ 2/1, 4/1, 5/1,
+ 2/2, 3/2, 5/2,
+ 2/3, 4/3,
+ 2/4, 4/4, 6/4,
+ 2/5, 4/5, 5/5,
+ 2/6, 4/6, 5/6
+ }
+}
+
+% --------------------------------------------------------------------------
+% the internal commands
+
+% placing fingers:
+% <fret>/<string>:<finger>
+\gcs@cs@new\gcs@chord@finger#1{%
+ \foreach \gcs@finger@spec in {#1}
+ {
+ \expandafter\gcs@get@finger@data\gcs@finger@spec::\q@stop
+ \ifdefvoid\finger@x
+ {\gcs@missing@date@error{finger}{position}}
+ {
+ \pgfmathsetmacro\finger@fret{1.5*\finger@x-0.75}
+ \ifdefvoid\finger@y
+ {\gcs@missing@date@error{finger}{string}}
+ {
+ \pgfmathsetmacro\finger@string{(6-\finger@y)*4/5}
+ \draw[finger style]
+ (\finger@fret,\finger@string) circle (\gcs@finger@radius*\gcs@x@unit) ;
+ \node[gcs/finger] at (\finger@fret,\finger@string) {\finger@number} ;
+ }
+ }
+ }
+}
+\let\gcs@scales@finger\gcs@chord@finger
+
+\gcs@cs@new\gcs@get@finger@data#1/#2:#3:#4\q@stop{%
+ \def\finger@x{#1}%
+ \def\finger@y{#2}%
+ \def\finger@number{#3}%
+}
+
+% placing a barre:
+% <fret>/<string>-<string>:<finger>
+\gcs@cs@new\gcs@chord@barre#1{%
+ \foreach \gcs@barre@spec in {#1}
+ {
+ \expandafter\gcs@get@barre@data\gcs@barre@spec::\q@stop
+ \ifdefvoid\barre@x
+ {\gcs@missing@date@error{barre}{position}}
+ {\pgfmathsetmacro\barre@fret{1.5*\barre@x-0.75}}
+ \ifdefvoid\barre@fromto
+ {\gcs@missing@date@error{barre}{string range}}
+ {
+ \expandafter\gcs@barre@getstrings\barre@fromto--\q@stop
+ \pgfmathsetmacro\barre@lower@string{(6-\barre@lower@y)*4/5}
+ \pgfmathsetmacro\barre@upper@string{(6-\barre@upper@y)*4/5}
+ \draw[finger style,round cap-round cap,line width=2*\gcs@finger@radius*\gcs@x@unit]
+ (\barre@fret,\barre@lower@string) node[gcs/finger] {\barre@finger}
+ ++ (0,\gcs@finger@radius*\gcs@x@unit)
+ --
+ ($(\barre@fret,\barre@upper@string)+(0,-\gcs@finger@radius*\gcs@x@unit)$)
+ ;
+ }
+ }
+}
+
+\gcs@cs@new\gcs@get@barre@data#1/#2:#3:#4\q@stop{%
+ \def\barre@x{#1}%
+ \def\barre@fromto{#2}%
+ \def\barre@finger{#3}%
+}
+
+\gcs@cs@new\gcs@barre@getstrings#1-#2-#3\q@stop{%
+ \ifx#3-\relax
+ \def\barre@lower@y{#1}%
+ \def\barre@upper@y{#2}%
+ \else
+ \gcs@error
+ {barre: wrong string range syntax}
+ {barre: wrong string range syntax}%
+ \fi
+}
+
+% placing root fingers:
+% <fret>/<string>:<finger>
+\gcs@cs@new\gcs@chord@root#1{%
+ \foreach \gcs@finger@spec in {#1}
+ {
+ \expandafter\gcs@get@finger@data\gcs@finger@spec::\q@stop
+ \ifdefvoid\finger@x
+ {\gcs@missing@date@error{root}{position}}
+ {
+ \pgfmathsetmacro\finger@fret{1.5*\finger@x-0.75}
+ \ifdefvoid\finger@y
+ {\gcs@missing@date@error{root}{string}}
+ {
+ \pgfmathsetmacro\finger@string{(6-\finger@y)*4/5}
+ \node[minimum size=2*\gcs@finger@radius*\gcs@x@unit,root style]
+ at (\finger@fret,\finger@string) {} ;
+ \node[gcs/finger] at (\finger@fret,\finger@string) {\finger@number} ;
+ }
+ }
+ }
+}
+\let\gcs@scales@root\gcs@chord@root
+
+% placing ghost roots:
+% <fret>/<string>
+\gcs@cs@new\gcs@chord@show@root#1{%
+ \foreach \gcs@finger@spec in {#1}
+ {
+ \expandafter\gcs@get@finger@data\gcs@finger@spec::\q@stop
+ \ifdefvoid\finger@x
+ {\gcs@missing@date@error{show-root}{position}}
+ {
+ \pgfmathsetmacro\finger@fret{1.5*\finger@x-0.75}
+ \ifdefvoid\finger@x
+ {\gcs@missing@date@error{show-root}{string}}
+ {
+ \pgfmathsetmacro\finger@string{(6-\finger@y)*4/5}
+ \node[minimum size=2*\gcs@finger@radius*\gcs@x@unit,show root style]
+ at (\finger@fret,\finger@string) {} ;
+ }
+ }
+ }
+}
+
+% muted strings:
+\gcs@cs@new\gcs@chord@mute#1{%
+ \foreach \muted@string in {#1}
+ {
+ \pgfmathsetmacro\muted@string@pos{(6-\muted@string)*4/5}
+ \node[muted style] at (0,\muted@string@pos) {} ;
+ }
+}
+
+% ringing strings:
+\gcs@cs@new\gcs@chord@ring#1{%
+ \foreach \ringing@string in {#1}
+ {
+ \pgfmathsetmacro\ringing@string@pos{(6-\ringing@string)*4/5}
+ \draw[ringing style]
+ (0,\ringing@string@pos) circle (\gcs@finger@radius*\gcs@x@unit) ;
+ }
+}
+
+% the chord name:
+\gcs@cs@new\gcs@chord@name#1{%
+ \node[above,yshift=4ex] at (3,4) {%
+ \foreach \gcs@chord@name@variant in {#1}
+ {%
+ \gcs@name@font
+ \space
+ \ifbool{gcs@rbc}
+ {\expandafter\rbc\expandafter{\gcs@chord@name@variant}}
+ {\gcs@chord@name@variant}%
+ \space
+ }%
+ } ;
+}
+
+% the scale name:
+\gcs@cs@new\gcs@scales@name#1{%
+ \node[above,yshift=4ex] at (4.5,4) {%
+ \foreach \gcs@scales@name@variant in {#1}
+ {%
+ \gcs@name@font
+ \space
+ \gcs@scales@name@variant
+ \space
+ }%
+ } ;
+}
+
+% --------------------------------------------------------------------------
+% the chord scheme command:
+\gcs@cs@new\gcs@chordscheme#1{%
+\begingroup
+\begin{tikzpicture}[
+ x=\gcs@x@unit,
+ y=\gcs@y@unit,
+ line width=\gcs@line@width,
+ baseline=(6thstring)
+ ]
+ \coordinate (6thstring) at (0,0) ;
+ \foreach \fret in { 0,1.5,3,4.5,6 }
+ { \draw (\fret,0) -- (\fret,4) ; }
+ \foreach \string@pos/\string@number in
+ { 0/6, 0.8/5, 1.6/4, 2.4/3, 3.2/2, 4/1, 0 }
+ {
+ \draw (0,\string@pos) node[left,minimum width=2em]
+ {\gcs@string@name@format\csuse{guitar@string@\string@number}} -- (6,\string@pos) ;
+ }
+ \pgfqkeys{/gcs/chord}{#1}%
+ \ifdefvoid\gcs@chord@position
+ {}
+ {\node[above,yshift=1ex,font=\gcs@position@font] at (.75,4) {\gcs@chord@position} ;}
+\end{tikzpicture}
+\endgroup
+}
+
+% --------------------------------------------------------------------------
+% the scalescommand:
+\def\gcs@scales@fret@number{6}
+
+\gcs@cs@new\gcs@scales#1{%
+ \begingroup
+ \begin{tikzpicture}[
+ x=\gcs@x@unit,
+ y=\gcs@y@unit,
+ line width=\gcs@line@width,
+ baseline=(6thstring)
+ ]
+ \pgfqkeys{/gcs/scales}{#1}%
+ \coordinate (6thstring) at (0,0) ;
+ \foreach \fret in { 0,1,...,\gcs@scales@fret@number }
+ { \draw (1.5*\fret,0) -- (1.5*\fret,4) ; }
+ \foreach \string@pos/\string@number in
+ { 0/6, 0.8/5, 1.6/4, 2.4/3, 3.2/2, 4/1, 0 }
+ {
+ \draw (0,\string@pos) node[left,minimum width=2em]
+ {\gcs@string@name@format\csuse{guitar@string@\string@number}}
+ -- (1.5*\gcs@scales@fret@number,\string@pos) ;
+ }
+ \ifdefvoid\gcs@scales@position
+ {}
+ {%
+ \node[above,yshift=1ex,font=\gcs@position@font] at (.75,4)
+ {\gcs@scales@position} ;
+ }
+ \end{tikzpicture}
+ \endgroup
+}
+
+% --------------------------------------------------------------------------
+% the user commands:
+\newrobustcmd*\chordscheme[1][]{\gcs@chordscheme{#1}}
+
+\newrobustcmd*\scales[1][]{\gcs@scales{#1}}
+
+% --------------------------------------------------------------------------
+% the symbols for use outside of a scheme:
+\newrobustcmd*\fingersymbol{%
+ \tikz\draw[finger style] (0,0) circle (\gcs@finger@radius*\gcs@x@unit);}
+
+\newrobustcmd*\rootsymbol{%
+ \tikz\node[root style,minimum size=2*\gcs@finger@radius*\gcs@x@unit] at (0,0) {} ;}
+
+\newrobustcmd*\showrootsymbol{%
+ \tikz\node[
+ show root style,
+ minimum size=2*\gcs@finger@radius*\gcs@x@unit,
+ line width=\gcs@line@width] at (0,0) {} ;}
+
+\newrobustcmd*\ringingstring{%
+ \tikz\draw[
+ ringing style,
+ line width=\gcs@line@width] (0,0) circle (\gcs@finger@radius*\gcs@x@unit);}
+
+\newrobustcmd*\mutedstring{%
+ \tikz\node[
+ muted style,
+ line width=\gcs@line@width] at (0,0) {};}
+
+\endinput
+% --------------------------------------------------------------------------
+% HISTORY
+2013/04/28 v0.1 - first version
+2013/04/29 v0.1a - added error handling and messages
+2013/04/30 v0.2 - it's stupid to set colors explicitly -- better define TikZ
+ styles for this
+2013/05/01 v0.3 - added \scales command
+2013/05/01 v0.3a - set all lengths as multiples of the base unit
+2013/08/25 v0.4 - added scale option that allows variable number of frets