diff options
author | Karl Berry <karl@freefriends.org> | 2009-02-12 00:03:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-02-12 00:03:25 +0000 |
commit | acb9a71c893816044a81194578f8f1754ce8dc17 (patch) | |
tree | 058e9c3840625694ce10903bd744760e5b068f6a /Master/texmf-dist/tex/latex | |
parent | 4d2a3e89c58e5ada3e1792f609aa53931e26289e (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')
-rw-r--r-- | Master/texmf-dist/tex/latex/gchords/gchords.sty | 281 |
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! +%------------------------------------------------------------------------- |