summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/songbook/contrib
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/songbook/contrib
Initial commit
Diffstat (limited to 'macros/latex/contrib/songbook/contrib')
-rw-r--r--macros/latex/contrib/songbook/contrib/CarolBook/CarolBook.tex223
-rw-r--r--macros/latex/contrib/songbook/contrib/CarolBook/CarolBookOH.pdfbin0 -> 115606 bytes
-rw-r--r--macros/latex/contrib/songbook/contrib/CarolBook/CarolBookWB.pdfbin0 -> 96275 bytes
-rw-r--r--macros/latex/contrib/songbook/contrib/README35
-rw-r--r--macros/latex/contrib/songbook/contrib/crd2sb/NothingButTheBlood.crd22
-rw-r--r--macros/latex/contrib/songbook/contrib/crd2sb/crd2sb243
-rw-r--r--macros/latex/contrib/songbook/contrib/crd2sb/crd2sb.txt96
-rw-r--r--macros/latex/contrib/songbook/contrib/modulate267
-rw-r--r--macros/latex/contrib/songbook/contrib/texchord.sty467
9 files changed, 1353 insertions, 0 deletions
diff --git a/macros/latex/contrib/songbook/contrib/CarolBook/CarolBook.tex b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBook.tex
new file mode 100644
index 0000000000..ce5da87ee3
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBook.tex
@@ -0,0 +1,223 @@
+%%% rcsid = @(#)$Id: CarolBook.tex,v 1.7 2002/02/24 03:04:20 christopher Exp $
+%%%%%%
+%%
+%% ==============================
+%% Carol Songbook (CarolBook.tex)
+%% ==============================
+%%
+%% Words transcribed by Christopher Rath. My primary source of copyright
+%% dates and lyrical authorship was ``The Book of Common Praise'', (c)
+%% 1938, published by the Anglican Book Centre, Toronto, Canada.
+%% Supplementary materials used were, ``Songs of Christmas'', a carol
+%% sheet printed each year by The Ottawa Citizen newspaper; The English
+%% Folksongs Archive (http://www.acronet.net/\~robokopp/english.html);
+%% and, ``Christmas, 100 Seasonal Favourites'', (c) 1992, published by
+%% Hal Leonard Publishing Corp.
+%%
+%% Compiled by Christopher Rath <christopher@rath.ca>. I believe that all
+%% of the words to the carols contained in this file are in the public
+%% domain; I am aware that some of the music to these carols is still
+%% under copyright, however, no music is contained in this compliation.
+%%
+%%%%%%
+%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,legalpaper]{book}
+\usepackage{latexsym,fancyhdr,palatino}
+
+%%\usepackage[chordbk]{songbook} %% Words & Chords edition.
+%%\usepackage[chordbk,compactsong]{songbook} %% Words & Chords edition.
+\usepackage[wordbk]{songbook} %% Words Only edition.
+%%\usepackage[overhead]{songbook} %% Overhead Transparency edition.
+
+%%%
+% Revision Date and Release Date definitions.
+%
+% \RelDate - The last time this songbook was released. Set this
+% date each time a new release/update of the songbook
+% is generated.
+% \RevDate - The last time a particular song was revised in any
+% way. This command will be renewed inside every
+% song.
+%%%
+\newcommand{\RelDate}{11~December,~1999}
+\newcommand{\RevDate}{\today}
+
+%%%
+% If we're in WordBk mode then reset the page layout spec.
+%
+\ifWordBk
+ \setlength{\headsep} { .2 in}
+ \setlength{\textheight} {9.2 in}
+\fi
+
+%%%
+% Title page information.
+%%%
+\title{Songs For Christmas}
+\author{Compiled by Christopher Rath $<$\texttt{crath@cyberus.ca}$>$}
+\date{Revised: \RevDate}
+%
+\markboth{Songs For Christmas}{}
+
+%%%
+% Redefine the copyright print macro to be an empty field.
+%%%
+\renewcommand{\CpyRt}[2]{\vspace{.5ex}}
+
+%%%
+% Change ``W&M:'' constant to an empty string.
+%%%
+\renewcommand{\SBWAndMTag}{\relax}
+
+%%%
+% Change the amount of space allowed between songs (only when
+% in WordBk mode).
+%%%
+\ifWordBk
+ \renewcommand{\SpaceAfterSong}{\vspace{0ex plus15ex minus5ex}}
+\fi
+
+%%%
+% Redefine the keep whole song on same page flag.
+%%%
+\SamepageModefalse
+
+%%%
+% Redefine fonts from SongBook style that I don't like.
+%%%
+\font\myTinySF=cmss8 at 8pt
+\renewcommand{\CpyRtInfoFont}{\tiny\myTinySF}
+
+%%%
+% Define fonts to use in the headers and footers of the songbook.
+%%%
+\newcommand{\LHeadFont}{\normalsize} % = cmr12 at 12pt
+\newcommand{\CHeadFont}{\normalsize\rm} % = cmr12 at 12pt
+\newcommand{\RHeadFont}{\normalsize} % = cmr12 at 12pt
+\newcommand{\LFootFont}{\scriptsize} % = cmr8 at 8pt
+\newcommand{\CFootFont}{\tiny\myTinySF} % = cmss8 at 8pt
+\newcommand{\RFootFont}{\scriptsize} % = cmr8 at 8pt
+
+%%%
+% Turn on and define fancy page heading/footing definition.
+%%%
+\pagestyle{fancy}
+
+\ifChordBk
+ % It's a words & chords songbook...
+ \addtolength{\headwidth}{\marginparsep}
+ \addtolength{\headwidth}{\marginparwidth}
+ \renewcommand{\headrulewidth}{0.4pt}
+ \renewcommand{\footrulewidth}{0.4pt}
+ \fancyhead[LE,RO]{\LHeadFont\emph{\leftmark\/}\SBContinueMark}
+ \fancyhead[CE,CO]{\CHeadFont\thepage}
+ \fancyhead[RE,LO]{\RHeadFont\RelDate}
+\else\ifOverhead
+ % It's an overhead...
+ \renewcommand{\footrulewidth}{0pt}
+ \renewcommand{\headrulewidth}{0pt}
+ \fancyhead[LE,RO]{}
+ \fancyhead[CE,CO]{}
+ \fancyhead[RE,LO]{}
+\else\ifWordBk
+ % It's a words only songbook...
+ \addtolength{\headwidth}{\marginparsep}
+ \addtolength{\headwidth}{\marginparwidth}
+ \renewcommand{\headrulewidth}{0.4pt}
+ \renewcommand{\footrulewidth}{0.4pt}
+ \fancyhead[LE,RO]{\LHeadFont Songs For Christmas}
+ \fancyhead[CE,CO]{\CHeadFont\thepage}
+ \fancyhead[RE,LO]{\RHeadFont\RelDate}
+\fi\fi\fi
+
+\fancyfoot[LE,RO]{\LFootFont Last Revised: \RevDate}
+\ifSongEject
+ \fancyfoot[CE,CO]{\CFootFont}
+\else
+ \fancyfoot[CE,CO]{\CFootFont}
+\fi
+\fancyfoot[RE,LO]{\RFootFont Compiled by Christopher Rath $<$\texttt{crath@cyberus.ca}$>$.}
+
+%%%
+% Create some extra macros not used by this file, but used by
+% another file \input'ed by this one.
+%%%
+\newif\ifSongSheet\SongSheetfalse
+\newcommand{\SSPageBrk}{\relax}
+
+%%%
+% Turn on/off index-file generation. Uncomment the \makeindex line to
+% turn index generation on; comment it out to turn index generation
+% off.
+%%%
+\makeTitleIndex %% Title and First Line Index.
+\makeTitleContents %% Table of Contents.
+%\makeKeyIndex %% Index of song by key.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Font selection for document's default font.
+%%%
+\SBDefaultFont
+
+%%%
+% Declare start of Front-Matter.
+%%%
+\frontmatter
+
+%%%
+% Uncomment "\maketitle" statement to make a title page.
+%%%
+%\maketitle
+\mainmatter
+\ifWordBk
+ \twocolumn
+\fi
+
+%%%
+% Songbook begins.
+%%%
+
+\mainmatter
+\ifWordBk
+ \twocolumn
+\fi
+
+%%%
+% Songbook begins.
+%%%
+
+\input CarolBookBody.tex
+
+%%%
+% Document ends.
+%%%
+\end{document}
+\bye
+
+% Local Variables:
+% LaTeX-item-indent: -1
+% LaTeX-indent-level: 2
+% TeX-brace-indent-level: 2
+% TeX-auto-untabify: nil
+% TeX-style-local: style/
+% End:
diff --git a/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookOH.pdf b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookOH.pdf
new file mode 100644
index 0000000000..0cf5312014
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookOH.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookWB.pdf b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookWB.pdf
new file mode 100644
index 0000000000..8469740e3a
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/CarolBook/CarolBookWB.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/contrib/README b/macros/latex/contrib/songbook/contrib/README
new file mode 100644
index 0000000000..9288bbca02
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/README
@@ -0,0 +1,35 @@
+@(#)$Id: README,v 1.7 2003/08/31 03:23:59 christopher Exp $
+
+This directory contains user contributed macros and programs intended/suitable
+for use with the LaTeX SongBook Style.
+
+Content List (in alphabetic order):
+
+ CarolBook - a songbook.sty formatted book containing words for all the
+ Christmas songs I've been able to find where the words are now in the
+ public domain. PDF versions of the file are included for quick
+ and easy use.
+
+ crd2sb - a perl script which converts Chord files into Songbook files.
+ Contributed by Abel Chow <abel@g2networks.com>. A postscript formatter for
+ Chord songs can be ftp'ed from:
+ ftp://ftp.uu.net/doc/music/guitar/resources/misc/CHORD/
+
+ modulate - a perl script for modulating a song from one key to another.
+ Contributed by Christopher Rath <crath@cyberus.ca>.
+
+ texchord.sty - LaTeX macros for printing guitar fingering charts.
+ Contributed by Joel M. Hoffman <joel@wam.umd.edu>. Note, this style is NO
+ LONGER actively supported by Joel.
+
+
+
+
+
+
+Local Variables:
+ mode: indented-text-fill
+ fill-column: 79
+End:
+
+
diff --git a/macros/latex/contrib/songbook/contrib/crd2sb/NothingButTheBlood.crd b/macros/latex/contrib/songbook/contrib/crd2sb/NothingButTheBlood.crd
new file mode 100644
index 0000000000..4581a50974
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/crd2sb/NothingButTheBlood.crd
@@ -0,0 +1,22 @@
+{t:Nothing But the Blood}
+{st:Robert Lowry}
+{st:Public Domain}
+# key: E
+# tex: \SBRef{\Hos{} Songbook 1}{\#65}
+# tex: \FLineIdx{What can wash away my sin?}
+[E]What can [A/E]wash [B/E]a[E]way my sin?[B/D#]
+[C#m7]Nothing but the blood of [F#m]Je[F#m/B]-[E]sus.
+[E]What can [A/E]make [B/E]me [E]whole again?[B/D#]
+[C#m7]Nothing but the blood of [F#m]Je[F#m/B]-[E]sus.
+
+{soc}
+[E]O, [F#m7]precious [G#m7]is the [C#m]flow
+[F#m]That [E/G#]makes me [F#m/A]white [B]as [C#m]snow.[B/C#]- [A/B]
+[E]No [F#m7]other [G#m7]fount I [C#m]know,
+[A]Nothing but the [C#m]blood of [F#m]Je[F#m/B]-[E]sus.
+{eoc}
+
+This is all my righteousness,
+Nothing but the blood of Jesus.
+This is all my hope and peace,
+Nothing but the blood of Jesus.
diff --git a/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb b/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb
new file mode 100644
index 0000000000..eaae05dfd8
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb
@@ -0,0 +1,243 @@
+#!/usr/local/bin/perl
+
+# crd2sb - convert chordpro files to songbook (LaTeX style)
+
+# Usage: crd2sb filename.crd [filename2.crd] . . [filenamen.crd]
+
+# The input files are "*.crd" and the output files are "*.tex" (in the
+# current directory).
+
+# $Id: crd2sb,v 1.9 1997/12/05 19:25:05 abel Exp $
+
+# (C)Copyright 1997 Abel Chow <abel@g2networks.com>
+
+# You may distribute under the terms of the Artistic License,
+# as specified in the relnotes.txt file.
+
+use File::Basename;
+
+$debuglevel = 0;
+$date = localtime;
+
+sub Init
+{
+ $title = "";
+ $key = "";
+ $copyright = "Unknown";
+ $wandm = "Unknown";
+ $sref = "";
+ $ccli = "";
+ $lyrics = "";
+
+ $nextenv = "SBVerse";
+}
+
+sub EndSong
+{
+ unless ($title) {
+ print STDERR "$file:$.: No title defined for song.\n";
+ Init();
+ return;
+ }
+ $ccli = "\\NotCCLIed" if $copyright =~ /\bPublic Domain\b/;
+
+ print STDERR "$file:$.: key undefined for \"$title\".\n" unless $key;
+ print STDERR "$file:$.: copyright info undefined for \"$title\".\n" if $copyright eq "Unknown";
+ print STDERR "$file:$.: author undefined for \"$title\".\n" if $wandm eq "Unknown";
+# print STDERR "$file:$.: scripture ref. undefined for \"$title\".\n" unless $sref;
+ print STDERR "$file:$.: CCLI status undefined for \"$title\".\n" unless $ccli;
+
+ if ($env) {
+ DoEnd($env);
+ }
+
+ print "% This file is machine generated. Do not edit.\n";
+ print "% crd2sb $file\n";
+ print "% created on $date\n";
+ print "\\begin{song}{$title}{$key}\n";
+ print " {$copyright}\n {$wandm}\n {$sref}\n {$ccli}\n";
+ print "$lyrics";
+ print "\\end{song}\n";
+ Init();
+}
+
+sub DoNewSong
+{
+ EndSong();
+ Init();
+}
+
+sub DoSubTitle
+{
+ ($_) = @_;
+ # figure out if it's a copyright
+ if (s/\(C\)// + s/\bCopyright\b//) {
+ s/^\s+//;
+ s/\s+$//;
+ $copyright = $_;
+ return;
+ }
+ if (/Public Domain/) {
+ $copyright = $_;
+ return;
+ }
+ s/^W&M://;
+ s/^\s+//;
+ s/\s+$//;
+ $wandm = $_;
+}
+
+sub DoComment
+{
+ ($_) = @_;
+ print STDERR "$file:$.: > $_\n" if $debuglevel > 0;
+ if (($p) = /^tex:\s*(.*)/) {
+ $lyrics .= "$p\n";
+ return;
+ }
+ if (($p) = /^note:\s*(.*)/) {
+ $lyrics .= "\\SBMargNote{$p}\n";
+ return;
+ }
+ if (($p) = /^intro:\s*(.*)/) {
+ $p =~ s/#/\$\\sharp\$/g;
+ $p =~ s/b/\$\\flat\$/g;
+ $p =~ s/\|/\$|\$/g;
+ $lyrics .= "\\SBIntro{\\ChFont $p}\n";
+ return;
+ }
+ if (/^section:/) {
+ $nextenv = "SBSection";
+ return;
+ }
+ # figure out if there's a CCLI ref anywhere
+ $ccli = "\\CCLIed" if /\bccli\b/i;
+ # key setting
+ if (/^\s*key:\s*(.*)/) {
+ my($k) = $1;
+ if ($k !~ /^[A-G]\S*/) {
+ print STDERR "$file:$.: invalid key $k\n";
+ }
+ $k =~ s/#/\$\\sharp\$/g;
+ $k =~ s/b/\$\\flat\$/g;
+ $key = $k;
+ return;
+ }
+ $sref = $1 if /^\s*sref:\s*(.*)/;
+}
+
+sub DoBegin
+{
+ my($myenv) = @_;
+ printf STDERR "$file:$.: missing env $env" if $env;
+ $env = $myenv;
+ $lyrics .= "\\begin{$env}\n";
+ $first = 1;
+}
+
+sub DoEnd
+{
+ print STDERR "$file:$.: mismatched quote\n" if $quote;
+ $quote = 0;
+ printf STDERR "$file:$.: missing env $env\n" unless ($env);
+ $lyrics .= "\\end{$env}\n";
+ $env = "";
+}
+
+unless (@ARGV) {
+ print "usage: crd2sb filename.crd [filename2.crd] ... [filenamen.crd]\n"
+}
+
+Init();
+foreach $file (@ARGV) {
+ ($base, $path, $type) = fileparse($file, '\.crd');
+ unless ($type) {
+ print STDERR "$file: not a Chordpro (*.crd) file\n";
+ next;
+ }
+ $outfile = "$base.tex";
+ print STDERR "#### $file -> $outfile ####\n"
+ if $debuglevel > 0;
+ unless (open(INFILE, $file)) {
+ print STDERR "$file: $!\n";
+ exit;
+ }
+ close(STDOUT);
+ unless (open(STDOUT, ">$outfile")) {
+ print STDERR "$outfile: $!\n";
+ exit;
+ }
+ while (<INFILE>) {
+ if (/^#\s+(.*)/) {
+ DoComment($1);
+ next;
+ }
+ next if /^#/;
+ # directive
+ if (m/^\s*{([^\}:]+)(:\s*([^\}]*))?}/) {
+ # title
+ if ($1 eq "title" || $1 eq "t") {
+ $title = $3; next;
+ }
+ if ($1 eq "subtitle" || $1 eq "st") {
+ DoSubTitle($3); next;
+ }
+ if ($1 eq "comment" || $1 eq "c") {
+ DoComment($3); next;
+ }
+ # new_song
+ if ($1 eq "new_song" || $1 eq "ns") {
+ DoNewSong(); next;
+ }
+ if ($1 eq "start_of_chorus" || $1 eq "soc") {
+ DoBegin("SBChorus"); next;
+ }
+ if ($1 eq "end_of_chorus" || $1 eq "eoc") {
+ DoEnd("SBChorus"); next;
+ }
+ next;
+ }
+ if (/{/ || /}/) {
+ print STDERR "$file:$.: unmatched brace\n";
+ }
+
+ # strip blank spaces and comments
+ s/\s+/ /;
+ s/^\s//;
+ s/\s$//;
+ s/&/\\&/;
+ unless ($_) { # blank line
+ DoEnd() if $env;
+ next;
+ }
+ while (/"/) { # "
+ if ($quote) {
+ $quote = 0 if (s/"/\'\'/); # " }
+ }
+ else {
+ $quote = 1 if (s/"/\`\`/); # " }
+ }
+ }
+ # protect the parens in chords
+ s/(\[[^\[\]]*)\(/$1</g;
+ s/\)([^\[\]]*\])/>$1/g;
+ s/\(/{\\em /g;
+ s/\)/}/g;
+ tr/\<\>/\(\)/;
+
+ s/\|/\$|\$/g;
+ s/\[([^\[\]]*)\]-/\\Ch{$1}{\\SBem}/g;
+ s/\[([^\[\]]*)\]([A-Za-z0-9,;:.!"'`]+)/\\Ch{$1}{$2}/g; #'`
+ s/\[([^\[\]]*)\]/\\Ch{$1}{}/g;#}}
+ s/\.\.\./\\ldots{}/g;
+
+ unless ($env) {
+ DoBegin($nextenv) unless $env;
+ $nextenv = "SBVerse";
+ }
+ $lyrics .= "\n" if $env && !$first;
+ $first = 0;
+ $lyrics .= "$_\n";
+ }
+ DoNewSong();
+}
diff --git a/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb.txt b/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb.txt
new file mode 100644
index 0000000000..fba7163a70
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/crd2sb/crd2sb.txt
@@ -0,0 +1,96 @@
+$Id: crd2sb.txt,v 1.3 1997/11/21 21:38:35 abel Exp $
+(C)Copyright 1997 Abel Chow <abel@g2networks.com>
+
+What does ``crd2sb'' do?
+
+usage: crd2sb filename.crd
+
+``crd2sb'' takes Chordpro songs and generates
+
+ What's the format of a `crd' file?
+
+----------------------------------------------------------------------
+
+Typically, a song file looks like:
+
+{t:Song Title}
+{st:Author}
+{st:(C)Copyright information}
+# key: G
+# sref: ScriptRef 3:16
+# CCLI
+# intro: G D C D
+[|][G]This [Bm]is a [|][C]song.
+[|][Dsus]La, la, [|][D]la, la, la.
+[|][G]This [Bm]is a [|][C]song.
+[|][Dsus]This is a[|D]nother line.[|][Dsus] [/] [D] [Dmaj7][|][D]
+
+{soc}
+[|][G]This is the [|][D]cho[Dsus]-[|][D]-[A]rus.
+[|][Am]This is the [|][G]cho[D]rus.
+[|][G]This is the [|][D]cho[Dsus]-[D]-[|][A]rus.
+[Am]This [|][C]is the [|][Gsus]cho[|][G]rus.
+{eoc}
+
+[|][G]This [Bm]is the [|][C]second verse.
+[|][Dsus]La, la, [|][D]la, la, la ...
+
+----------------------------------------------------------------------
+
+Generally, if you have multiple chord changes within a word, you'll
+want to use the [chord]- structure. This will put a dash in the
+chordbook output (but not the wordbook or overhead versions).
+
+----------------------------------------------------------------------
+
+ Comment Directives
+
+Comments are any line that begins with `#'. Certain directives are
+embedded in the comments so that Chordpro doesn't see them (but they
+can be parsed by ``crd2sb'').
+
+The currently supported comment directives are:
+
+key, to specify the key of the song, e.g.
+# key: G
+
+section, for when you want a section defined instead of a verse, e.g.
+# section:
+
+note, \SBMargNote{}
+# note: 1997 Missions Conference Theme Song
+
+tex, a catchall for putting TeX in the file
+# tex: \CBPageBrk
+
+intro, for \SBIntro
+# intro: |G D C|
+
+----------------------------------------------------------------------
+
+ Supported Chordpro Directives "{directive:args}"
+
+{title:Title}, {t:Title} -> title of song
+{subtitle:Subtitle}, {st:Subtitle} -> used for author, copyright
+{comment:This is a comment.}, {c:This is a comment} -> ignored
+{new_song}, {ns} -> ends current song, starts a new song
+{start_of_chorus}, {soc} -> Beginning delimiter for chorus.
+{end_of_chorus}, {eoc} -> Ending delimiter for chorus
+
+----------------------------------------------------------------------
+
+ Chordpro/SongBook.sty Mappings
+
+[Asus]word -> \Ch{Asus}{word}
+[Asus]- -> \Ch{Asus}{\SBem}
+[Asus][A] -> \Ch{Asus}{}\Ch{A}{}
+(abc) -> {\em abc}
+... -> \ldots
+
+----------------------------------------------------------------------
+
+ To Do
+
+- Create example file exercising all the features.
+- Explain [|].
+- Rewrite docs.
diff --git a/macros/latex/contrib/songbook/contrib/modulate b/macros/latex/contrib/songbook/contrib/modulate
new file mode 100644
index 0000000000..e4901d5c62
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/modulate
@@ -0,0 +1,267 @@
+#!/usr/bin/perl -w
+###
+# modulate - Modulate a song from one key to another.
+#
+# @(#)$Id: modulate,v 1.6 2006/10/15 15:48:10 rathc Exp $
+# Copyright 1998--2002 Christopher Rath <christopher@rath.ca>
+#
+# This package is free software; you can redistribute it and/or modify
+# it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This package is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# USAGE: modulate [+-]<semitones> [filename]
+#
+# DESCRIPTION:
+#
+# Modulate a song from one key to another. The destination key is
+# required to determine how to handle some troublesome note names (e.g.,
+# is F to be named E# or F.
+#
+# This program is hard-wired to my own songbook coding style, some
+# customization will be required if your coding style differs much from
+# mine.
+#
+# To use this program, feed a song into the modulate program. The
+# beginning of the song MUST begin with a \begin{song} statement. Any
+# text preceeding the \begin{song} will be ignored.
+#
+# For example, feeding this:
+#
+# \begin{song}{What A Mighty God We Serve}{C}
+# {Public Domain}
+# {Unknown}
+# {Isaiah 9:6}
+# {\NotCCLIed}
+#
+# % Copyright verified by: Christopher Rath
+# % Words verified by: Christopher Rath
+# % Chords verified by: Priscilla Gruver
+# \renewcommand{\RevDate}{February~11,~1993}
+# \SBRef{Hosanna! Music Book~I}{\#93}
+#
+# \Ch{C}{What} a mighty God we serve,
+#
+# What a mighty God we \Ch{G7}{serve},
+#
+# will result in:
+#
+# \STitle{What A Mighty God We Serve}{D}
+#
+# \Ch{D}{What} a mighty God we serve,
+#
+# What a mighty God we \Ch{A7}{serve},
+#
+# being emitted by modulate.
+###
+
+###
+# Specify constants and variables.
+#
+local($keyStr,
+ $oldKey,
+ $title);
+
+local(%rawKeys) = (
+ '0', 'A',
+ '1', 'Bb',
+ '2', 'B',
+ '3', 'C',
+ '4', 'C#',
+ '5', 'D',
+ '6', 'Eb',
+ '7', 'E',
+ '8', 'F',
+ '9', 'F#',
+ '10', 'G',
+ '11', 'Ab'
+ );
+
+local(%rawNotes) = (
+ 'A', '0',
+ 'A#', '1', 'Bb', '1',
+ 'B', '2', 'Cb', '2',
+ 'B#', '3', 'C', '3',
+ 'C#', '4', 'Db', '4',
+ 'D', '5',
+ 'D#', '6', 'Eb', '6',
+ 'E', '7', 'Fb', '7',
+ 'E#', '8', 'F', '8',
+ 'F#', '9', 'Gb', '9',
+ 'G', '10',
+ 'G#', '11', 'Ab', '11'
+);
+
+###
+# Test chord: A#modifier/Fbtrailer
+sub modChord {
+ local($oldCh, $modVal) = (@_);
+ local($newCh);
+
+ if ($oldCh =~ /^[\{\[\]]/) {
+ $newCh = $oldCh;
+ } elsif ($oldCh =~ m%(^[A-G#b]+)([^/]*)/?([A-G#b]*)(.*)$%) {
+ local($chord, $modifier, $bass, $trailer) = ($1, $2, $3, $4);
+
+ $newCh = modNote($chord, $modVal);
+
+ if (length($modifier)) {
+ $newCh .= $modifier;
+ }
+
+ if (length($bass)) {
+ $newCh .= '/';
+ $newCh .= modNote($bass, $modVal);
+
+ if (length($trailer)) {
+ $newCh .= $trailer;
+ }
+ }
+ } else {
+ $newCh = $oldCh;
+ }
+
+ return $newCh;
+}
+
+
+sub modKey {
+ local($oldKey, $modVal) = (@_);
+ local($newKey) = (0);
+
+ $oldKey =~ s/\$\\sharp\$/\#/g;
+ $oldKey =~ s/\$\\flat\$/b/g;
+
+ $newKey = modChord($oldKey, $modVal);
+
+ $newKey =~ s/\#/\$\\sharp\$/g;
+ $newKey =~ s/b/\$\\flat\$/g;
+
+ return($newKey);
+}
+
+
+sub modNote {
+ local($oldNote, $modVal) = (@_);
+ local($newNote) = (0);
+
+ $newNote = $rawKeys{($rawNotes{$oldNote} + $modVal)%12};
+
+ return($newNote);
+}
+
+
+###
+# setKeyArray() - Patch %rawKeys for the key we're working in.
+#
+sub setKeyArray {
+ local($newKey) = (@_);
+
+ if ($newKey =~ /^E/) {
+ $rawKeys{'6'} = 'D#';
+ $rawKeys{'11'} = 'G#';
+ }
+}
+
+
+###
+# Get command line parameters.
+#
+if ($#ARGV < 0) {
+ $semitones = 2;
+# die "USAGE: modulate [+-]<semitones> [inputFile]\n";
+} else {
+ $semitones = $ARGV[0];
+ shift;
+}
+
+if (@ARGV) {
+ $inFile = $ARGV[0];
+} else {
+ $inFile = '-';
+}
+
+open(INFILE, $inFile) || die "Couldn't open input file; aborting.\n";
+
+
+###
+# Skip up to the \song macro; then scan the macro and figure out what key the
+# song is in. Then skip ahead to the first line containing a \Ch macro.
+#
+while (<INFILE>)
+{
+ if (/\\begin\{song\}\{([^\}]*)\}\{([^\}]*)\}/) {
+
+ $title = $1;
+ $oldKey = $2;
+ $keyStr = modKey($2, $semitones);
+
+ print '\\STitle{'."$title".'}{'."$keyStr".'}'."\n";
+ print "\n";
+
+ setKeyArray($keyStr);
+
+ last;
+ }
+}
+
+if (eof()) {
+ print "$0: ERROR: couldn't find `\\begin{song}{}{}' block, aborting.";
+} else {
+ local($chord,
+ $prefix,
+ $suffix);
+
+ while (<INFILE>) {
+ if (/^\s+\{/
+ || /^\s+%/
+ || /^\s+\\renewcommand/
+ || /^\s+\\FLineIdx/
+ || /^\s+\\SBRef/
+ || /^\s+$/) {
+ next;
+ } else {
+ chop;
+ last;
+ }
+ }
+
+ ###
+ # Split the line into 3 pieces: a prefix, the chord itself (i.e., the first
+ # parameter to the \Ch command) and a suffix. We then modulate the chord
+ # itself, output the prefix followed by the chord; then we reset $_ to the
+ # suffix and re-check it for more \Ch macros. When we've run out of \Ch
+ # macros, get the next line of the file.
+ #
+ # Test line: \Ch{C}{What} a mighty God we \Ch{C}{serve!}\Ch{[}{}\Ch{F}{} \Ch{C}{}\Ch{]}{}
+ while (1) {
+ if (/\\end\{song\}/) {
+ last;
+ } elsif (/(\\Ch[rX]*\{)([^\}]*)/) {
+ $prefix = $`.$1;
+ $chord = $2;
+ $suffix = $';
+
+ $chord = modChord($chord, $semitones);
+
+ printf("%s%s", $prefix, $chord);
+
+ $_ = $suffix;
+ } else {
+ printf("%s\n", $_);
+
+ if (eof(INFILE)) {
+ last;
+ } else {
+ $_ = <INFILE>;
+ chop;
+ }
+ }
+ }
+}
+
diff --git a/macros/latex/contrib/songbook/contrib/texchord.sty b/macros/latex/contrib/songbook/contrib/texchord.sty
new file mode 100644
index 0000000000..d62762ba52
--- /dev/null
+++ b/macros/latex/contrib/songbook/contrib/texchord.sty
@@ -0,0 +1,467 @@
+%%%
+%%% TeXChord. Macros for typesetting guitar-chord diagrams.
+%%% Version 0.8.
+%%%
+%%% (C) Copyright 1993 by Joel M. Hoffman <72700.402@compuserve.com>
+%%%
+%%%
+%%% Unlimited non-comercial use is hereby granted. Any comercial use
+%%% requires permission from the author. For information on how
+%%% to contact the author, see below.
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%%% This package defines macros for producing guitar-chord diagrams
+%%% with TeX. In general, the command to produce a chord pattern
+%%% consists of three parts: the chord name, modifiers, and the
+%%% string ``chord.'' Upper-case letters are used for Major and
+%%% lower-case letter for minor. Possible modifiers are ``s'' for
+%%% ``seven,'' ``sh'' for ``sharp,'' ``f'' for ``flat'' and ``S''
+%%% for ``major seven.'' When they are mixed, the incidentals
+%%% (sharp, flat) preceed the others.
+%%%
+%%% So, for example, \Cchord is a simple C-major chord; \cshchord is
+%%% a c-sharp-minor chord; \DshSchord is a D-sharp-major-seven chord.
+%%% As of version 0.8, I have not entered all of the possible chord
+%%% patterns. See the end of this file for examples of how to add
+%%% chords of your own.
+%%%
+%%% I have included the chord patterns I usually use; your
+%%% choices for some obscure chords may vary. Again, you can add
+%%% your own chords by copying the examples at the end of this file.
+%%%
+%%% I have included both sharps and flats for every chord, even
+%%% though some are seldom used (C-flat comes to mind). As of
+%%% version 0.8, many chords are still missing. Sorry.
+%%%
+%%% In addition to the chord macros themselves, the following
+%%% ``control'' commands are provided:
+%%%
+%%% \bigchords Use big chord patterns.
+%%% \smallchords Use small chord patterns.
+%%% \raisedchords Place chords over text at current location.
+%%% \textchords Place chords in current text.
+%%%
+%%% For example, if you wanted to discuss chords, you might say:
+%%%
+%%% \smallchords\textchords This is how a C-chord is played: \Cchord.
+%%%
+%%% On the other hand, in music, you might use:
+%%%
+%%% \bigchords\raisedchords \Dchord This is played with a D-chord.
+%%%
+%%% \bigchords\raisedchords is the default.
+%%%
+%%% I don't know how reliable the \raisedchords is. You may have
+%%% to tweek the definition of \raisedchords at the end of this
+%%% file if you are not using 10pt text.
+%%%
+%%% Other dimentions you can freely change are \chordheight and
+%%% \chordwidth. Be sure to do so both in the initialization and
+%%% in the definitions of \bigchords and \smallchords. Also
+%%% change \extchordheight to match \chordheight. Feel free to
+%%% change the fonts, too.
+%%%
+%%%
+%%% --> I would like to thank Merri Lovinger Arian, a long time friend
+%%% --> and my guitar teacher, without whom I would never have learned
+%%% --> the joy of guitar.
+%%%
+%%%
+%%%
+%%% By version 1.0, this package will also have better provisions
+%%% for bar-chords; provisions for optionally printing the name of
+%%% the chord to the left of (instead of above) the diagram;
+%%% provisions for printing fret-numbers to the left of the
+%%% diagrams, instead of the hideously ugly extended patterns;
+%%% provisions for printing little x's and o's atop the chord
+%%% patterns to indicate which strings are sounded. Also, the
+%%% code will be cleaned up and commented.
+%%%
+%%% Other bugs include numerous spacing problems, most notably in
+%%% f-minor chords.
+%%%
+%%%
+%%% If you have suggestions, or bug-fixes, please let me know
+%%%
+%%%
+%%% You can reach me, the author of this package at:
+%%%
+%%% Internet: Joel@wam.umd.edu -or- 72700.402@compuserve.com
+%%% Compuserve: 72700,402
+%%% USPSnet: Joel Hoffman
+%%% 1703 Mt. Pisgah Le. #23
+%%% Silver Spring, MD 20903
+%%% USA
+%%%
+%%% Smile and be happy. Like this: o o
+%%% >
+%%% \__/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newdimen\chordwidth\chordwidth=.28in
+\newdimen\chordheight\chordheight=.3in
+\newdimen\extchordheight\extchordheight=.525in % 7/4 of \chordheight
+\newdimen\chordlinewidth\chordlinewidth=.3pt
+\newdimen\chordbaselinewidth\chordbaselinewidth=1pt
+\newdimen\chordraise\chordraise=2pt
+\font\chordmarkfont=cmsy8\def\chordchar{\char15}
+\font\chordnamefont=cmr12
+\font\chordnamesfont=cmr8
+\font\chordsymfont=cmmi8
+
+\newdimen\chordi\newdimen\chordj\newdimen\chordk
+\newcount\chordl
+
+\def\bigchords{\chordwidth=.28in\chordheight=.3in\extchordheight=.525in\chordlinewidth=.3pt\chordbaselinewidth=1pt\font\chordmarkfont=cmsy8\def\chordchar{\char15}\font\chordnamefont=cmr12\font\chordnamesfont=cmr8\font\chordsymfont=cmmi8\chordraise=3pt}
+
+%\def\smallchords{\chordwidth=.14in\chordheight=.15in\extchordheight=.2625in\chordlinewidth=.15pt\chordbaselinewidth=.5pt\font\chordmarkfont=cmsy5\font\chordnamefont=cmr6\chordraise=1.5pt}
+\def\smallchords{\chordwidth=.14in\chordheight=.15in\extchordheight=.2625in\chordlinewidth=.15pt\chordbaselinewidth=.5pt\font\chordmarkfont=cmr12 scaled \magstep1\def\chordchar{.}\font\chordnamefont=cmr6\font\chordnamesfont=cmr5\font\chordsymfont=cmmi5\chordraise=1.5pt}
+
+\bigchords
+
+\def\vchordrule{{\vrule height \chordheight width \chordlinewidth depth 0pt}}
+\def\extvchordrule{{\vrule height \extchordheight width \chordlinewidth depth 0pt}}
+\def\hchordrule{{\hrule height \chordlinewidth width \chordwidth depth 0pt}}
+\def\basechordrule{{\hrule height \chordbaselinewidth width \chordwidth
+ depth 0pt}}
+\def\chordmark{{\chordmarkfont\chordchar}}
+
+
+
+
+\def\finger#1#2{%string, fret
+ \chordi=\chordwidth%
+ \divide\chordi by 5%
+ \chordl=#1\advance\chordl by 0%
+ \multiply\chordi by \chordl%
+ \chordj=\chordheight%
+ \divide\chordj by 4%
+ \chordk=.5\chordj%
+ \divide\chordk by 2%
+ \chordl=#2\advance\chordl by 1%
+ \multiply\chordj by \chordl%
+ \advance\chordj by \chordk%
+ \setbox0\hbox{\chordmark}%
+ \chordk=\wd0%
+ \multiply\chordk by 10%
+ \divide\chordk by 21 %=2.1. 2 doesn't seem to work. Hmmm.%
+ \advance \chordi by -\chordk%
+ \chordk=\ht0%
+ \divide\chordk by 2%
+ \advance\chordj by -\chordk%
+% \vskip\chordj\hbox{}\hskip\chordi\chordmark
+% \hskip-\wd0\hskip-\chordi\vskip-\ht0\vskip-\chordj}
+ \lower\chordj\hbox{\hskip\chordi\chordmark}%
+ \hskip-\wd0\hskip-\chordi}
+
+
+\def\craise#1#2{#1\raise 1ex\hbox{\chordnamesfont #2}}
+\def\minor#1{\craise{#1}{m}}
+\def\seven#1{\craise{#1}{7}}
+\def\Flat#1{\craise{#1}{{\chordsymfont\char91}}}
+\def\Sharp#1{\craise{#1}{{\chordsymfont\char93}}}
+\def\Flatm#1{\craise{#1}{{\chordsymfont\char91}m}}
+\def\Sharpm#1{\craise{#1}{{\chordsymfont\char93}m}}
+\def\minors#1{\craise{#1}{m7}}
+\def\Sharps#1{\craise{#1}{{\chordsymfont\char93}7}}
+\def\Flats#1{\craise{#1}{{\chordsymfont\char91}7}}
+\def\Flatms#1{\craise{#1}{{\chordsymfont\char91}m7}}
+\def\Sharpms#1{\craise{#1}{{\chordsymfont\char93}m7}}
+
+\def\chord#1{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule}\hss}\vss}\vbox to 0pt{\vbox to \chordheight{\basechordrule\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+\def\emptychord{\chord{}}
+
+\def\extchord#1{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule}\hss}\vss}\vbox to 0pt{\vbox to \extchordheight{\basechordrule\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+
+% Definition added by Christopher Rath (crath@cyberus.ca). This macro left justifies
+% the chord-name instead of pseudo centering it.
+\def\lextchord#1{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont #1}}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule}\hss}\vss}\vbox to 0pt{\vbox to \extchordheight{\basechordrule\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+
+% Definition added by Christopher Rath (crath@cyberus.ca). This macro prints a normal
+% chord picture, except that the top fret-mark is not heavy-weight and it picture
+% prints the top fret-number beside the top fret-mark (this allows chords to be shown
+% that are played ``up the neck''.
+\def\upchord#1#2{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule \hfil \vchordrule}\hss}\vss}%
+\vbox to 0pt{\vskip1pt\hbox to 0pt{\hskip\chordwidth\hbox{\chordnamesfont ~#2}\hss}\vss}%
+\vbox to 0pt{\vbox to \chordheight{\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+
+% Definition added by Christopher Rath (crath@cyberus.ca). The same function as
+% \upchord, except this is for the \extchord.
+\def\upextchord#1#2{\hbox to 0pt{\smash{\offinterlineskip
+\raise\chordraise\hbox to 0pt{\hbox to \chordwidth{\chordnamefont\hss #1 \hss}\hss}%
+\vbox to 0pt{\hbox to 0pt{\hbox to \chordwidth{\extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule \hfil \extvchordrule}\hss}\vss}%
+\vbox to 0pt{\vskip1pt\hbox to 0pt{\hskip\chordwidth\hbox{\chordnamesfont ~#2}\hss}\vss}%
+\vbox to 0pt{\vbox to \extchordheight{\vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule \vfil \hchordrule}\vss}}\hss}}
+
+\def\anychord#1{\dochord{\offinterlineskip\relax #1}}
+\def\anyextchord#1{\doextchord{\offinterlineskip\relax #1}}
+
+%Ordinary major chords.
+\def\Afchord{\anychord{\chord{\Flat{A}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{5}{3}}}
+\def\Achord{\anychord{\chord{A}\finger{2}{1}\finger{3}{1}\finger{4}{1}}}
+\def\Ashchord{\anychord{\chord{\Sharp{A}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{2}}}
+\def\Bfchord{\anychord{\chord{\Flat{B}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{2}}}
+\def\Bchord{\anychord{\chord{B}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{1}}}
+\def\Cfchord{\anychord{\chord{\Flat{C}}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{1}}}
+\def\Bshchord{\anychord{\chord{\Sharp{B}}\finger{1}{2}\finger{2}{1}\finger{4}{0}}}
+\def\Cchord{\anychord{\chord{C}\finger{1}{2}\finger{2}{1}\finger{4}{0}}}
+\def\Cshchord{\anychord{\chord{\Sharp{C}}\finger{1}{3}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{4}{1}\finger{5}{0}}}
+\def\Dfchord{\anychord{\chord{\Flat{D}}\finger{1}{3}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{4}{1}\finger{5}{0}}}
+\def\Dchord{\anychord{\chord{D}\finger{3}{1}\finger{4}{2}\finger{5}{1}}}
+\def\Dshchord{\anychord{\chord{\Sharp{D}}\finger{2}{0}\finger{3}{2}\finger{4}{3}\finger{5}{2}}}
+\def\Efchord{\anychord{\chord{\Flat{E}}\finger{2}{0}\finger{3}{2}\finger{4}{3}\finger{5}{2}}}
+\def\Echord{\anychord{\chord{E}\finger{1}{1}\finger{2}{1}\finger{3}{0}}}
+\def\Ffchord{\anychord{\chord{\Flat{F}}\finger{1}{1}\finger{2}{1}\finger{3}{0}}}
+\def\Eshchord{\anychord{\chord{\Sharp{E}}\finger{2}{2}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\Fchord{\anychord{\chord{F}\finger{2}{2}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\Fshchord{\anychord{\chord{\Sharp{F}}\finger{2}{3}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\Gfchord{\anychord{\chord{\Flat{G}}\finger{2}{3}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\Gchord{\anychord{\chord{G}\finger{0}{2}\finger{1}{1}\finger{5}{2}}}
+\def\Gshchord{\anychord{\chord{\Sharp{G}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{5}{3}}}
+
+%minor chords
+\def\afchord{\anyextchord{\extchord{\Flatm{a}}\finger{0}{3}\finger{1}{3}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{3}\finger{1}{5}\finger{2}{5}}}
+\def\achord{\anychord{\chord{\minor{a}}\finger{2}{1}\finger{3}{1}\finger{4}{0}}}
+\def\ashchord{\anychord{\chord{\Sharpm{a}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{1}}}
+\def\bfchord{\anychord{\chord{\Flatm{b}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{3}{2}\finger{4}{1}}}
+\def\bchord{\anychord{\chord{\minor{b}}\finger{2}{3}\finger{3}{3}\finger{4}{2}\finger{5}{1}}}
+\def\cfchord{\anychord{\chord{\Flatm{c}}\finger{2}{3}\finger{3}{3}\finger{4}{2}\finger{5}{1}}}
+\def\bshchord{\anyextchord{\extchord{\Sharpm{b}}\finger{2}{4}\finger{3}{4}\finger{4}{3}\finger{5}{2}}}
+\def\cchord{\anyextchord{\extchord{\minor{c}}\finger{2}{4}\finger{3}{4}\finger{4}{3}\finger{5}{2}}}
+\def\cshchord{\anychord{\chord{\Sharpm{c}}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dfchord{\anychord{\chord{\Flatm{d}}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dchord{\anychord{\chord{\minor{d}}\finger{3}{1}\finger{4}{2}\finger{5}{0}}}
+\def\dshchord{\anychord{\chord{\Sharpm{d}}\finger{2}{3}\finger{3}{2}\finger{4}{3}\finger{5}{1}}}
+\def\efchord{\anychord{\chord{\Flatm{e}}\finger{2}{3}\finger{3}{2}\finger{4}{3}\finger{5}{1}}}
+\def\echord{\anychord{\chord{\minor{e}}\finger{1}{1}\finger{2}{1}}}
+\def\ffchord{\anychord{\chord{\Flatm{f}}\finger{1}{1}\finger{2}{1}}}
+\def\eshchord{\anychord{\chord{\Sharpm{e}}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fchord{\anychord{\chord{\minor{f}}\finger{2}{2}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fshchord{\anychord{\chord{\Sharpm{f}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{1}{3}\finger{2}{3}}}
+\def\gfchord{\anychord{\chord{\Flatm{g}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{1}{3}\finger{2}{3}}}
+\def\gchord{\anyextchord{\extchord{\minor{g}}\finger{2}{4}\finger{3}{2}\finger{4}{2}\finger{5}{2}}}
+\def\gshchord{\anyextchord{\extchord{\Sharpm{g}}\finger{0}{3}\finger{1}{3}\finger{2}{3}\finger{3}{3}\finger{4}{3}\finger{5}{3}\finger{1}{5}\finger{2}{5}}}
+
+%Seventh chords (majors)
+\def\Afschord{\anychord{\chord{\Flats{A}}\finger{1}{2}\finger{2}{3}\finger{3}{0}\finger{4}{3}}}
+\def\Aschord{\anychord{\chord{\seven{A}}\finger{2}{1}\finger{4}{1}}}
+\def\Ashschord{\anychord{\chord{\Sharps{A}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{4}{2}}}
+\def\Bfschord{\anychord{\chord{\Flats{B}}\finger{0}{0}\finger{1}{0}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}\finger{2}{2}\finger{4}{2}}}
+\def\Bschord{\anychord{\chord{\seven{B}}\finger{1}{1}\finger{2}{0}\finger{3}{1}\finger{5}{1}}}
+\def\Cfschord{\anychord{\chord{\Flats{C}}\finger{1}{1}\finger{2}{0}\finger{3}{1}\finger{5}{1}}}
+\def\Bshschord{\anychord{\chord{\Sharps{B}}\finger{1}{2}\finger{2}{1}\finger{3}{2}\finger{4}{0}}}
+\def\Cschord{\anychord{\chord{\seven{C}}\finger{1}{2}\finger{2}{1}\finger{3}{2}\finger{4}{0}}}
+\def\Cshschord{\anychord{\chord{\Sharps{C}}\finger{2}{2}\finger{3}{3}\finger{4}{1}\finger{5}{3}}}
+\def\Dfschord{\anychord{\chord{\Flats{D}}\finger{2}{2}\finger{3}{3}\finger{4}{1}\finger{5}{3}}}
+\def\Dschord{\anychord{\chord{\seven{D}}\finger{3}{1}\finger{4}{0}\finger{5}{1}}}
+\def\Dshschord{\anychord{\chord{\Sharps{D}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{2}}}
+\def\Efschord{\anychord{\chord{\Flats{E}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{2}}}
+\def\Eschord{\anychord{\chord{\seven{E}}\finger{1}{1}\finger{3}{0}}}
+\def\Ffschord{\anychord{\chord{\Flats{F}}\finger{1}{1}\finger{3}{0}}}
+\def\Eshschord{\anyextchord{\extchord{\Sharps{E}}\finger{2}{2}\finger{3}{4}\finger{4}{5}\finger{5}{4}}}
+\def\Fschord{\anyextchord{\extchord{\seven{F}}\finger{2}{2}\finger{3}{4}\finger{4}{5}\finger{5}{4}}}
+\def\Fshschord{\anychord{\chord{\Sharps{F}}\finger{2}{3}\finger{3}{2}\finger{4}{1}}}
+\def\Gfschord{\anychord{\chord{\Flats{G}}\finger{2}{3}\finger{3}{2}\finger{4}{1}}}
+\def\Gschord{\anychord{\chord{\seven{G}}\finger{0}{2}\finger{1}{1}\finger{5}{0}}}
+\def\Gshschord{\anychord{\chord{\Sharps{G}}\finger{1}{2}\finger{2}{3}\finger{3}{0}\finger{4}{3}}}
+
+%seventh chords (minors)
+
+\def\afschord{\anychord{\chord{\Flatms{a}}\finger{2}{0}\finger{3}{0}\finger{5}{1}}}
+\def\aschord{\anychord{\chord{\minors{a}}\finger{2}{1}\finger{4}{0}}}
+\def\ashschord{\anychord{\chord{\Sharpms{a}}\finger{2}{2}\finger{3}{2}\finger{4}{1}\finger{5}{3}}}
+\def\bfschord{\anychord{\chord{\Flatms{b}}\finger{2}{2}\finger{3}{2}\finger{4}{1}\finger{5}{3}}}
+\def\bschord{\anychord{\chord{\minors{b}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{2}{3}\finger{4}{2}}}
+\def\cfschord{\anychord{\chord{\Flatms{c}}\finger{0}{1}\finger{1}{1}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}\finger{2}{3}\finger{4}{2}}}
+\def\bshschord{\anychord{\chord{\Sharpms{b}}\finger{2}{0}\finger{3}{2}\finger{4}{0}\finger{5}{2}}}
+\def\cschord{\anychord{\chord{\minors{c}}\finger{2}{0}\finger{3}{2}\finger{4}{0}\finger{5}{2}}}
+\def\cshschord{\anychord{\chord{\Sharpms{c}}\finger{1}{1}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dfschord{\anychord{\chord{\Flatms{d}}\finger{1}{1}\finger{2}{1}\finger{3}{0}\finger{4}{1}}}
+\def\dschord{\anychord{\chord{\minors{d}}\finger{3}{1}\finger{4}{0}\finger{5}{0}}}
+\def\dshschord{\anychord{\chord{\Sharpms{d}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\efschord{\anychord{\chord{\Flatms{e}}\finger{2}{0}\finger{3}{2}\finger{4}{1}\finger{5}{1}}}
+\def\eschord{\anychord{\chord{\minors{e}}\finger{1}{1}\finger{2}{1}\finger{4}{2}}}
+\def\ffschord{\anychord{\chord{\Flatms{f}}\finger{1}{1}\finger{2}{1}\finger{4}{2}}}
+\def\eshschord{\anychord{\chord{\Sharpms{e}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fschord{\anychord{\chord{\minors{f}}\finger{2}{0}\finger{3}{0}\finger{4}{0}\finger{5}{0}}}
+\def\fshschord{\anychord{\chord{\Sharpms{f}}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}}}
+\def\gfschord{\anychord{\chord{\Flatms{g}}\finger{2}{1}\finger{3}{1}\finger{4}{1}\finger{5}{1}}}
+\def\gschord{\anychord{\chord{\minors{g}}\finger{1}{0}\finger{2}{2}\finger{4}{2}}}
+\def\gshschord{\anychord{\chord{\Sharpms{g}}\finger{2}{0}\finger{3}{0}\finger{5}{1}}}
+
+\def\textchords{\def\dochord##1{\leavevmode\raise\chordheight\hbox{##1}\hskip\chordwidth}}
+\def\raisedchords{\def\dochord##1{\leavevmode\raise10pt\hbox{\raise\chordheight\hbox{##1}}}\def\doextchord##1{\leavevmode\raise10pt\hbox{\raise\extchordheight\hbox{##1}}}}
+\raisedchords
+%%
+%%
+%% Tue Mar 30 20:40:00 1993
+%%
+%%
+%% To: Christopher (C.J.) Rath (BNR) Dept 4Y13 CAR
+%%
+%% From: 'joel@wam.umd.edu' (BNR400)
+%%
+%% Subject: [ANNOUNCE] Guitar-chord-diagram macros for TeX (and LaTex)
+%%
+%% Attachment: 1) UNIX File: ORIGINAL.HEADER - 960 bytes
+%%
+%% There are TWO files here: test.tex, followed by texchord.tex.
+%%
+%% Look for the two --CUT HERE-- lines below.
+%%
+%%
+%% Save the second file as texchord.tex, the first one as test.tex, and
+%% run tex on test.tex.
+%%
+%% -------------------------------CUT HERE-------------------------------
+%% %Test file for TeXChord. (C) 1993 by Joel M. Hoffman
+%%
+%% \font\titfont=cmr17\narrower % Some fonts
+%% \font\capfont=cmbx12 scaled \magstep1
+%% \def\mycaption#1{\bigskip{\capfont #1}\nobreak}
+%% \long\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern3pt
+%% \vbox{\kern3pt#1\kern3pt}\kern3pt\vrule}\hrule}}
+%% \long\def\dboxit#1{\boxit{\vbox{\boxit{\hbox{#1}}}}}
+%%
+%%
+%%
+%% \input texchord % Include the macros.
+%% \textchords\smallchords % Put chords in the text; use small chords.
+%%
+%% \centerline{\dboxit{\vbox{\hbox{\titfont \TeX Chord Demonstration}
+%% \hbox{Copyright 1993 by Joel M.\ Hoffman}}}}
+%% \bigskip
+%% \bigskip\hrule\bigskip\bigskip
+%%
+%% This is the size of a small C-chord: \Cchord.
+%% \bigchords
+%% This is the size of a big C-chord: \Cchord.
+%%
+%% \bigskip\hrule\bigskip\bigskip
+%%
+%%
+%% \raisedchords\advance\baselineskip by 50pt
+%% \def\dummytext{\leavevmode\kern.6 true in}
+%%
+%% \bigchords
+%%
+%% \mycaption{Major chords:}
+%%
+%% \Achord \dummytext
+%% \Bchord \dummytext
+%% \Cchord \dummytext
+%% \Dchord \dummytext
+%% \Echord \dummytext
+%% \Fchord \dummytext
+%% \Gchord \dummytext
+%%
+%% \Ashchord \dummytext
+%% \Bshchord \dummytext
+%% \Cshchord \dummytext
+%% \Dshchord \dummytext
+%% \Eshchord \dummytext
+%% \Fshchord \dummytext
+%% \Gshchord \dummytext
+%%
+%% \Afchord \dummytext
+%% \Bfchord \dummytext
+%% \Cfchord \dummytext
+%% \Dfchord \dummytext
+%% \Efchord \dummytext
+%% \Ffchord \dummytext
+%% \Gfchord \dummytext
+%%
+%% \mycaption{Minor chords:}
+%%
+%% \achord \dummytext
+%% \bchord \dummytext
+%% \cchord \dummytext
+%% \dchord \dummytext
+%% \echord \dummytext
+%% \fchord \dummytext
+%% \gchord \dummytext
+%%
+%% \ashchord \dummytext
+%% \bshchord \dummytext
+%% \cshchord \dummytext
+%% \dshchord \dummytext
+%% \eshchord \dummytext
+%% \fshchord \dummytext
+%% \gshchord \dummytext
+%%
+%% \afchord \dummytext
+%% \bfchord \dummytext
+%% \cfchord \dummytext
+%% \dfchord \dummytext
+%% \efchord \dummytext
+%% \ffchord \dummytext
+%% \gfchord \dummytext
+%%
+%% \mycaption{Seventh chords (Major):}
+%%
+%% \Cschord \dummytext
+%% \Dschord \dummytext
+%% \Eschord \dummytext
+%% \Fschord \dummytext
+%% \Gschord \dummytext
+%% \Aschord \dummytext
+%% \Bschord \dummytext
+%%
+%% \Cfschord \dummytext
+%% \Dfschord \dummytext
+%% \Efschord \dummytext
+%% \Ffschord \dummytext
+%% \Gfschord \dummytext
+%% \Afschord \dummytext
+%% \Bfschord \dummytext
+%%
+%% \Cshschord \dummytext
+%% \Dshschord \dummytext
+%% \Eshschord \dummytext
+%% \Fshschord \dummytext
+%% \Gshschord \dummytext
+%% \Ashschord \dummytext
+%% \Bshschord \dummytext
+%%
+%% \mycaption{Seventh chords (Minor):}
+%%
+%%
+%% \aschord \dummytext
+%% \bschord \dummytext
+%% \cschord \dummytext
+%% \dschord \dummytext
+%% \eschord \dummytext
+%% \fschord \dummytext
+%% \gschord \dummytext
+%%
+%% \afschord \dummytext
+%% \bfschord \dummytext
+%% \cfschord \dummytext
+%% \dfschord \dummytext
+%% \efschord \dummytext
+%% \ffschord \dummytext
+%% \gfschord \dummytext
+%%
+%% \ashschord \dummytext
+%% \bshschord \dummytext
+%% \cshschord \dummytext
+%% \dshschord \dummytext
+%% \eshschord \dummytext
+%% \fshschord \dummytext
+%% \gshschord \dummytext
+%%
+%%
+%% \end