summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/gchords
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-02-12 00:03:25 +0000
committerKarl Berry <karl@freefriends.org>2009-02-12 00:03:25 +0000
commitacb9a71c893816044a81194578f8f1754ce8dc17 (patch)
tree058e9c3840625694ce10903bd744760e5b068f6a /Master/texmf-dist/tex/latex/gchords
parent4d2a3e89c58e5ada3e1792f609aa53931e26289e (diff)
new (old) latex package gchords
git-svn-id: svn://tug.org/texlive/trunk@12144 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/gchords')
-rw-r--r--Master/texmf-dist/tex/latex/gchords/gchords.sty281
1 files changed, 281 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/gchords/gchords.sty b/Master/texmf-dist/tex/latex/gchords/gchords.sty
new file mode 100644
index 00000000000..b19655610b1
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gchords/gchords.sty
@@ -0,0 +1,281 @@
+%
+% GCHORDS, a LaTeX2e package to draw guitar chord diagrams.
+%
+% $Id: gchords.sty,v 1.20 2009/02/04 20:25:59 peekas Exp $
+%
+% Copyright (C) 2001-2009 Kasper Peeters <kasper.peeters@aei.mpg.de>
+% Available under the GNU General Public License.
+%
+% - minor additions by D. R. Lovell, 05-nov-1998
+% - bug fixes by Yotam Medini <yotam_medini@yahoo.com>, 11-aug-2001
+% - bug fix by Brent Lievers, 23-sep-2002
+% - minor additions by P. Margarita, 14-aug-2003
+% - bug fix with f0 (thumb), thanks to Andreas Griewank, 15-jan-2005
+% - added optional open string marker, 3-feb-2008
+%
+% See ChangeLog for a list of changes.
+%
+% The homepage for this macro package is
+%
+% http://www.aei.mpg.de/~peekas/gchords/
+%
+%-------------------------------------------------------------------------
+% Variable, user definable stuff is below.
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gchords}
+
+% Your guitar
+\newcommand\strings{6} % number of strings on your guitar
+\newcommand\numfrets{5} % length (no of frets) of a diagram
+
+% These should be modified if you want chords in a different size
+\newcommand\mediumchords{
+\def\chordsize{3.0mm} % distance between two frets (and two strings)
+\font\fingerfont=cmr5 % font used for numbering fingers
+\font\namefont=cmr10 % font used for labeling of the chord
+\font\fretposfont=cmr7 % font used for the fret position marker
+\def\dampsymbol{$\scriptstyle\times$} % symbol of the `damp this % string' marker
+\def\opensymbol{$\scriptstyle\circ$} % symbol of the `open string' marker
+}
+\newcommand\smallchords{
+\def\chordsize{2.0mm} % distance between two frets (and two strings)
+\font\fingerfont=cmr5 % font used for numbering fingers
+\font\namefont=cmr10 % font used for labeling of the chord
+\font\fretposfont=cmr7 % font used for the fret position marker
+\def\dampsymbol{$\scriptstyle\times$} % symbol of the `damp this string' marker
+\def\opensymbol{$\scriptstyle\circ$} % symbol of the `open string' marker
+}
+
+\smallchords
+
+% Dot and line sizes (which scale with the chordsize macro)
+
+\newcommand\fatsiz{1.6} % size of a fat note
+% Changed by Margarita
+%\newcommand\lenbar{2.0} % lenght of sixth part of barré
+\newcommand\normalsiz{1.2} % size of a normal note
+\newcommand\fingsiz{1.4} % size of the circle around a numbered finger
+\newcommand\fatfingsiz{1.8} % size of the circle around a numbered finger
+\newcommand\topfretsiz{2.0pt} % thickness of top fret
+
+% Position of the chord in its bounding box
+\newcommand\xoff{2} % pos(\xoff,\yoff) is left lower corner of diagram
+\newcommand\yoff{2}
+
+%-------------------------------------------------------------------------
+\def\@forc#1#2#3{\expandafter\f@rc\expandafter#1{#2 K}{#3}}
+\def\f@@rc#1#2#3\f@@rc#4{\def#1{#2}#4\f@rc#1{#3}{#4}}
+
+% Chords above lyrics, macro by Yotam Medini.
+\newlength{\cwidth}%
+\newcommand{\upchord}[1]{%
+ \settowidth{\cwidth}{#1}%
+ \raisebox{\baselineskip}{#1}\hspace{-\cwidth}}
+
+% The chord typesetting macros.
+\makeatletter
+\newcommand\basenote{\circle*{\fatsiz}}
+% Changed by Margarita
+% \newcommand\basenote{\line(1,0){\lenbar}}
+\newcommand\stdnote{\circle*{\normalsiz}}
+\newcommand\fingnote{\circle{\fingsiz}}
+\newcommand\fatfingnote{\circle{\fatfingsiz}}
+\newcommand\cvline{\line(0,1)}
+\newcommand\chline{\line(1,0)}
+
+\newcommand\chords[1]{$$\hbox{#1}$$}
+\newcommand\chtext[1]{\vbox{\settowidth{\hsize}{#1 xxxx} {#1
+ \ascale=\chordsize\vskip8\ascale}}}
+
+% #1 modifiers (like num, or fretbar0)
+% #2 positions
+% #3 chordname
+
+\newcount\truewidth % the true width of the diagram, computed from strings
+\newcount\topline
+\newcount\myvpos
+\newcount\mylength
+\def\fnum{ } % current f{...} symbol (number of finger)
+\newcount\fpos % current p{...} value
+\newcount\ghor % string number currently being drawn
+\newcount\prevpos % previous value of p{...}, zero if no previous dot on string
+\newcount\dlen % length of the vertical line to draw between dots
+\newcount\cpos % scratch variable to hold vertical position of dot
+\newcount\stpos
+\newdimen\needsize
+\newdimen\ascale
+
+\newcommand\chord[3]{\vbox{\hbox{\ascale=\chordsize
+\truewidth=\strings\advance\truewidth by -1
+\advance\truewidth by \xoff
+\topline=\numfrets
+\advance\topline by \yoff
+\advance\topline by 2
+
+%%% The Diagram itself %%%%%%%%%
+\unitlength\ascale
+\begin{picture}(\truewidth,\topline)
+\advance\topline by -1
+\advance\truewidth by -\xoff
+\myvpos=\yoff\advance\myvpos by \numfrets
+%%% Parse the modifier string %%
+\newcommand\topbar{n}
+\@tfor\modstr:=#1\do
+ { \def\ttest{t}%
+ \ifx\modstr\ttest{\linethickness{\topfretsiz}\put(\xoff,\myvpos){\chline{\truewidth}}\thinlines}%
+ \else {\advance\topline by -1%
+ \put(\xoff,\topline){\hbox to 0pt{\hss\fretposfont\modstr~}}%
+ }%
+ \fi%
+ }
+% \@tfor\modstr:=#1\do
+% { \if\modstr t{\thicklines\put(\xoff,\myvpos){\chline{\truewidth}}\thinlines}%
+% \else {\advance\topline by -2%
+% \put(\xoff,\topline){\hbox to 0pt{\hss\fretposfont\modstr\ }}%
+% }%
+% \fi%
+% }
+
+%%% Horizontal lines (frets)%%%%
+\mylength=0
+\myvpos=\yoff
+\advance\myvpos by 1 % first fret starts a bit higher
+\@whilenum \mylength<\numfrets \do {
+ \put(\xoff,\myvpos){\chline{\truewidth}}
+ \advance\mylength by 1
+ \advance\myvpos by 1}
+
+%%% The Dots %%%%%%%%%%%%%%%%%%%
+\newcommand\fnow{n}
+\newcommand\pnow{n}
+\newcommand\snow{n}
+\newcommand\Lnow{n}
+
+\edef\notelabel{}
+
+\putdots{#2}{\chordsize}
+\put(\xoff,0){\hbox to \truewidth\ascale{\hss\namefont #3\hss}}
+\end{picture}
+}}}
+
+
+\long\def\ReturnAfterFi#1\fi{\fi#1}
+ \def\f@rc#1#2#3{%
+ \def\temp@ty{#2}%
+ \ifx\@empty\temp@ty
+ \else
+ \ReturnAfterFi{%
+ \f@@rc#1#2\f@@rc{#3}%
+ }%
+ \fi
+ }%
+
+\newcommand{\putdots}[2]{
+ \prevpos=0
+ \fpos=0
+ \ghor=\xoff
+ \let\curnote\stdnote
+ \let\curfing\fingnote
+ \def\Ktest{K}\def\cotest{,}\def\btest{b}\def\ftest{f}
+ \def\stest{s}\def\ptest{p}\def\xtest{x}\def\otest{o}\def\etest{e}\def\ntest{n}\def\Ltest{t}
+ \def\attest{ }
+ \@forc\thisel{#1}{
+ \ifx\thisel\Ktest{}
+ \else\ifx\thisel\cotest\cpos=-\fpos\advance\cpos by \numfrets\advance\cpos by \yoff
+ \dlen=\cpos
+ \advance\dlen by -\yoff
+ \put(\ghor,\yoff){\cvline{\dlen}}
+ \prevpos=0
+ \fpos=0
+ \def\fnum{ }
+ \renewcommand\pnow{n}
+ \renewcommand\fnow{n}
+ \renewcommand\snow{n}
+ \renewcommand\Lnow{n}
+ \advance\ghor by 1
+ \else\if\fnow y \edef\fnum{\thisel}\renewcommand\fnow{n}
+ \else\ifx\thisel\btest\let\curnote\basenote\let\curfing\fatfingnote
+ \else\ifx\thisel\ftest\renewcommand\snow{n}\renewcommand\pnow{n}\renewcommand\fnow{y}\renewcommand\Lnow{n}
+ \else\ifx\thisel\stest\renewcommand\snow{y}\renewcommand\pnow{n}\renewcommand\fnow{n}\renewcommand\Lnow{n}
+ \else\ifx\thisel\ptest\renewcommand\snow{n}\renewcommand\pnow{y}\renewcommand\fnow{n}\renewcommand\Lnow{n}
+ \else\ifx\thisel\Ltest\renewcommand\snow{n}\renewcommand\pnow{n}\renewcommand\fnow{n}\renewcommand\Lnow{y}
+ \else\ifx\thisel\xtest{\put(\ghor,\yoff){\cvline{\numfrets}}
+ \needsize=\ascale
+ \divide\needsize by 2
+ \unitlength\needsize
+ \multiply\ghor by 2
+ \multiply\topline by 2
+ \advance\topline by -1
+ \put(\ghor,\topline){\hbox to 0pt{\hss{\dampsymbol}\hss}}}
+ \else\ifx\thisel\otest{\put(\ghor,\yoff){\cvline{\numfrets}}
+ \needsize=\ascale
+ \divide\needsize by 2
+ \unitlength\needsize
+ \multiply\ghor by 2
+ \multiply\topline by 2
+ \advance\topline by -1
+ \put(\ghor,\topline){\hbox to 0pt{\hss{\opensymbol}\hss}}}
+ \else\ifx\thisel\ntest\put(\ghor,\yoff){\cvline{\numfrets}}
+ {\needsize=\ascale
+ \divide\needsize by 2
+ \unitlength\needsize
+ \multiply\ghor by 2
+ \multiply\topline by 2
+ \advance\topline by -1
+ \put(\ghor,\topline){\hbox to 0pt{\hss{\notelabel}\hss}}}
+ \edef\notelabel{}
+ \else\if\snow y \ghor=\thisel\advance\ghor by \xoff \advance\ghor by -1
+ \else\if\Lnow y \edef\notelabel{\thisel}\renewcommand\Lnow{n}
+ \else\prevpos=\fpos\advance\prevpos by -1
+ \fpos=\thisel
+ \ifx\fnum\attest
+ \put(\ghor,\yoff){\cvline{\numfrets}}
+ \else
+ \cpos=\fpos\advance\cpos by -1
+ \ifnum\cpos > \prevpos
+ \dlen=\fpos\advance\dlen by -\prevpos
+ \advance\dlen by -2
+ \stpos=\topline \advance\stpos by -\fpos
+ \put(\ghor,\stpos){\cvline{\dlen}}
+ \fi
+ \fi
+ \cpos=-\fpos\advance\cpos by \numfrets\advance\cpos by \yoff
+ {\needsize=\ascale
+ \divide\needsize by 2
+ \unitlength\needsize
+ \multiply\ghor by 2
+ \multiply\cpos by 2
+ \advance\cpos by 1
+ \ifx\fnum\attest
+ % Line added by Margarita
+% \linethickness{2.0pt}
+ \put(\ghor,\cpos){\curnote}
+ \else
+ \put(\ghor,\cpos){\curfing}
+ \put(\ghor,\cpos){$\vcenter{\vskip 0.5em\vbox{\hbox to 0pt{\hss{\fingerfont\fnum}\hss}}}$}
+ \fi}
+ {\needsize=\ascale
+ \divide\needsize by 2
+ \unitlength\needsize
+ \multiply\ghor by 2
+ \multiply\topline by 2
+ \advance\topline by -1
+ \put(\ghor,\topline){\hbox to 0pt{\hss{\notelabel}\hss}}}
+ \let\curnote\stdnote
+ \let\curfing\fingnote
+ \edef\notelabel{}
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi % one for each in the 'select' loop
+ } % end forc loop
+ \ifnum\cpos > \yoff % draw the last bit of vertical line
+ \dlen=\cpos
+ \advance\dlen by -\yoff
+ \put(\ghor,\yoff){\cvline{\dlen}}
+ \fi
+}
+
+\makeatother
+
+% That's all folks!
+%-------------------------------------------------------------------------