summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/songbook
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
Initial commit
Diffstat (limited to 'macros/latex/contrib/songbook')
-rw-r--r--macros/latex/contrib/songbook/LesserGPL.txt502
-rw-r--r--macros/latex/contrib/songbook/README141
-rw-r--r--macros/latex/contrib/songbook/conditionals.sty88
-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
-rw-r--r--macros/latex/contrib/songbook/install.txt55
-rw-r--r--macros/latex/contrib/songbook/mksbadx50
-rw-r--r--macros/latex/contrib/songbook/mksbkdx50
-rw-r--r--macros/latex/contrib/songbook/mksbtdx50
-rw-r--r--macros/latex/contrib/songbook/sample-sb.tex1318
-rw-r--r--macros/latex/contrib/songbook/sampleAdx.pdfbin0 -> 53671 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleAdx.tex126
-rw-r--r--macros/latex/contrib/songbook/sampleCBK.pdfbin0 -> 223375 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleCSBK.pdfbin0 -> 236122 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleKdx.pdfbin0 -> 53072 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleKdx.tex126
-rw-r--r--macros/latex/contrib/songbook/sampleOH.pdfbin0 -> 113921 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleTdx.pdfbin0 -> 77429 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleTdx.tex121
-rw-r--r--macros/latex/contrib/songbook/sampleToc.pdfbin0 -> 52404 bytes
-rw-r--r--macros/latex/contrib/songbook/sampleToc.tex117
-rw-r--r--macros/latex/contrib/songbook/sampleWBK.pdfbin0 -> 118677 bytes
-rw-r--r--macros/latex/contrib/songbook/songbook.dtx5519
-rw-r--r--macros/latex/contrib/songbook/songbook.ins74
-rw-r--r--macros/latex/contrib/songbook/songbook.ist4
-rw-r--r--macros/latex/contrib/songbook/songbook.pdfbin0 -> 469517 bytes
33 files changed, 9694 insertions, 0 deletions
diff --git a/macros/latex/contrib/songbook/LesserGPL.txt b/macros/latex/contrib/songbook/LesserGPL.txt
new file mode 100644
index 0000000000..cfe59bcadb
--- /dev/null
+++ b/macros/latex/contrib/songbook/LesserGPL.txt
@@ -0,0 +1,502 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/macros/latex/contrib/songbook/README b/macros/latex/contrib/songbook/README
new file mode 100644
index 0000000000..2188a14c41
--- /dev/null
+++ b/macros/latex/contrib/songbook/README
@@ -0,0 +1,141 @@
+@(#)$Id: README,v 1.3 2010-04-12 18:04:29 rathc Exp $
+
+ - - - - - - - - -
+
+ R E L E A S E N O T E S
+
+ - - - - - - - - - - - - - - - - -
+
+ LaTeX Songbook Style, Version 4.5, 2010/04/30
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ Copyright (c) 1992--2010 Christopher Rath
+ All rights reserved.
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ Christopher Rath <christopher@rath.ca>
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+Legal Stuff:
+
+ This package is free software; with the exception of conditionals.sty, you
+ can redistribute it and/or modify it under the terms of the GNU Lesser
+ General Public License as published by version 2.1 of the Free Software
+ Foundation (conditionals.sty is public domain and not bound by LGPL).
+
+ 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.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, I'll be glad to provide one.
+
+Changes in Release 4.5:
+
+ * at Adam Fletcher's prompting, this release contains a new per-song
+ compactsongmode
+
+Changes in Release 4.4:
+
+ * at Donald Arseneau's request, added language to state that
+ conditionals.sty is public domain
+
+Changes in Release 4.3:
+
+ * found a problem with the optional parameter to the xlatn environment
+ added in Release 4.2; that optional parameter has been removed
+ * a new songTranslation environment added to provide the required
+ capability for the Artist index option
+ * added a new song to the sample songbook to act as a test case
+ for translation
+
+
+Changes in Release 4.2:
+
+ * added a new Artist index option
+ * added a new optional parameter to the xlatn environment; in support of
+ the new Artist index option
+
+
+chordbk, wordbk, overhead:
+
+ These styles have been used to produce the songbooks for our church. We
+ needed to produce books that our song-leaders could use, as well as books
+ for use in the congregation; so, these styles were written.
+
+ The `chordbk' option is used to print a songbook with words and chords, and
+ it also supports a `compactsong' option which lays out the song in two
+ columns per page instead of one (the `wordbk' and `overhead' options do not
+ support compactsong mode at present). The `wordbk' option is used to print
+ a words-only songbook. The `overhead' option is used to print overhead
+ transparencies. They all use the same LaTeX input file. `Wordbk' and
+ `overhead' modes simply ignore all of the chord information.
+
+
+songbook.dtx:
+
+ This is both the formal documentation for the Songbook style as well as
+ its source code. A .pdf file is provided, as well as the .tex file.
+
+
+sample-sb.tex:
+
+ This is a sample songbook. This file is used to produce the sample???.dvi
+ files included with this package. To regenerate the .dvi files, simply
+ uncomment the appropriate \document line and re-LaTeX the file.
+
+
+Manifest:
+
+ conditionals.sty Donald Arseneau's conditional tests.
+ contrib/ Directory containing user contributed utilities.
+ LesserGPL.txt Terms & conditions under which the style is
+ distributed.
+ mksbkdx A shell script to make the index by song key.
+ mksbtdx A shell script to make the index by song title.
+ relnotes.txt The songbook package release notes (this file).
+ sample-sb.tex A sample songbook.
+ sampleCBK.pdf Sample-sb.tex formatted using chordbk.sty.
+ sampleKdx.pdf The sample key index run through LaTeX.
+ sampleKdx.tex Key index for the sample songbook.
+ sampleOH.pdf Sample-sb.tex formatted using overhead.sty.
+ sampleTdx.pdf The sample title index run through LaTeX.
+ sampleTdx.tex Title index for the sample songbook.
+ sampleToc.pdf The sample TOC run through LaTeX.
+ sampleToc.tex TOC for the sample songbook.
+ sampleWBK.pdf Sample-sb.tex formatted using wordbk.sty.
+ songbook.pdf The \Songbook's documentation.
+ songbook.ist The songbook package makeindex .ist file.
+ songbook.dtx The base style file.
+ songbook.ins Install script to create .sty from .dtx.
+
+
+Support:
+
+ Please email me for help using the files. Please let me know about any
+ bugs and problems.
+
+ There is a SongBook Style home page. Its URL is:
+
+ http://www.rath.ca/Misc/Songbook/
+
+ I will make bug fixes, other user's contributed macros and scripts, and the
+ latest release of the software available on this web server.
+
+
+ Christopher Rath christopher@rath.ca (613) 824-4584
+ 1371 Major Rd.
+ Ottawa, ON
+ Canada K1E 1H3
+
+
+
+
+Local Variables:
+ mode: indented-text
+ fill-column: 79
+End:
diff --git a/macros/latex/contrib/songbook/conditionals.sty b/macros/latex/contrib/songbook/conditionals.sty
new file mode 100644
index 0000000000..929b0699a8
--- /dev/null
+++ b/macros/latex/contrib/songbook/conditionals.sty
@@ -0,0 +1,88 @@
+% rcsid = @(#)$Id: conditionals.sty,v 1.5 2010-03-31 01:04:16 rathc Exp $
+%==========Conditionals by Donald Arseneau <asnd@triumf.ca>===========
+% (as of 2002/01/17)
+% Donald Arseneau asserts no claim to copyright of the contents of this
+% conditionals.sty file, and it may be freely used as in the public
+% domain.
+%
+% \if\blank{ } --- checks if parameter is blank (Spaces count as blank)
+% \if\given{ } --- checks if parameter is not blank: like \if\blank{}...\else
+% \if\nil{ } --- checks if parameter is null (spaces are NOT null)
+%
+{\catcode`\!=8 % funny catcode so ! will be a delimiter
+ \catcode`\Q=3 % funny catcode so Q will be a delimiter
+\long\gdef\given#1{88\fi\Ifbl@nk#1QQQ\empty!}
+\long\gdef\blank#1{88\fi\Ifbl@nk#1QQ..!}% if null or spaces
+\long\gdef\nil#1{\IfN@Ught#1* {#1}!}% if null
+\long\gdef\IfN@Ught#1 #2!{\blank{#2}}
+\long\gdef\Ifbl@nk#1#2Q#3!{\ifx#3}% same as above
+}
+\endinput
+%=====================================================================
+% COMMENTARY: Donald Arseneau's commentary on these macros.
+%=====================================================================
+% There are many ways to check if a field is blank. The clearest is:
+%
+% \long\def\@tempa{#1}\ifx\@tempa\@empty ... \else ... \fi
+%
+% (use \empty for plain TeX)
+%
+% There are a few deficiencies with this approach: it is not "expandable"
+% so it can't be executed in an \edef or a \write; it redefines some
+% command (\@tempa here), and it is unsafe to put the first part in a
+% macro because of the unbalanced \fi. Below are my versions which are
+% expandable and safe. There are % two versions for the syntax:
+% \ifnull{#1}\then... and \if\nil{#1}...
+% [I hear the second syntax comes from DEK]. Choose your favorite.
+%
+%========================================================================
+% \ifblank --- checks if parameter is blank (Spaces count as blank)
+% \ifgiven --- checks if parameter is not blank: like \ifblank...\else
+% \ifnull --- checks if parameter is null (spaces are NOT null)
+% use \ifgiven{#1}\then ... \else ... \fi etc
+\let\then\iftrue
+{\catcode`\!=8 % funny catcode so ! will be a delimiter
+ \catcode`\Q=3 % funny catcode so Q will be a delimiter
+\long\gdef\ifgiven#1\then{\Ifbl@nk#1QQQ\empty!}% negative of \ifblank
+\long\gdef\ifblank#1\then{\Ifbl@nk#1QQ..!}% if null or spaces
+\long\gdef\Ifbl@nk#1#2Q#3!{\ifx#3}
+\long\gdef\ifnull#1\then{\IfN@LL#1* {#1}!}% if null
+\long\gdef\IfN@LL#1 #2!{\ifblank{#2}\then}
+}
+%
+%---------------------------------------------------------------------
+% Other version: use \if\given{ }, \if\blank{ }, \if\nil{ }
+% (There is no \then).
+%
+{\catcode`\!=8 % funny catcode so ! will be a delimiter
+ \catcode`\Q=3 % funny catcode so Q will be a delimiter
+\long\gdef\given#1{88\fi\Ifbl@nk#1QQQ\empty!}
+\long\gdef\blank#1{88\fi\Ifbl@nk#1QQ..!}% if null or spaces
+\long\gdef\nil#1{\IfN@Ught#1* {#1}!}% if null
+\long\gdef\IfN@Ught#1 #2!{\blank{#2}}
+\long\gdef\Ifbl@nk#1#2Q#3!{\ifx#3}% same as above
+}
+%---------------------------------------------------------------------
+%
+% One note of caution: Even though these macros can be nested
+% because they give balanced \if - \fi constructs (\if or \then),
+% nesting is still a danger if the tested parameter text contains
+% an unbalanced \if or \fi. As a general rule, ill-defined parameter
+% text should not be skipped over by \if.
+%
+% The special delimiter above is a funny Q character having the category
+% 3, usually associated with $. If there is some strange application
+% where Q might have catcode 3, then a better delimiter would be needed.
+% The following paranoid definitions use QQ with *different* categories:
+% Q(4)Q(3) as the delimiter.
+%
+{\catcode`\!=8 % funny catcode so ! will be a delimiter
+ \catcode`\Q=3 % funny catcode so Q will be a delimiter
+ \catcode`\R=4 % another funny catcode for Q !
+ \uccode`\R=`\Q
+ \uppercase{\long\gdef\given#1{11\fi\Ifbl@nk#1RQ11RQ12RQ!}}
+ \uppercase{\long\gdef\blank#1{11\fi\Ifbl@nk#1RQ12RQ11RQ!}}% if null or spaces
+ \long\gdef\nil#1{\IfN@Ught#1* {#1}!}% if null
+ \long\gdef\IfN@Ught#1 #2!{\blank{#2}}
+ \uppercase{\long\gdef\Ifbl@nk#1#2RQ#3RQ#4!{\ifx#3}}% same as above
+}
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
diff --git a/macros/latex/contrib/songbook/install.txt b/macros/latex/contrib/songbook/install.txt
new file mode 100644
index 0000000000..cb6e1c6f9a
--- /dev/null
+++ b/macros/latex/contrib/songbook/install.txt
@@ -0,0 +1,55 @@
+@(#)$Id: install.txt,v 1.8 2010-04-12 18:04:29 rathc Exp $
+
+ - - - - - - - - - - - - - -
+
+ I N S T A L L A T I O N N O T E S
+
+ - - - - - - - - - - - - - - - - - - -
+
+ LaTeX Songbook Style, Version 4.5, 2010/04/30
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ Copyright (c) 1992--2010 Christopher Rath
+ All rights reserved.
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ Christopher Rath <christopher@rath.ca>
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+Legal Stuff:
+
+ This package is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ version 2.1 of 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.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library; if not, I'll be glad to provide one.
+
+
+Instructions:
+
+ 1. Create a songbook.sty file by executing the following command:
+ latex songbook.ins
+
+ 2. Copy songbook.sty to whereever you keep your local styles. You may
+ need to refresh the filename database if your TeX installation doesn't
+ dynamically search for style files.
+
+ 3. See relnotes.txt for contact and support information.
+
+
+
+
+Local Variables:
+ mode: indented-text
+ fill-column: 79
+End:
diff --git a/macros/latex/contrib/songbook/mksbadx b/macros/latex/contrib/songbook/mksbadx
new file mode 100644
index 0000000000..1b84bc4352
--- /dev/null
+++ b/macros/latex/contrib/songbook/mksbadx
@@ -0,0 +1,50 @@
+#!/bin/sh
+##### rcsid = @(#)$Id: mksbkdx,v 1.10 2003/08/19 23:30:36 christopher Exp $
+#####
+##
+## mksbadx - Produce a songbook style .adx file from a .aIdx file.
+##
+## Version 4.5, 30 April, 2010
+##
+## Copyright 1992--2010 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.
+##
+## Take a .aIdx file produced by one of the songbook styles and
+## turn it into a .adx file for final formatting into an index
+## of songs by key.
+##
+#####
+#####
+
+###
+# Check that the proper parameters were input.
+###
+if [ "$1" = "" ]
+then
+ echo USAGE: $0 jobname
+fi
+
+###
+# Call makeindex to do the required munging.
+##
+makeindex -s songbook.ist -o $1.adx $1.aIdx
+
+###
+# Tell the user what the new filename is.
+###
+echo " "
+echo "The new Index file is called \`$1.adx'."
+
+###
+# End of script.
+###
diff --git a/macros/latex/contrib/songbook/mksbkdx b/macros/latex/contrib/songbook/mksbkdx
new file mode 100644
index 0000000000..4f465d41cd
--- /dev/null
+++ b/macros/latex/contrib/songbook/mksbkdx
@@ -0,0 +1,50 @@
+#!/bin/sh
+##### rcsid = @(#)$Id: mksbkdx,v 1.14 2010-04-12 18:04:30 rathc Exp $
+#####
+##
+## mksbkdx - Produce a songbook style .kdx file from a .kIdx file.
+##
+## Version 4.5, 30 April, 2010
+##
+## Copyright 1992--2010 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.
+##
+## Take a .kIdx file produced by one of the songbook styles and
+## turn it into a .kdx file for final formatting into an index
+## of songs by key.
+##
+#####
+#####
+
+###
+# Check that the proper parameters were input.
+###
+if [ "$1" = "" ]
+then
+ echo USAGE: $0 jobname
+fi
+
+###
+# Call makeindex to do the required munging.
+##
+makeindex -s songbook.ist -o $1.kdx $1.kIdx
+
+###
+# Tell the user what the new filename is.
+###
+echo " "
+echo "The new Index file is called \`$1.kdx'."
+
+###
+# End of script.
+###
diff --git a/macros/latex/contrib/songbook/mksbtdx b/macros/latex/contrib/songbook/mksbtdx
new file mode 100644
index 0000000000..c43ae1781f
--- /dev/null
+++ b/macros/latex/contrib/songbook/mksbtdx
@@ -0,0 +1,50 @@
+#!/bin/sh
+##### rcsid = @(#)$Id: mksbtdx,v 1.16 2010-04-12 18:04:30 rathc Exp $
+#####
+##
+## mksbtdx - Produce a songbook style .tdx file from a .tIdx file.
+##
+## Version 4.5, 30 April, 2010
+##
+## Copyright 1992--2010 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.
+##
+## Take a .tIdx file produced by one of the songbook styles and
+## turn it into a .tdx file for final formatting into a title and
+## first line index.
+##
+#####
+#####
+
+###
+# Check that the proper parameters were input.
+###
+if [ "$1" = "" ]
+then
+ echo USAGE: $0 jobname
+fi
+
+###
+# Call makeindex to do the required munging.
+##
+makeindex -s songbook.ist -o $1.tdx $1.tIdx
+
+###
+# Tell the user what the new filename is.
+###
+echo " "
+echo "The new Index file is called \`$1.tdx'."
+
+###
+# End of script.
+###
diff --git a/macros/latex/contrib/songbook/sample-sb.tex b/macros/latex/contrib/songbook/sample-sb.tex
new file mode 100644
index 0000000000..7ba4b1d022
--- /dev/null
+++ b/macros/latex/contrib/songbook/sample-sb.tex
@@ -0,0 +1,1318 @@
+%%%%%% rcsid = @(#)$Id: sample-sb.tex,v 1.23 2010-04-12 18:04:11 rathc Exp $
+%%%%%%
+%%
+%% ===============================
+%% Sample Songbook (sample-sb.tex)
+%% ===============================
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file contains a subset of the songbook we distribute
+%% at our church. To the best of my knowledge, all of the lyrics
+%% contained herein are freely distributable. This file has been
+%% provided as a sample of what can be produced by the chordbk,
+%% wordbk, and overhead LaTeX styles.
+%%
+%% NEEDED: The fancyhdr LaTeX style is required to properly
+%% format this file. If you don't have that then comment
+%% out the commands in the preamble which deal with the
+%% fancyhdr style.
+%%
+%%%%%%
+%%%%%%
+%%
+%% 1. Chord notation. Within this songbook the following
+%% conventions have been adopted:
+%%
+%% "Minor" is entered as "m";
+%% e.g. Cm7 for C minor 7th.
+%% "Major" is entered as "M";
+%% e.g. CM7 for C major 7th.
+%%
+%%%%%%
+%%%%%%
+%% ============
+%% Bibliography
+%% ============
+%%
+%% Exalt Him!: Exalt Him! Compiled by Tom Fettke. (c)1989
+%% Word Music.
+%%
+%% Hosanna! Music Books: Hosanna! Music Books #1--#6.
+%% (c)1987--92 Integrity Music, Inc.
+%%
+%% Worship Him II: Worship Him II. Compiled by Jesse Peterson
+%% and Bruce Ballinger. (c)1989 Tempo Music
+%% Publications.
+%%
+%% Worship Songs Of The Vineyard: Worship Songs Of The Vineyard
+%% --- Volume 2. (c)1989 Vineyard Ministries
+%% International.
+%%
+%%%%%%
+%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt]{book}
+\usepackage{latexsym,fancyhdr}
+\usepackage[chordbk]{songbook} %% Words & Chords edition.
+%%\usepackage[compactallsongs,chordbk]{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}{31~August,~2003}
+\newcommand{\RevDate}{\today}
+
+%%%
+% C.C.L.I. license number definition; for copyright licensing info.
+% One of these macros will be manually inserted into the {CpyRt}
+% parameter of the {song} environment.
+%
+% \CCLInumber - The actual copyright license number. Don't
+% insert this command in the {CpyRt} parameter, use one
+% of the others.
+% \CCLIed - Indicates a song falls under our CCLI license.
+% \NotCCLIed - Indicates a song doesn't fall under our CCLI
+% license. Public Domain songs fall into this category.
+% \PGranted - We have received specific permission from the
+% copyright holder to use this song.
+% \PPending - We are in the process of obtaining permission to
+% use this song.
+%%%
+\newcommand{\CCLInumber}{Your CCLI Number}
+\newcommand{\CCLIed}{{\CpyRtInfoFont (CCLI \CCLInumber)}}
+\newcommand{\NotCCLIed}{\relax}
+\newcommand{\PGranted}{\relax}
+\newcommand{\PPending}{{\CpyRtInfoFont (Permission Pending)}}
+
+%%%
+% Title page information.
+%%%
+\title{A Church Songbook}
+\author{}
+\date{Revised: \RevDate}
+
+%%%
+% 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 A Church Songbook}
+ \fancyhead[CE,CO]{\CHeadFont\thepage}
+ \fancyhead[RE,LO]{\RHeadFont\RelDate}
+\fi\fi\fi
+
+\fancyfoot[LE,RO]{\LFootFont Property of The Church}
+\ifSongEject
+ \fancyfoot[CE,CO]{\CFootFont Last Revised: \RevDate}
+\else
+ \fancyfoot[CE,CO]{\CFootFont}
+\fi
+\fancyfoot[RE,LO]{\RFootFont Material used by permission.}
+
+%%%
+% 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.
+\makeArtistIndex %% Index of song by artist.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Uncomment "\maketitle" statement to make a title page.
+%%%
+\maketitle
+
+\mainmatter
+\ifWordBk
+ \twocolumn
+\fi
+
+%%%
+% Songbook begins.
+%%%
+\begin{song}{What A Mighty God We Serve}{C}
+ {\SBPubDom}
+ {}
+ {Isaiah~9:6}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Hosanna! Music Book~I}{\#93}
+
+ \begin{SBOpGroup}
+ \Ch{C}{What} a mighty God we serve,
+
+ What a mighty God we \Ch{G7}{serve},
+
+ \Ch{C}{An}gels bow before Him,
+
+ \Ch{C}{Hea}ven and earth adore Him,
+
+ \Ch{C}{What} a mighty \Ch{G7}{God} we \Ch{C}{serve!}\Ch{[}{}\Ch{F}{} \Ch{C}{}\Ch{]}{}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ O \Ch{C}{Zion,} O \Ch{F}{Zion,} that \Ch{G7}{bring}est good \Ch{C}{tid}ings,
+
+ Get thee \Ch{F}{up} into the \Ch{G7}{High} Moun\Ch{C}{tains}
+
+ Je\Ch{C}{ru}salem, Je\Ch{F}{ru}salem, that \Ch{G7}{bring}est good \Ch{C}{tid}ings
+
+ Lift up thy \Ch{F}{voice} with \Ch{G7}{all} thy \Ch{C}{strength}
+
+ Lift it \Ch{F}{up,} be not afraid;
+
+ Lift it \Ch{C}{up,} be not afraid
+
+ Say \Ch{Am}{unto} the \Ch{C}{ci}ties of \Ch{G7}{Judah,}
+
+ ``Behold your \Ch{C}{God,}\Ch{C7}{} Behold your \Ch{F}{God,}
+
+ Be\Ch{C}{hold} \Ch{G7}{your} \Ch{C}{God!''}
+ \end{SBVerse}
+
+ \begin{SBExtraKeys}{
+ \CBPageBrk
+ \CSColBrk
+ \STitle{What A Mighty God We Serve}{D}
+
+ \begin{SBOpGroup}
+ \Ch{D}{What} a mighty God we serve,
+
+ What a mighty God we \Ch{A7}{serve},
+
+ \Ch{D}{An}gels bow before Him,
+
+ \Ch{D}{Hea}ven and earth adore Him,
+
+ \Ch{D}{What} a mighty \Ch{A7}{God} we \Ch{D}{serve!}\Ch{[}{}\Ch{G}{} \Ch{D}{}\Ch{]}{}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ O \Ch{D}{Zion,} O \Ch{G}{Zion,} that \Ch{A7}{bring}est good \Ch{D}{tid}ings,
+
+ Get thee \Ch{G}{up} to into the \Ch{A7}{High} Moun\Ch{D}{tains}
+
+ Je\Ch{D}{ru}salem, Je\Ch{G}{ru}salem, that \Ch{A7}{bring}est good \Ch{D}{tid}ings
+
+ Lift up thy \Ch{G}{voice} with \Ch{A7}{all} thy \Ch{D}{strength}
+
+ Lift it \Ch{G}{up} be not afraid,
+
+ Lift it \Ch{D}{up} be not afraid
+
+ Say \Ch{Bm}{unto} the \Ch{D}{ci}ties of \Ch{A7}{Judah,}
+
+ ``Behold your \Ch{D}{God,}\Ch{D7}{} Behold your \Ch{G}{God,}
+
+ Be\Ch{D}{hold} \Ch{A7}{your} \Ch{D}{God!''}
+ \end{SBVerse}
+ }\end{SBExtraKeys}
+\end{song}
+
+
+\begin{song}{Finally, My Brethren}{D}
+ {}
+ {}
+ {Ephesians~6:10}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBVerse}
+ \Ch{D}{Fi}nally, my brethren, be \Ch{C}{strong} in the \Ch{D}{Lord,}
+
+ \Ch{D}{Fi}nally, my brethren, be \Ch{C}{strong} in the \Ch{D}{Lord,}
+
+ And in the \Ch{G}{pow}er \Ch{A}{of} His \Ch{D}{might,}
+
+ And in the \Ch{G}{pow}er \Ch{A}{of} His \Ch{D}{might.}
+
+ For it is \Ch{G}{God} at \Ch{A}{work} with\Ch{D}{in} you,
+
+ Both to \Ch{G}{will} \Ch{A}{and} to \Ch{D}{do,}
+
+ \Ch{G}{All} his \Ch{A}{glo}rious \Ch{D}{plea}sure.
+
+ His \Ch{G}{\em truth} shall \Ch{A}{sur}ely en\Ch{D}{dure.}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ {\em \ldots strength \ldots}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ {\em \ldots mercy \ldots}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ {\em \ldots grace \ldots}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ \Ch{D}{Fi}nally my brethren be \Ch{C}{strong} in the \Ch{D}{Lord,}
+
+ \Ch{D}{Fi}nally my brethren be \Ch{C}{strong} in the \Ch{D}{Lord,}
+
+ And in the \Ch{G}{pow}er \Ch{A}{of} His \Ch{D}{might,}
+
+ And in the \Ch{G}{pow}er \Ch{A}{of} His \Ch{D}{might,}
+
+ And in the \Ch{G}{pow}er \Ch{A}{of} His \Ch{D}{might.}
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}[C]{The Lord Of Covenant}{Am}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+ \FLineIdx{Lift your hands, for He is Holy}
+
+ \begin{SBOpGroup}
+ \Ch{Am}{Lift} your hands, for \Ch{E}{He} is Holy.
+
+ \Ch{Dm7}{Worship} Him in \Ch{E}{spir}it and \Ch{Am}{truth.}
+
+ For His face, is \Ch{E}{like} the sun,
+
+ \Ch{Dm7}{The} Lord of \Ch{E}{Cove}\Ch{Am}{nant.}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ \Ch{Dm}{Clap} your hands and \Ch{G}{shout} in victo\Ch{C}{ry,}
+
+ For the Lamb was \Ch{E}{slain} but lives.
+
+ \Ch{Dm7}{Dance} for joy and \Ch{G}{give} Him thanks.
+
+ {\SBLyricNoteFont (Men)} For the \Ch{C}{free}dom \ldots
+
+ {\SBLyricNoteFont (Women)} For the freedom His \Ch{E}{life} gives.
+
+ {\SBLyricNoteFont (Men)} For the \Ch{F}{free}dom \ldots
+
+ {\SBLyricNoteFont (Women)} For the freedom His \Ch{E}{life} gives.
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ \Ch{Dm}{Come} you people, \Ch{G}{lift} your voices, \Ch{C}{}
+
+ Praise Him with your \Ch{E}{hearts} as one.
+
+ \Ch{Dm7}{There} is One who \Ch{G}{turn}ed the key.
+
+ {\SBLyricNoteFont (Men)} And the \Ch{C}{door} \ldots
+
+ {\SBLyricNoteFont (Women)} To His throne is \Ch{E}{open.}
+
+ {\SBLyricNoteFont (Men)} Yes, the \Ch{F}{door} \ldots
+
+ {\SBLyricNoteFont (Women)} To His throne is \Ch{E}{open.}
+ \end{SBVerse}
+
+ \CSColBrk
+ \begin{SBVerse}
+ \Ch{Dm}{He} creates Je\Ch{G}{rusa}lem for re\Ch{C}{joic}ing,
+
+ For re\Ch{E}{joic}ing,
+
+ \Ch{Dm7}{And} her people \Ch{G}{for} gladness.
+
+ {\SBLyricNoteFont (Men)} \Ch{C}{He} \ldots
+
+ {\SBLyricNoteFont (Women)} He is glad in His \Ch{E}{peo}ple.
+
+ {\SBLyricNoteFont (Men)} Yes, \Ch{F}{He} \ldots
+
+ {\SBLyricNoteFont (Women)} He is glad in His \Ch{E}{peo}ple.
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}{We Will Rejoice}{D}
+ {}
+ {}
+ {Song Of Solomon~1:4}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Hosanna! Music Book~II}{\#143}
+
+ \begin{SBOpGroup}
+ \Ch{D}{We} will rejoice in \Ch{G}{You} and be glad,
+
+ \Ch{D}{We} will extol Your \Ch{A7}{love} more than wine
+
+ \Ch{D}{Draw} me after \Ch{D7}{You} and let us \Ch{G}{run} together,
+
+ \Ch{D}{We} will rejoice in \Ch{G}{You} and \Ch{A7}{be} \Ch{D}{glad}
+ \end{SBOpGroup}
+
+ \begin{SBChorus}
+ \Ch{D}{Lift} up the light of Thy \Ch{G}{coun}tenance,
+
+ U\Ch{D}{pon} us O \Ch{A7}{Lord}
+
+ \Ch{D}{Lift} up the light of Thy \Ch{G}{coun}tenance,
+
+ U\Ch{D}{pon} \Ch{A7}{us} O \Ch{D}{Lord} \Ch{G}{} \Ch{D}{}
+ \end{SBChorus}
+\end{song}
+
+
+\begin{song}{Praise Him In His Sanctuary}{Em}
+ {}
+ {}
+ {Psalm~150}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBVerse}
+ Praise Him \Ch{Em}{in} His sanctuary
+
+ Praise Him \Ch{Em}{in} the skies above
+
+ Praise Him \Ch{G}{for} the acts of \Ch{D}{pow}er that He \Ch{Em}{does}
+
+ Praise Him \Ch{Em}{for} surpassing greatness
+
+ With the \Ch{Em}{trum}pet, harp and lyre
+
+ With the \Ch{G}{tam}bourines and \Ch{Am}{dan}cing, praise Him \Ch{Em}{now}
+ \end{SBVerse}
+
+ \begin{SBOpGroup}
+ Come and \Ch{G}{praise} \Ch{D}{Him} \Ch{Bm}{for} the Lord is \Ch{Em}{good}
+
+ And His mercy is \Ch{B7}{ever}\Ch{Em}{lasting}
+
+ Come and \Ch{G}{praise} \Ch{D}{Him} \Ch{Bm}{for} the Lord is \Ch{Em}{good}
+
+ And His mercy is \Ch{B7}{ever}\Ch{Em}{lasting}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ Praise Him \Ch{Em}{with} the clashing cymbals
+
+ Let them \Ch{Em}{hear} it far and near
+
+ With the \Ch{G}{strings} and flutes we'll \Ch{D}{praise} the Lord our \Ch{Em}{God}
+
+ Who with \Ch{Em}{majes}ty is reigning
+
+ He has \Ch{Em}{power} over all
+
+ Give Him \Ch{G}{glory} and be \Ch{Am}{thankful} for His \Ch{Em}{love}
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}{Rise Up}{Em}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ Rise \Ch{Em}{up,} rise up, we are the \Ch{Am}{soldiers} of the \Ch{Em}{cross}
+
+ We are the \Ch{Am}{ones} who are to glorify the \Ch{B7}{King}
+
+ Cre\Ch{Em}{ation} groans for the \Ch{Am}{Sons} of God to \Ch{Em}{come}
+
+ Mani\Ch{Am}{fest}ing all the glory of the \Ch{B7}{King}
+
+ So \Ch{Am}{rise} and shine, for your \Ch{Em}{light} has come,
+
+ And the \Ch{Am}{glor}y of the Lord is u\Ch{Em}{pon} you
+
+ Lift \Ch{Am}{up} your eyes round a\Ch{Em}{bout} and see
+
+ All the \Ch{Am}{nations} are falling at your \Ch{B7}{feet}
+ \end{SBOpGroup}
+
+ \begin{SBChorus}
+ So let's \Ch{Em}{glor}ify the Lord,
+
+ Let's \Ch{Am}{glor}ify the \Ch{Em}{King}
+
+ Let's shout and sing as we \Ch{Am}{take} the victo\Ch{B7}{ry}
+
+ So let's \Ch{Em}{glor}ify the Lord,
+
+ Let's \Ch{Am}{glor}ify the \Ch{Em}{King}
+
+ Let's \Ch{Am}{shout} and \Ch{B7}{take} the victo\Ch{Em}{ry!}
+ \end{SBChorus}
+\end{song}
+
+
+\begin{song}{We Are Marching In Messiah's Band}{Am}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBVerse}
+ We are \Ch{Am}{march}ing, in Messiah's band;
+
+ The keys of \Ch{Am}{vict'ry} in His mighty hand;
+
+ Let us \Ch{Dm}{go} on to take the promised \Ch{Am}{land.}
+
+ Raise the \Ch{Am}{anthem,} sing the victory song;
+
+ Praise the \Ch{Am}{Lord} for the battle's won;
+
+ No \Ch{Dm}{wea}pon formed against Him shall \Ch{Am}{stand.}
+ \end{SBVerse}
+
+ \begin{SBOpGroup}
+ For the \Ch{F}{Cap}tain of the Host is \Ch{C}{Je}sus;
+
+ We are \Ch{F}{fol}lowing in His \Ch{C}{foot}steps.
+
+ No \Ch{F}{foe} can stand a\Ch{Am}{gainst} us in the \Ch{F}{fray.} \Ch{G}{}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{A Song Of Love}{G}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ A \Ch{G}{Song} of \Ch{Em}{Love,} I \Ch{Am7}{sing} to \Ch{D}{You}
+
+ A \Ch{G}{Song} of \Ch{Em}{ado}ration, \Ch{Am7}{to} the \Ch{D}{King}
+
+ You \Ch{Am7}{are} the \Ch{D}{Lord,} the \Ch{G}{Ma}ker \Ch{G/F#}{of} the \Ch{Em}{universe}
+
+ You \Ch{Am7}{are} the \Ch{D}{King} of all \Ch{G}{Kings}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Hail To The King}{D}
+ {1989 Christopher Rath}
+ {Christopher Rath}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{November~22,~1993}
+ \SBRef{New Wine Covenant Church Song Book}{\#70}
+ \FLineIdx{I praise You, Lord, for You are my King}
+
+ \begin{SBVerse}
+ I \Ch{D}{praise} You, Lord, for \Ch{C}{You} are \Ch{G}{my} \Ch{D}{King}
+
+ I \Ch{D}{praise} You, Lord, for \Ch{C}{You} are \Ch{G}{my} \Ch{D}{King}
+ \end{SBVerse}
+
+ \begin{SBOpGroup}
+ All \Ch{C}{hail} to\Ch{G}{} the \Ch{D}{King,}
+
+ All \Ch{C}{hail} to\Ch{G}{} King Je\Ch{D}{\SBen sus}
+
+ All \Ch{C}{hail} to\Ch{G}{} the \Ch{D}{King} of Kings,
+
+ All \Ch{C}{hail} to\Ch{G}{} the \Ch{D}{King}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ We \Ch{D}{praise} You, Lord, For \Ch{C}{You} are \Ch{G}{our} \Ch{D}{King}
+
+ We \Ch{D}{praise} You, Lord, For \Ch{C}{You} are \Ch{G}{our} \Ch{D}{King}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ I \Ch{D}{wor}ship You, my \Ch{C}{Lord} and \Ch{G}{my} \Ch{D}{God}
+
+ I \Ch{D}{wor}ship You, my \Ch{C}{Lord} and \Ch{G}{my} \Ch{D}{God}
+ \end{SBVerse}
+\end{song}
+
+
+\WBPageBrk
+\begin{song}{The Horse And Rider}{C}
+ {1950 Mills Music (music only)}
+ {Anonymous and I.~Miron \&~J.~Grossman}
+ {Exodus~15:1--2}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Songs Of Praise}{\#214}
+ \FLineIdx{I will sing unto the Lord, for He has}
+
+ \ifChordBk
+ {\SBLyricNoteFont This song can be sung as a round. Each part of the
+ round is indicated below as a verse.}
+ \fi
+
+ \begin{SBVerse}
+ \Ch{C}{I} will sing unto the Lord, for \Ch{F}{He} has triumphed \Ch{Dm}{glorious}ly
+
+ The \Ch{G7}{horse} and rider thrown into the \Ch{C}{sea}
+
+ \Ch{C}{I} will sing unto the Lord, for \Ch{F}{He} has triumphed \Ch{Dm}{glorious}ly
+
+ The \Ch{G7}{horse} and rider thrown into the \Ch{C}{sea}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ The \Ch{C}{Lord,} my God, my \Ch{F}{strength,} my \Ch{Dm}{song,}
+
+ Is \Ch{G7}{now} become my victo\Ch{C}{ry}
+
+ The \Ch{C}{Lord,} my God, my \Ch{F}{strength,} my \Ch{Dm}{song,}
+
+ Is \Ch{G7}{now} become my victo\Ch{C}{ry}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ The \Ch{C}{Lord} is God and \Ch{F}{I} will \Ch{Dm}{praise} Him,
+
+ My \Ch{G7}{Father's} God, and \Ch{C}{I} will ex\Ch{G7}{alt} Him!
+
+ The \Ch{C}{Lord} is God and \Ch{F}{I} will \Ch{Dm}{praise} Him,
+
+ My \Ch{G7}{Father's} God, and \Ch{C}{I} will ex\Ch{C}{alt} Him!
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}{Nothing But The Blood}{D}
+ {\SBPubDom}
+ {Robert Lowry}
+ {Ephesians~1:7}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Hosanna! Music Book~I}{\#65}
+ \FLineIdx{What can wash away my sin}
+
+ \begin{SBVerse}
+ \Ch{D}{What} can wash a\Ch{F#m}{way} my \Ch{Bm}{sin?}
+
+ \Ch{G}{Noth}ing but the \Ch{D}{blood} of \Chr{A7}{Je}\Ch{D}{sus.}
+
+ \Ch{D}{What} can make me \Ch{F#m}{whole} a\Ch{Bm}{gain?}
+
+ \Ch{G}{Noth}ing but the \Ch{D}{blood} of \Chr{A7}{Je}\Ch{D}{sus.}
+ \end{SBVerse}
+
+ \begin{SBOpGroup}
+ \Ch{D}{Oh,} Precious \Ch{F#m}{is} the \Ch{Bm}{flow}
+
+ \Ch{G}{That} \Ch{Em}{makes} me \Ch{A}{white} as \Ch{D}{snow.}\Ch{A7}{}
+
+ \Ch{D}{No} other \Ch{F#m}{fount} I \Ch{Bm}{know,}
+
+ \Ch{G}{Noth}ing but the \Ch{D}{blood} of \Chr{A7}{Je}\Ch{D}{sus.}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ \Ch{D}{This} is all my \Ch{F#m}{righteous}\Ch{Bm}{ness,}
+
+ \Ch{G}{Noth}ing but the \Ch{D}{blood} of \Chr{A7}{Je}\Ch{D}{sus.}
+
+ \Ch{D}{This} is all my \Ch{F#m}{hope} and \Ch{Bm}{peace,}
+
+ \Ch{G}{Noth}ing but the \Ch{D}{blood} of \Chr{A7}{Je}\Ch{D}{sus.}
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}{Far Above All Rule And Authority}{C}
+ {}
+ {}
+ {Ephesians~1:20--21;~2:6}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ Far a\Ch{C}{bove} all rule and au\Ch{F}{thor}ity, and \Ch{C}{po}wer and do\Ch{G7}{min}\Ch{C}{ion}
+
+ Far a\Ch{C}{bove} all rule and au\Ch{F}{thor}ity, and \Ch{C}{po}wer and do\Ch{G7}{min}\Ch{C}{ion}
+
+ And every \Ch{F}{name} that is \Ch{G7}{nam}ed, not \Ch{C}{on}ly in this age
+
+ But \Ch{F}{al}so in the \Ch{G7}{one} to \Ch{C}{come}
+
+ And every \Ch{F}{name} that is \Ch{G7}{nam}ed, not \Ch{C}{on}ly in this age
+
+ But \Ch{F}{al}so in the \Ch{G7}{one} to \Ch{C}{come}
+
+ Christ is \Ch{C}{seat}\Ch{G}{ed} at the \Ch{C}{Fa}ther's right hand,
+
+ In \Chr{F}{hea}\Chr{G7}{}venly \Ch{C}{pla}ces.
+
+ We are \Ch{C}{seat}ed with \Ch{G}{Him,} at the \Ch{C}{Fa}ther's right hand,
+
+ In \Chr{F}{hea}\Chr{G7}{}venly \Ch{C}{pla}ces.
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Sing Hallelujah}{D}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Scripture In Song Volume~II}{\#167}
+
+ \begin{SBOpGroup}
+ \Ch{D}{Sing} Halle\Ch{G}{lu}jah, \Ch{D}{sing} halle\Ch{A7}{lujah,}
+
+ \Ch{D}{sing} halle\Ch{G}{lu}jah, there's \Ch{D}{joy} \Ch{A7}{in} the \Ch{D}{Lord}
+ \end{SBOpGroup}
+
+ \begin{SBVerse}
+ There \Ch{D}{is} a king in \Ch{G}{Zion,}
+
+ There \Ch{D}{is} a king in \Ch{A7}{Zion,}
+
+ There \Ch{D}{is} a king in \Ch{G}{Zion},
+
+ The \Ch{D}{Ci}ty \Ch{A7}{of} our \Ch{D}{God!}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ There's \Ch{D}{oil} and wine in \Ch{G}{Zion,}
+
+ There's \Ch{D}{oil} and wine in \Ch{A7}{Zion,}
+
+ There's \Ch{D}{oil} and wine in \Ch{G}{Zion,}
+
+ The \Ch{D}{Ci}ty \Ch{A7}{of} our \Ch{D}{God!}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ \Ch{D}{Let's} go up to \Ch{G}{Zion,}
+
+ \Ch{D}{Let's} go up to \Ch{A7}{Zion,}
+
+ \Ch{D}{Let's} go up to \Ch{G}{Zion},
+
+ The \Ch{D}{Ci}ty \Ch{A7}{of} our \Ch{D}{God!}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ The \Ch{D}{church} is built on \Ch{G}{Zion,}
+
+ The \Ch{D}{church} is built on \Ch{A7}{Zion}
+
+ The \Ch{D}{church} is built on \Ch{G}{Zion,}
+
+ The \Ch{D}{City} \Ch{A7}{of} our \Ch{D}{God!}
+ \end{SBVerse}
+\end{song}
+
+
+\begin{song}{Zephaniah 3:17}{G}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+ \FLineIdx{The Lord your God is in your midst}
+
+ \begin{SBOpGroup}
+ \Ch{G}{} The Lord your \Ch{D}{God} is \Ch{Em}{in} your midst,
+
+ \Ch{G}{} The Lord of \Ch{D}{lords,} who sa\Ch{Em}{ves,}
+
+ \Ch{G}{} He will ex\Ch{D}{ult} over \Ch{Em}{you} with joy,
+
+ \Ch{C}{} He will renew you \Ch{D}{in} His love,
+
+ \Ch{C}{} He will rejoice over \Ch{D}{you,}
+
+ With shouts of \Ch{G}{joy,} \Ch{D}{} \Ch{Em}{} with shouts of \Ch{G}{joy,} \Ch{D}{} \Ch{Em}{}
+
+ With shouts of \Ch{C}{joy,} \Ch{D}{} with shouts of \Ch{C}{joy,} \Ch{D}{}
+
+ With shouts of \Ch{G}{joy!}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Come And Let Us Go}{D}
+ {}
+ {}
+ {Micah 4:2}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ \Ch{D}{Come} and let us \Ch{Bm}{go} to the \Ch{Em}{moun}tain of the \Ch{A7}{Lord,}
+
+ And \Ch{Em}{to} the \Ch{A7}{house} of our \Ch{D}{God.}
+
+ \Ch{D}{Come} and let us \Ch{Bm}{go} to the \Ch{Em}{moun}tain of the \Ch{A7}{Lord,}
+
+ And \Ch{Em}{to} the \Ch{A7}{house} of our \Ch{D}{God.}
+
+ And \Ch{G}{He} will \Ch{A}{teach} us of His \Ch{D}{ways,} \Ch{D7}{}
+
+ And \Ch{G}{we} will \Ch{A}{walk} in His \Ch{D}{paths.} \Ch{D7}{}
+
+ And the \Ch{G}{law} shall go \Ch{A}{forth} from \Ch{D}{Zi}\Ch{Bm}{on,}
+
+ And the \Ch{Em}{Word} of the \Ch{A}{Lord} from Jerusa\Ch{D}{lem.}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Behold, I Am The Lord}{D}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Sounds Of Zion}{Volume~III}
+
+ \begin{SBOpGroup}
+ Be\Ch{D}{hold,} I am the \Ch{F#m}{Lord,} the \Ch{G}{God} of all \Ch{A}{flesh.}
+
+ Is there \Ch{D}{any}thing,\Ch{D7}{} is there \Ch{G}{any}thing,\Ch{Em}{} \Ch{Gm}{too} \Ch{D}{hard} \Ch{A}{for} \Ch{D}{Me?}
+
+ Is there \Ch{D}{any}thing, \Ch{G}{any}thing, \Ch{D}{any}thing, too hard \Ch{G}{for} \Ch{A}{Me?}
+
+ \Ch{A7}{Is} there \Ch{D}{any}thing, \Ch{G}{any}thing, \Ch{D}{any}thing,\Ch{Bm7}{} \Ch{Gm}{too} \Ch{D/A}{hard} \Ch{A}{for} \Ch{D}{Me?}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Stand Up And Bless}{D}
+ {}
+ {}
+ {Nehemiah 9:5}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Hosanna! Music Book~IV}{\#332}
+
+ \begin{SBOpGroup}
+ Stand \Ch{D}{up} and bless the \Ch{Em}{Lord} your God
+
+ From ever\Ch{A}{last}ing to ever\Ch{D}{last}ing
+
+ Stand \Ch{D}{up} and bless the \Ch{Em}{Lord} your God
+
+ From ever\Ch{A}{last}ing to ever\Ch{D}{last}ing
+ \end{SBOpGroup}
+
+\WBPageBrk
+ \begin{SBChorus}
+ And \Ch{G}{ble}ssed be your glorious \Ch{D}{name,} O Lord
+
+ Which is e\Ch{Em}{xalted}\Ch{A}{} above all \Ch{D}{ble}ssing and \Ch{D7}{praise}
+
+ And \Ch{G}{ble}ssed be your glorious \Ch{D}{name,} O Lord
+
+ Which is e\Ch{Em}{xalted,}\Ch{A}{} which is e\Chr{G/D}{xal}\Ch{D}{ted}
+ \end{SBChorus}
+\end{song}
+
+
+\begin{song}{Jesus Is The Lord}{G}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ \Ch{G}{Je}sus is the \Ch{G7}{Lord}
+
+ \Ch{C}{Je}sus the Lord \Ch{Am}{reigns}
+
+ \Ch{D}{We} shall take the \Ch{D7}{king}doms of this \Ch{G}{world} \Ch{C}{in} His \Ch{G}{name} \Ch{D7}{}
+
+ \Ch{G}{Ev}ery tribe and \Ch{G7}{nation}
+
+ \Ch{C}{Ev}ery situ\Ch{Am}{ation}
+
+ \Ch{D}{Must} declare that \Ch{D7}{Jesus} is the \Ch{G}{Lord} \Ch{G7}{}
+ \end{SBOpGroup}
+
+ \begin{SBChorus}
+ For the \Ch{C}{Lord} \Ch{G}{our} \Ch{D}{God} has de\Ch{G}{liver}ed Him from \Ch{Em}{death}
+
+ And es\Ch{Am}{tablish}ed \Ch{D}{Je}sus as \Ch{G}{Lord} \Ch{G7}{}
+
+ He has \Ch{C}{gi}ven \Ch{G}{Him} the \Ch{D}{po}wer over \Ch{G}{all} that He has \Ch{Em}{made}
+
+ For our \Ch{Am}{God} has \Ch{D}{made} His Christ the \Ch{G}{Lord}
+ \end{SBChorus}
+\end{song}
+
+
+\begin{song}{I Will Sing Praises}{G}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ \Ch{G}{} I will sing \Ch{C}{prais}es,
+
+ \Ch{G}{} I will sing \Ch{C}{prais}es,
+
+ \Ch{G}{} I will sing \Ch{C}{prais}es \Ch{D}{to} my \Ch{G}{God}
+
+ \Ch{G}{} I will sing \Ch{C}{prais}es,
+
+ \Ch{G}{} I will sing \Ch{C}{prais}es,
+
+ \Ch{G}{} I will sing \Ch{C}{prais}es \Ch{D}{to} my \Ch{G}{God}
+
+ \Ch{G}{} And when He \Ch{C}{comes} a\Ch{D}{gain,}
+
+ \Ch{G}{} The rocks will not \Ch{C}{have} to \Ch{D}{cry} out
+
+ \Ch{G}{} His people will \Ch{C}{shout} the mighty \Ch{D}{name}
+
+ Of the King of \Ch{Em}{Glor}y
+
+ \Ch{G}{} When the mountains \Ch{C}{sing} forth
+
+ \Ch{G}{} And all the trees \Ch{C}{clap} their hands
+
+ \Ch{G}{} His people will \Ch{C}{shout} the name
+
+ Of the \Ch{D}{beau}ty of holiness:
+
+ \Ch{D7}{Jesus} Christ is His \Ch{G}{name!}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Let God Be Magnified}{G}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ Let \Ch{G}{all} those that seek Thee rejoice and be glad
+
+ In \Ch{Am}{Thee}, In \Ch{D7}{Thee}
+
+ And \Ch{G}{let} such as love thy salvation, say
+
+ Continual\Ch{Am}{ly,} continual\Ch{D7}{ly,}
+
+ \Ch{C}{}``Let God be magnified, \Ch{G}{}let God be magnified,
+
+ \Ch{Am}{Let} God be magni\Ch{D7}{fied.''}
+
+ \Ch{C}{}``Let God be magnified, \Ch{G}{}let God be magnified,
+
+ \Ch{Am}{Let} God be \Ch{D7}{mag}ni\Ch{G}{fied.''}\Ch{C}{} \Ch{G}{}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{There's A Light Shining Forth}{D}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ There's a light shining \Ch{D}{forth,}
+
+ I can see it on the ho\Ch{Em}{rizon;} \Ch{A7}{}
+
+ It's the army of \Ch{Em}{God,} \Ch{A}{} preparing for \Ch{D}{war;}
+
+ Coming conquering vic\Ch{F#m}{torious,} \Ch{D7}{}
+
+ O'er the army of \Ch{G}{sa}tan; \Ch{Em}{}
+
+ Nothing shall \Ch{D}{stand,}\Ch{A7}{} before the army of \Ch{D}{God.} \Ch{G}{} \Ch{D}{}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{How Great Is Our God}{D}
+ {\SBPubDom}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Worship Him~II}{\#65}
+
+ \begin{SBOpGroup}
+ \Ch{D}{How} great is our \Ch{A7}{God!} How great is His \Ch{D}{name}\Ch{G}{} \Ch{D}{}
+
+ How great is our \Ch{A7}{God!} Forever the \Ch{D}{same}\Ch{G}{} \Ch{D}{}
+
+ He rolled back the \Ch{D}{wa}te\Ch{D7}{rs,} of the mighty Red \Ch{G}{Sea}
+
+ And He said, ``I'll never \Ch{D}{leave} you,\Ch{A7}{}
+
+ Put your trust in \Ch{D}{Me!''} \Ch{[}{}\Ch{G}{} \Ch{D}{}\Ch{]}{}
+ \end{SBOpGroup}
+
+ \begin{SBExtraKeys}{
+ \STitle{How Great Is Our God}{E}
+
+ \begin{SBOpGroup}
+ \Ch{E}{How} great is our \Ch{B7}{God!} How great is His \Ch{E}{name}\Ch{A}{} \Ch{E}{}
+
+ How great is our \Ch{B7}{God!} Forever the \Ch{E}{same}\Ch{A}{} \Ch{E}{}
+
+ He rolled back the \Ch{E}{wa}te\Ch{E7}{rs,} of the mighty Red \Ch{A}{Sea}
+
+ And He said, ``I'll never \Ch{E}{leave} you,\Ch{B7}{}
+
+ Put your trust in \Ch{E}{Me!''} \Ch{[}{}\Ch{A}{} \Ch{E}{}\Ch{]}{}
+ \end{SBOpGroup}
+ }\end{SBExtraKeys}
+\end{song}
+
+
+\begin{song}{Lift Jesus Higher}{E}
+ {}
+ {}
+ {}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ Lift Jesus \Ch{E}{high}\Ch{A}{er.} \Ch{E}{} Lift Jesus \Ch{E}{high}\Ch{A}{er.} \Ch{E}{}
+
+ Lift Him up for the world to \Ch{B7}{see.}
+
+ He said, ``If \Ch{E}{I} \Ch{E7}{} be lifted \Ch{A}{up} from the earth,
+
+ I will \Ch{E}{draw} all \Ch{B7}{men} unto \Ch{E}{me}.''
+ \end{SBOpGroup}
+\end{song}
+
+
+\WBPageBrk
+\begin{song}{Garment Of Praise}{C}
+ {}
+ {}
+ {Isaiah~61:3}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+ \FLineIdx{I have put on my garment of praise}
+
+ \begin{SBOpGroup}
+ I have \Ch{C}{put} on my garment of \Ch{G7}{praise,}
+
+ I have \Ch{G7}{put} on my garment of \Ch{C}{prai}\Ch{C7}{se}
+
+ And the \Ch{F}{spirit} of heaviness, is \Ch{C}{gone} from \Ch{Am}{me.}
+
+ I have \Ch{C}{put} on my \Ch{G7}{gar}ment of \Ch{C}{praise!} \ChX{[}{}\ChX{F}{} \ChX{C}{}\ChX{]}{}
+ \end{SBOpGroup}
+
+ \begin{SBExtraKeys}{
+ \STitle{Garment Of Praise}{D}
+
+ \begin{SBOpGroup}
+ I have \Ch{D}{put} on my garment of \Ch{A7}{praise,}
+
+ I have \Ch{A7}{put} on my garment of \Ch{D}{prai}\Ch{D7}{se}
+
+ And the \Ch{G}{spirit} of heaviness, is \Ch{D}{gone} from \Ch{Bm}{me.}
+
+ I have \Ch{D}{put} on my \Ch{A7}{gar}ment of \Ch{D}{praise!} \Ch{[}{}\Ch{G}{} \Ch{D}{}\Ch{]}{}
+ \end{SBOpGroup}
+ }\end{SBExtraKeys}
+\end{song}
+
+
+\begin{song}{I Was Glad}{C}
+ {}
+ {}
+ {Psalm 122:1}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ %\SBRef{}{}
+
+ \begin{SBOpGroup}
+ I was \Ch{C}{glad,} very glad, when they \Ch{F}{said} unto me
+
+ Let us \Ch{G7}{go,} into the house of the \Ch{C}{Lord,} today
+
+ There is singing, there is \Ch{C7}{danc}ing, there is \Ch{F}{vic}tory
+
+ In the \Ch{G7}{house} of the Lord, to\Ch{C}{day!}
+ \end{SBOpGroup}
+\end{song}
+
+
+\begin{song}{Oh, The Blood}{C}
+ {\SBPubDom}
+ {}
+ {Psalm 51:7}
+ {\NotCCLIed}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \SBRef{Hosanna! Music Book~I}{\#68}
+
+ \begin{SBOpGroup}
+ \Ch{C}{Oh} the blood \Ch{F}{of} \Ch{C}{Jesus.}
+
+ \Ch{G7}{Oh} the blood of \Ch{C}{Jesus.}
+
+ Oh the blood \Ch{F}{of} \Chr{C}{Je}\Ch{Am}{sus.}
+
+ It \Ch{Dm}{wash}es \Ch{G7}{white} as \Ch{C}{snow.}
+ \end{SBOpGroup}
+
+ \begin{SBExtraKeys}{
+ \STitle{Oh, The Blood}{D}
+
+ \begin{SBOpGroup}
+ \Ch{D}{Oh} the blood \Ch{G}{of} \Ch{D}{Jesus.}
+
+ \Ch{A7}{Oh} the blood of \Ch{D}{Jesus.}
+
+ Oh the blood \Ch{G}{of} \Chr{D}{Je}\Ch{Bm}{sus.}
+
+ It \Ch{Em}{wash}es \Ch{A7}{white} as \Ch{D}{snow.}
+ \end{SBOpGroup}
+
+ %%%
+ \STitle{Oh, The Blood}{E}
+
+ \begin{SBOpGroup}
+ \Ch{E}{Oh} the blood \Ch{A}{of} \Ch{E}{Jesus.}
+
+ \Ch{B7}{Oh} the blood of \Ch{E}{Jesus.}
+
+ Oh the blood \Ch{A}{of} \Chr{E}{Je}\Ch{C#m}{sus.}
+
+ It \Ch{F#m}{wash}es \Ch{B7}{white} as \Ch{E}{snow.}
+ \end{SBOpGroup}
+
+\CBPageBrk
+ %%%
+ \STitle{Oh, The Blood}{F}
+
+ \begin{SBOpGroup}
+ \Ch{Eb}{Oh} the blood \Ch{Ab}{of} \Ch{Eb}{Jesus.}
+
+ \Ch{Bb7}{Oh} the blood of \Ch{Eb}{Jesus.}
+
+ Oh the blood \Ch{Ab}{of} \Chr{Eb}{Je}\Ch{Cm}{sus.}
+
+ It \Ch{Fm}{wash}es \Ch{Bb7}{white} as \Ch{Eb}{snow.}
+ \end{SBOpGroup}
+ }\end{SBExtraKeys}
+\end{song}
+
+
+\begin{song}{You Alone}{C}
+ {1992 Glory Alleluia Music}
+ {Christopher Rath}
+ {Revelation 4:8}
+ {Used by Permission}
+
+ \renewcommand{\RevDate}{February~11,~1993}
+ \FLineIdx{Holy, Holy, You alone are Holy}
+
+ \begin{SBVerse}
+ \Ch{C}{Ho}\Ch{Em}{ly,} \Ch{F}{Ho}\Ch{C}{ly,} \Ch{F}{} You alone are \Ch{C}{Ho}\Ch{G}{ly.}
+
+ \Ch{C}{Ho}\Ch{Em}{ly,} \Ch{F}{Ho}\Ch{C}{ly,} \Ch{F}{} You alone are \Chr{Am}{Ho}\Ch{G}{ly.}
+
+ Al\Ch{F}{migh}ty God\Ch{C}{} I \Ch{E}{wor}ship You\Ch{Am}{}
+
+ For \Ch{F}{You} a\Ch{G}{lone,} \Ch{F}{You} a\Ch{G}{lone} are \Chr{Dm}{Ho}\Chr{G}{}\Ch{C}{ly.} \Ch{F}{}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ \Ch{C}{Wor}\Ch{Em}{thy,} \Ch{F}{Wor}\Ch{C}{thy,} \Ch{F}{}You alone are \Ch{C}{Wor}\Ch{G}{thy.}
+
+ \Ch{C}{Wor}\Ch{Em}{thy,} \Ch{F}{Wor}\Ch{C}{thy,} \Ch{F}{}You alone are \Ch{Am}{Wor}\Ch{G}{thy.}
+
+ Who \Ch{F}{was,} who is,\Ch{C}{} and \Ch{E}{is} to come.\Ch{Am}{}
+
+ \Ch{F}{You} a\Ch{G}{lone,} \Ch{F}{You} a\Ch{G}{lone} are \Chr{Dm}{Wor}\Chr{G}{}\Ch{C}{thy.} \Ch{[}{}\Ch{F}{}\Ch{]}{} \Ch{[{$^{Mod.}$}}{}\Ch{A7}{}\Ch{]}{}
+ \end{SBVerse}
+
+ \begin{SBExtraKeys}{%
+ \STitle{You Alone}{D}
+
+ \begin{SBVerse}
+ \Ch{D}{Ho}\Ch{F#m}{ly,} \Ch{G}{Ho}\Ch{D}{ly,} \Ch{G}{} You alone are \Ch{D}{Ho}\Ch{A}{ly.}
+
+ \Ch{D}{Ho}\Ch{F#m}{ly,} \Ch{G}{Ho}\Ch{D}{ly,} \Ch{G}{} You alone are \Chr{Bm}{Ho}\Ch{A}{ly.}
+
+ Al\Ch{G}{migh}ty God\Ch{D}{} I \Ch{F#}{wor}ship You\Ch{Bm}{}
+
+ For \Ch{G}{You} a\Ch{A}{lone,} \Ch{G}{You} a\Ch{A}{lone} are \Chr{Em}{Ho}\Chr{A}{}\Ch{D}{ly.} \Ch{G}{}
+ \end{SBVerse}
+ }\end{SBExtraKeys}
+
+\CBPageBrk
+ \begin{xlatn}{Tu Es Saint}
+ {}
+ {Translation by Jocelyne Sarrazin}
+ \renewcommand{\RevDate}{8~April,~1998}
+
+ \begin{SBVerse}
+ \Ch{C}{Tu} es \Ch{Em}{Saint,} \Ch{F}{Tu} es \Ch{C}{Saint,}\Ch{F}{} Tu es Saint O \Ch{C}{Sei}\Ch{G}{gneur.}
+
+ \Ch{C}{Tu} es \Ch{Em}{Saint,} \Ch{F}{Tu} es \Ch{C}{Saint,}\Ch{F}{} Tu es Saint O \Chr{Am}{Sei}\Ch{G}{gneur.}
+
+ Dieu \Ch{F}{Tout-}Puissant\Ch{C}{} soit \Ch{E}{glo}rifi\'e,\Ch{Am}{}
+
+ Car \Ch{F}{Tu} es tr\'es \Ch{G}{Saint,} \Ch{F}{Tu} es tr\'es \Ch{G}{Saint,} O oui \Ch{Dm}{Saint}\Ch{G}{} O Sei\Ch{C}{gneur.}\Ch{F}{}
+ \end{SBVerse}
+
+ \begin{SBVerse}
+ \Ch{C}{Tu} es \Ch{Em}{Digne,} \Ch{F}{Tu} es \Ch{C}{Digne,} Tu es Digne O \Ch{C}{Sei}\Ch{G}{gneur.}
+
+ \Ch{C}{Tu} es \Ch{Em}{Digne,} \Ch{F}{Tu} es \Ch{C}{Digne,} Tu es Digne O \Chr{Am}{Sei}\Ch{G}{gneur.}
+
+ Toi \Ch{F}{qui} \'etais,\Ch{C}{} qui \Ch{E}{es} et vien,\Ch{Am}{}
+
+ \Ch{F}{\'{A}} Toi l'hon\Ch{G}{neur,} \Ch{F}{\`a} Toi la \Ch{G}{gloire,} \`a Toi \Ch{Dm}{seul}\Ch{G}{} O Sei\Ch{C}{gneur.}\Ch{F}{}
+ \end{SBVerse}
+ \end{xlatn}
+\end{song}
+
+
+\end{document}
+\bye
+%
+%%%
+% Document ends.
+%%%
diff --git a/macros/latex/contrib/songbook/sampleAdx.pdf b/macros/latex/contrib/songbook/sampleAdx.pdf
new file mode 100644
index 0000000000..e8da28f325
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleAdx.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleAdx.tex b/macros/latex/contrib/songbook/sampleAdx.tex
new file mode 100644
index 0000000000..ce9831d3ad
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleAdx.tex
@@ -0,0 +1,126 @@
+%%%%%% rcsid = @(#)$Id:$
+%%%%%%
+%%
+%% ================================
+%% Sample Key Index (sampleAdx.tex)
+%% ================================
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file is provided as a template for Song Artist
+%% Index generation.
+%%
+%%%%%%
+%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,twocolumn]{book}
+\usepackage{latexsym,fancyhdr}
+\usepackage[wordbk]{songbook}
+
+%%%
+% Revision Date and Release Date definitions.
+%
+% \RelDate - The last time this songbook was released.
+% \RevDate - The last time this file was revised in any way.
+%%%
+\newcommand{\RelDate}{30~May'96}
+\newcommand{\RevDate}{\RelDate}
+
+%%%
+% Redefine fonts from SongBook style that I don't like, and define
+% any extra fonts I require.
+%%%
+\font\myTinySF=cmss8 at 8pt
+\font\myHugeSF=cmssbx10 at 25pt
+\renewcommand{\CpyRtInfoFont}{\tiny\myTinySF}
+\newcommand{\myTitleFont}{\Huge\myHugeSF}
+\newcommand{\mySubTitleFont}{\large\sf}
+
+%%%
+% 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}
+
+\addtolength{\headwidth}{\marginparsep}
+\addtolength{\headwidth}{\marginparwidth}
+\renewcommand{\footrulewidth}{0.4pt}
+\lhead{\LHeadFont A Church Songbook}
+ \chead{\CHeadFont Artist~Index({\rm\thepage})}
+ \rhead{\RHeadFont\RelDate}
+
+\lfoot{\LFootFont Property of a Church}
+ \cfoot{\CFootFont Last Revised: \RevDate}
+ \rfoot{\RFootFont Material used by permission.}
+
+
+%%%
+% Index entries command definition.
+%%%
+\renewcommand{\item}{\par\hangindent=40pt}
+\renewcommand{\subitem}{\par\hangindent=40pt \hspace*{20pt}}
+\renewcommand{\subsubitem}{\par\hangindent=40pt \hspace*{30pt}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Index begins.
+%%%
+{\parindent 8pt
+ {\myTitleFont --- Artist Index ---}}\par
+\vskip 20pt
+
+\input{sample-sb.adx}
+
+\end{document}
+\bye
+%
+%%%
+% Document ends.
+%%%
+
+% 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/sampleCBK.pdf b/macros/latex/contrib/songbook/sampleCBK.pdf
new file mode 100644
index 0000000000..898cf1a8d1
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleCBK.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleCSBK.pdf b/macros/latex/contrib/songbook/sampleCSBK.pdf
new file mode 100644
index 0000000000..25d04a616d
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleCSBK.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleKdx.pdf b/macros/latex/contrib/songbook/sampleKdx.pdf
new file mode 100644
index 0000000000..07279aae39
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleKdx.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleKdx.tex b/macros/latex/contrib/songbook/sampleKdx.tex
new file mode 100644
index 0000000000..dc93ac9aba
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleKdx.tex
@@ -0,0 +1,126 @@
+%%%%%% rcsid = @(#)$Id: sampleKdx.tex,v 1.16 2010-04-12 18:04:30 rathc Exp $
+%%%%%%
+%%
+%% ================================
+%% Sample Key Index (sampleKdx.tex)
+%% ================================
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file is provided as a template for Song Key
+%% Index generation.
+%%
+%%%%%%
+%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,twocolumn]{book}
+\usepackage{latexsym,fancyhdr}
+\usepackage[wordbk]{songbook}
+
+%%%
+% Revision Date and Release Date definitions.
+%
+% \RelDate - The last time this songbook was released.
+% \RevDate - The last time this file was revised in any way.
+%%%
+\newcommand{\RelDate}{30~May'96}
+\newcommand{\RevDate}{\RelDate}
+
+%%%
+% Redefine fonts from SongBook style that I don't like, and define
+% any extra fonts I require.
+%%%
+\font\myTinySF=cmss8 at 8pt
+\font\myHugeSF=cmssbx10 at 25pt
+\renewcommand{\CpyRtInfoFont}{\tiny\myTinySF}
+\newcommand{\myTitleFont}{\Huge\myHugeSF}
+\newcommand{\mySubTitleFont}{\large\sf}
+
+%%%
+% 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}
+
+\addtolength{\headwidth}{\marginparsep}
+\addtolength{\headwidth}{\marginparwidth}
+\renewcommand{\footrulewidth}{0.4pt}
+\lhead{\LHeadFont A Church Songbook}
+ \chead{\CHeadFont Key~Index({\rm\thepage})}
+ \rhead{\RHeadFont\RelDate}
+
+\lfoot{\LFootFont Property of a Church}
+ \cfoot{\CFootFont Last Revised: \RevDate}
+ \rfoot{\RFootFont Material used by permission.}
+
+
+%%%
+% Index entries command definition.
+%%%
+\renewcommand{\item}{\par\hangindent=40pt}
+\renewcommand{\subitem}{\par\hangindent=40pt \hspace*{20pt}}
+\renewcommand{\subsubitem}{\par\hangindent=40pt \hspace*{30pt}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Index begins.
+%%%
+{\parindent 8pt
+ {\myTitleFont --- Key Index ---}}\par
+\vskip 20pt
+
+\input{sample-sb.kdx}
+
+\end{document}
+\bye
+%
+%%%
+% Document ends.
+%%%
+
+% 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/sampleOH.pdf b/macros/latex/contrib/songbook/sampleOH.pdf
new file mode 100644
index 0000000000..626777f3f1
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleOH.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleTdx.pdf b/macros/latex/contrib/songbook/sampleTdx.pdf
new file mode 100644
index 0000000000..b522c73563
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleTdx.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleTdx.tex b/macros/latex/contrib/songbook/sampleTdx.tex
new file mode 100644
index 0000000000..20ccb5e002
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleTdx.tex
@@ -0,0 +1,121 @@
+%%%%%% rcsid = @(#)$Id: sampleTdx.tex,v 1.18 2010-04-12 18:04:31 rathc Exp $
+%%%%%%
+%%
+%% ===============================================
+%% Sample Title & First Line Index (sampleTdx.tex)
+%% ===============================================
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file is provided as a template for Title and First Line
+%% Index generation.
+%%
+%%%%%%
+%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,twocolumn]{book}
+\usepackage{latexsym,fancyhdr}
+\usepackage[wordbk]{songbook}
+
+
+%%%
+% Revision Date and Release Date definitions.
+%
+% \RelDate - The last time this songbook was released.
+% \RevDate - The last time this file was revised in any way.
+%%%
+\newcommand{\RelDate}{30 May'96}
+\newcommand{\RevDate}{\today}
+
+%%%
+% Redefine fonts from SongBook style that I don't like, and define
+% any extra fonts I require.
+%%%
+\font\myTinySF=cmss8 at 8pt
+\font\myHugeSF=cmssbx10 at 25pt
+\renewcommand{\CpyRtInfoFont}{\tiny\myTinySF}
+\newcommand{\myTitleFont}{\Huge\myHugeSF}
+\newcommand{\mySubTitleFont}{\large\sf}
+
+%%%
+% 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}
+
+\addtolength{\headwidth}{\marginparsep}
+\addtolength{\headwidth}{\marginparwidth}
+\renewcommand{\footrulewidth}{0.4pt}
+\lhead{\LHeadFont A Church Songbook}
+ \chead{\CHeadFont Title~Index({\rm\thepage})}
+ \rhead{\RHeadFont\RelDate}
+
+\lfoot{\LFootFont Property of a Church}
+ \cfoot{\CFootFont Last Revised: \RevDate}
+ \rfoot{\RFootFont Material used by permission.}
+
+%%%
+% Index entries command definition.
+%%%
+\renewcommand{\item}{\par\hangindent=40pt}
+\renewcommand{\subitem}{\par\hangindent=40pt \hspace*{20pt}}
+\renewcommand{\subsubitem}{\par\hangindent=40pt \hspace*{30pt}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Begin the Index.
+%%%
+{\parindent 8pt
+ {\myTitleFont --- Title Index ---}}\par
+\vskip 5pt
+{\parindent 20pt
+ {\mySubTitleFont --- with first lines in italic ---}}
+\vskip 20pt
+
+\input{sample-sb.tdx}
+
+\end{document}
+\bye
+%
+%%%
+% Document ends.
+%%%
diff --git a/macros/latex/contrib/songbook/sampleToc.pdf b/macros/latex/contrib/songbook/sampleToc.pdf
new file mode 100644
index 0000000000..9d615b8cc9
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleToc.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/sampleToc.tex b/macros/latex/contrib/songbook/sampleToc.tex
new file mode 100644
index 0000000000..2d9bf001a7
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleToc.tex
@@ -0,0 +1,117 @@
+%%%%%% rcsid = @(#)$Id: sampleToc.tex,v 1.18 2010-04-12 18:04:32 rathc Exp $
+%%%%%%
+%%
+%% ========================================
+%% Sample Table Of Contents (sampleToc.tex)
+%% ========================================
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file is provided as a template for Table of Contents
+%% generation.
+%%
+%%%%%%
+%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P R E A M B L E B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[12pt,twocolumn]{book}
+\usepackage{latexsym,fancyhdr}
+\usepackage[wordbk]{songbook}
+
+%%%
+% Revision Date and Release Date definitions.
+%
+% \RelDate - The last time this songbook was released.
+% \RevDate - The last time this file was revised in any way.
+%%%
+\newcommand{\RelDate}{30 May'96}
+\newcommand{\RevDate}{\today}
+
+%%%
+% Redefine fonts from SongBook style that I don't like, and define
+% any extra fonts I require.
+%%%
+\font\myTinySF=cmss8 at 8pt
+\font\myHugeSF=cmssbx10 at 25pt
+\renewcommand{\CpyRtInfoFont}{\tiny\myTinySF}
+\newcommand{\myTitleFont}{\Huge\myHugeSF}
+\newcommand{\mySubTitleFont}{\large\sf}
+
+%%%
+% 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}
+
+\addtolength{\headwidth}{\marginparsep}
+\addtolength{\headwidth}{\marginparwidth}
+\renewcommand{\footrulewidth}{0.4pt}
+\lhead{\LHeadFont A Church Songbook}
+ \chead{\CHeadFont Table~Of~Contents({\rm\thepage})}
+ \rhead{\RHeadFont\RelDate}
+
+\lfoot{\LFootFont Property of a Church}
+ \cfoot{\CFootFont Last Revised: \RevDate}
+ \rfoot{\RFootFont Material used by permission.}
+
+%%%
+% Index entries command definition.
+%%%
+\renewcommand{\item}{\par\hangindent=40pt}
+\renewcommand{\subitem}{\par\hangindent=40pt \hspace*{20pt}}
+\renewcommand{\subsubitem}{\par\hangindent=40pt \hspace*{30pt}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D O C U M E N T B E G I N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%
+% Begin the Table Of Contents.
+%%%
+{\parindent 10pt
+ {\myTitleFont --- Contents ---}}\par
+\vskip 30pt
+
+\input{sample-sb.toc}
+
+\end{document}
+\bye
+%
+%%%
+% Document ends.
+%%%
diff --git a/macros/latex/contrib/songbook/sampleWBK.pdf b/macros/latex/contrib/songbook/sampleWBK.pdf
new file mode 100644
index 0000000000..07083d6de8
--- /dev/null
+++ b/macros/latex/contrib/songbook/sampleWBK.pdf
Binary files differ
diff --git a/macros/latex/contrib/songbook/songbook.dtx b/macros/latex/contrib/songbook/songbook.dtx
new file mode 100644
index 0000000000..6ed42cbf15
--- /dev/null
+++ b/macros/latex/contrib/songbook/songbook.dtx
@@ -0,0 +1,5519 @@
+% \iffalse meta-comment % -*- LaTeX -*-
+% rcsid = @(#)$Id: songbook.dtx,v 1.16 2010-04-12 18:10:15 rathc Exp $
+%
+%
+% songbook.sty - Generic SongBook style.
+%
+% Version 4.5, 30 April, 2010
+%
+% Copyright 1992--2010 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.
+%
+% \fi
+%
+% \CheckSum{2341}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%\iffalse This is a METACOMMENT
+% Everything up to the next `\ fi' (without a blank) will
+% be ignored. This is necessary because `%' may no longer
+% be a comment mark when this file is read in.
+%
+% Version: Date: Changes:
+%
+% 4.0 and earlier... are not documented in this file.
+% \changes{v4.1}{2003/08/31}{Added an optional parameter to the \textsf{song}
+% environment along with a corresponding usepackage option.}
+% \changes{v4.1a}{2003/09/22}{Corrected a bug whereby the new exclude song mode
+% was throwing an error when the \textsf{SBRef} and
+% \textsf{SBMargNote} commands were used.}
+% \changes{v4.2}{2006/10/13}{Added abilty to create an index by song artist.}
+% \changes{v4.3}{2007/02/03}{Corrected problem with xlatn environment introduced in v4.2
+% and added a new songTranslation environment.}
+% \changes{v4.4}{2010/03/30}{At Donald Arseneau's request, added language to state that
+% conditionals.sty is public domain.}
+% \changes{v4.5}{2010/04/30}{Added a |compactsong| option to the |song| environment;
+% which allows per-song use of |compactsong| formatting.}
+%\fi
+%
+% \hyphenation{make-index}
+%
+% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
+% \DoNotIndex{\@flushglue,\@gobble,\@input}
+% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
+% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
+% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
+% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
+% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
+% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
+% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
+% \DoNotIndex{\mathcal,\csname,\def,\documentstyle,\dospecials,\edef}
+% \DoNotIndex{\egroup}
+% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
+% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
+% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
+% \DoNotIndex{\ifcase}
+% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
+% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
+% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
+% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
+% \DoNotIndex{\strutbox}
+% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
+% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
+% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
+% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
+% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
+% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
+% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
+% \DoNotIndex{\nopagebreak}
+% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
+% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
+% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
+% \DoNotIndex{\[,\{,\},\]}
+% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
+% \DoNotIndex{\baselineskip,\begin,\tw@}
+% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
+% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
+% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
+% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
+% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
+% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
+% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
+% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
+% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
+% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
+% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
+% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
+% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
+% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
+% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
+% \DoNotIndex{\bfdefault}
+% \DoNotIndex{\^}
+%
+% \MakeShortVerb{\|}
+% \setcounter{StandardModuleDepth}{1}
+% \renewcommand{\partname}{Part}
+%
+% {\catcode`\p=12 \catcode`\t=12 ^^A hack used later on to print
+% \gdef\dimenvalue#1pt{$#1$pt}} ^^A a register value with a - sign
+%
+% \newcommand{\Songbook}{\textrm{Song$\flat$ook}}
+% \GetFileInfo{songbook.dtx}
+%
+% \title{The \Songbook{} Package\\
+% {\large Version 4.5}}
+% \author{Christopher Rath\\
+% {\small$<$\texttt{Christopher@Rath.ca}$>$}}
+% \date{2010/04/30}
+% \maketitle
+%
+% \begin{abstract}
+% This package provides an all purpose songbook style for \LaTeX2e.
+% The package allows for three types of output from a single input
+% file: words and chords books for the musicians to play from, words
+% only songbooks for the congregation to sing from, and overhead
+% transparency masters for congregational use. The style will also
+% print a table of contents, an index sorted by title and first line,
+% and an index sorted by key. It attempts to handle songs in multiple
+% keys, as well as songs in multiple languages.
+% \end{abstract}
+%
+% {\parskip 0pt ^^A We have to reset \parskip
+% ^^A (bug in \LaTeX)
+% \tableofcontents
+% }
+%
+% \section*{Preface to version 4.5}
+% What's new in version~4.5:
+% \begin{itemize}
+% \item Added a |compactsong| option to the |song| environment; which
+% allows per-song use of |compactsong| formatting.
+% \end{itemize}
+%
+% \section*{Preface to version 4.4}
+% What's new in version~4.4:
+% \begin{itemize}
+% \item there are no functional changes
+% \item at Donald Arseneau's request, added language to state that
+% conditionals.sty is public domain
+% \end{itemize}
+%
+% \section*{Preface to version 4.3}
+% What's new in version~4.3:
+% \begin{itemize}
+% \item found a problem with the optional parameter to the xlatn environment
+% added in Release 4.2; that optional parameter has been removed
+% \item a new songTranslation environment added to provide the required
+% capability for the Artist index option
+% \item added a new song to the sample songbook to act as a test case
+% for translation
+% \end{itemize}
+%
+% \section*{Preface to version 4.2}
+% What's new in version~4.2:
+% \begin{itemize}
+% \item added a new Artist index option
+% \item added a new optional parameter to the xlatn environment; in
+% support of the new Artist index option
+% \end{itemize}
+%
+% \section*{Preface to version 4.1a}
+% What's new in version~4.1a:
+% \begin{itemize}
+% \item Corrected a bug whereby the new exclude song mode was throwing
+% an error when either the |\SBRef| or |\SBMargNote| commands were used
+% \end{itemize}
+%
+% \section*{Preface to version 4.1}
+%
+% What's new in version~4.1:
+% \begin{itemize}
+% \item a new optional \meta{Include?} parameter has been added to
+% the |song| environment; that parameter allows you to have a song omitted
+% from the printed songbook yet still have the song counter incremented
+% and the song's table of contents entry written to a separate TOC file
+% (see the description of the |song| environment, below, for more details)
+%
+% \item to go along with the new optional \meta{Include?} parameter
+% is a new |\usepackage{}| option, |printallsongs|, which overrides the
+% individual song option declarations and prints all the songs in the
+% songbook
+%
+% \item the song ``My Sun and My Shield'' was removed from the sample songbook;
+% it turns out that this is a Ted Sandquist song and is not in the public
+% domain
+%
+% \item |chordbk|'s |compactsong| option is still experimental
+% \end{itemize}
+%
+% \section*{Preface to version 4.0}
+% What's new in version~4.0:
+% \begin{itemize}
+% \item the \Songbook{} style has now completed its
+% transition to \LaTeX2e (I \emph{think}): there is now a single \texttt{.sty} file
+% which accepts options in order to invoke the different songbook
+% styles. The \Songbook{} style now also accepts and produces
+% reasonable output for all of \LaTeX2e's standard papersize options.
+%
+% \item the song title block (where the title, copyright info., etc.
+% are listed) has been changed, use of the |\centerline| macro has
+% been replaced with a |center| environment. This change is \emph{not
+% compatible} with previous versions of \texttt{songbook.sty} and
+% requires you to re-verify all page breaks (mostly in words-only
+% mode). The reason for making the change is to allow long song
+% titles to line-wrap (instead of hanging off the edge of the page),
+% and this means that the definition of the following macros has been
+% changed: |\STitle|, |\CpyRt|, |\WAndM|, and |\ScriptRef|. The
+% centering of these lines is now also done within a center
+% environment; in each the centering may now be disabled by adding an
+% optional first parameter (any value except `|Y|')
+%
+% \item since the change to the title block invalidated pagination of
+% the previous version I have taken the opportunity to fine tune the
+% value of |\SpaceAfterSong|, a value that is used primarily in
+% words-only mode: the inter-song gap has been decreased to
+% |\vspace{0ex| |plus10ex| |minus3ex}| (from |\vspace{0ex| |plus15ex|
+% |minus0ex}|)
+%
+% \item a new space command, |\SpaceAfterTitleBlk|, has been created to
+% allow the space between a song's title block and its versicles to be
+% tuned by the user; this was a previously hardcoded value
+%
+% \item a bug in the |SBBracket| environment has been corrected: long
+% lines were not always exhibiting their hanging indentation
+%
+% \item the style now supports all of \LaTeX2e's standard papersizes.
+% While the output will not be ideal for all papersizes, it does
+% produce sane and usable results for all papersizes. I would be most
+% appreciative if European users would send me page layout corrections
+% for the A4, A5, and B5 sizes
+%
+% \item added a new environment, |SBOpGroup| (i.e., ``an open group''),
+% serves to group the lines of a verse or chorus together, but not
+% indent or label them. Use of this environment allows for better
+% control of font changes, proper indentation of wrapped lines, and
+% automatic spacing of open groups which follow one another. I
+% strongly suggest that |SBOpGroup| be used to enclose any set of
+% lines which don't otherwise end up in one of the songbook
+% environments when typsetting with this package
+%
+% \item |chordbk| mode now supports one variation: |compactsong|. In
+% |compactsong| mode the songs are laid out in two columns; note that
+% the song title block spans the two columns. The songs are set in a
+% smaller typeface to allow them to fit into the smaller space two
+% column mode supplies. This mode should be considered experimental
+% for the present time; see its description, below, for more details
+%
+% \item |conditionals.sty| has been updated with more current
+% information and macros, as supplied by Donald Arseneau
+%
+% \item all of the verse-like environments now have their |\baselineskip|
+% amount expressly calculated just prior to laying out their lines.
+% This has been done in order to overcome the problem all previous
+% versions of the songbook style had which was that linespacing
+% differed based upon whether a particular line contained chords. Now
+% all lines are spaced the same, regardless of whether they contain a
+% chord. I consider the previous behaviour---where linespacing
+% varied---to be a bug. If you really must retain the old behaviour
+% this can be done by inserting the following code into the preamble
+% of your document:
+% \begin{verbatim}
+% \renewcommand{\sbSetsbBaselineSkipAmt}
+% {\setlength{\sbBaselineSkipAmt} {\baselineskip}}
+% \end{verbatim}
+%
+% \item the |\SBDefaultFont| command no longer needs to be specified at
+% the top of each songbook
+%
+% \item fixed a bug that was inhibiting the \Songbook{} style from
+% detecting blank and empty |song| parameters
+%
+% \item the commands which had previously been listed as deprecated
+% (i.e., to be removed in some future release) have all been removed
+%
+% \item the following commands have been moved from the ``Obsolete
+% Macros'' section into ``Deprecated Macros'' section and will be
+% removed in the next major release of the \Songbook{} style:
+% |\False|, |\True|, |\ChordBk|, |\Overhead|, |\SongEject|, |\WordBk|,
+% and |\WordsOnly|
+% \end{itemize}
+%
+% A few minor changes were made during release testing of version~4.0.
+% The following changes occured between version~4.0pre2 and~4.0:
+% \begin{itemize}
+% \item the spacing around the |SBBracket| environment has been
+% \emph{tuned}:\\
+% |\SpaceAfterSBBracket| has been increased, and a new\\
+% |\SpaceBeforeSBBracket| amount has been added
+%
+% \item added missing space around the |SBBracket*| environment; using\\
+% |\SpaceBeforeSBBracket| and |\SpaceAfterSBBracket|
+%
+% \item removed unused length, |\SBBracketHangAmt|
+%
+% \item added a new |\LeftMarginSBBracket| length and rewrote the part
+% of the |SBBracket| environment that creates the tag and left indents
+% the versicle. The |SBBracket| environment now left aligns its words
+% with those of the |SBVerse| and |SBChorus| versicles.
+% \end{itemize}
+%
+% \part{High Level Documentation}
+% \section{Description}
+%
+% The \Songbook{} document style provides a core set of functions for
+% the production of songbooks. Three pre-defined songbook formats and
+% one variation are provided (and they are invoked via options to the
+% |\usepackage{songbook}| command) and they are typically used along
+% with \LaTeX's |book| class. One of the following options \emph{must}
+% be specified or the \Songbook{} style will throw an error: |chordbk|,
+% |wordbk|, or |overhead|.
+%
+% An empty minimal songbook looks like the following:
+% \begin{verbatim}
+% \documentclass{book}
+% \usepackage[chordbk]{songbook}
+%
+% \begin{document}
+% \begin{song}{}{}{}{}{}{}
+% \end{song}
+% \end{document}
+% \end{verbatim}
+%
+% We'll start by explaining the |\usepackage[]{songbook}| options:
+% \begin{description}
+% \item[|chordbk|\ ] \DescribeMacro{chordbk} a songbook suitable for
+% musicians which gives both lyrics and words (this is the default
+% mode of the \Songbook{} document style)---one variation to this
+% style is offered, compact song mode (see below). This option is
+% specified as |\usepackage[chordbk]{songbook}|
+%
+% \item[|wordbk|\ ] \DescribeMacro{wordbk} a words-only songbook
+% suitable for mass distribution to those singing but not playing
+% an instrument. This option is specified as\\
+% |\usepackage[wordbk]{songbook}|
+%
+% \item[|overhead|\ ] \DescribeMacro{overhead} to produce overhead
+% transparencies from songbook source files. This option is specified
+% as |\usepackage[overhead]{songbook}|
+% \end{description}
+%
+% Other additional options supported by the \Songbook{} style include
+% all \LaTeX's standard papersize options, and:
+% \begin{description}
+% \item[|compactsong|\ ] \DescribeMacro{compactsong} this option only
+% takes effect along with |chordbk|. It causes the songs to be set in
+% two columns, where the song title information spans the both
+% columns. It is specified as\\
+% |\usepackage[chordbk,compactsong]{songbook}|
+%
+% The version of |compactsong| provided in this release should be
+% considered experimental! The formatting produced in this mode
+% is not always desirable. An outstanding question to be answered
+% is whether or not new songs title blocks should span both columns,
+% and whether each song should generate a page break; in other words,
+% should this feature set be implemented as two pieces: compactsong
+% and compactbook. The idea would be to provide a compactsong
+% environment, which could be judiciously used on a per song basis,
+% and a compactbook mode which would result in a compressed songbook,
+% where the words and chords book would look very much like a words
+% only songbook (but with chords).
+%
+% \changes{v4.1}{2003/08/31}{Added |printallsongs| documentation.}
+% \item[|printallsongs|\ ] \DescribeMacro{printallsongs} this option
+% causes all songs in a songbook to be printed, regardless of what
+% \meta{Include?} option may have been specified on each
+% individual |song| environment
+% \end{description}
+%
+% \section{Commands}
+% This section is broken into several subsections. Hopefully this makes
+% the individual commands easier to understand by placing them in a
+% meaningful context. Since some forward references exist, it may be
+% necessary to read through the entire \textit{Commands\/} section a
+% couple of times before it makes complete sense.
+%
+% This reference section will present terse command and environment
+% descriptions; more detailed descriptions, along with examples, may be
+% found in the implementation detail section at the bottom of this
+% document.
+%
+% Note that each subsection's descriptions are presented in alphabetical
+% order; while this doesn't make the sections quite as easy to read, it
+% makes them much more useful for reference purposes.
+%
+% \subsection{Environments}
+% The \Songbook{} style defines several new environments to make the
+% formatting of songbooks easier and more consistent (and most of them
+% have parameters). Unless otherwise noted, all of the environments are
+% |verse|-like: wrapped lines are indented more than the first line is
+% indented.
+%
+% \begin{description}
+% \item |\begin{SBBracket}{|\meta{bracket tag}|}|\meta{\ldots stuff to
+% enbracket\ldots}\\ |\end{SBBracket}|
+% \DescribeEnv{SBBracket} is the environment used to mark certain
+% lines of the song with a tag and bracket. An example usage is
+% to mark the line of the song played to end the piece, if it is
+% somehow different than the chords played if one were to repeat the
+% song. For example:
+% \begin{verbatim}
+% Be\Ch{Am}{cause} of \Ch{Dm7}{what} the...
+% \end{SBChorus}
+%
+% \begin{SBBracket}{Ending}
+% Give \Ch{F}{thanks,}\Ch{C/F}{} \Ch{Bb/F}{}...
+% \end{SBBracket}
+% \end{verbatim}
+% This is very similar to the |SBOccurs| environment, the difference
+% being how the section of the song is marked.
+%
+% \DescribeEnv{SBBracket*} There are two versions of this
+% environment: |SBBracket| and |SBBracket*|. They operate
+% identically, except that the |*|ed version doesn't print its tag and
+% bracket in words-only modes.
+%
+% At present, |\SBBracket| and |\SBBracket*| are fragile and are not
+% compatible with |SBVerse|, |SBChorus|, or any other environment;
+% with the exception of the |song| environment.
+%
+% \item |\begin{SBChorus}|\meta{\ldots the
+% chorus\ldots}|\end{SBChorus}| \DescribeEnv{SBChorus} is
+% the environment to wrap around a chorus that you wish to be indented
+% and given a chorus tag (``Ch:''). A song with one verse and one
+% chorus, where the chorus is sung after the verse would probably use
+% the |SBChorus| environment. Whereas, if the chorus was sung first,
+% an |SBVerse| environment would probably be used. The indent amount
+% for lines that are too long is set by redefining the |\HangAmt|
+% command.
+%
+% \DescribeEnv{SBChorus*} The |SBChorus*| version of this
+% command indents but does not place a |\SBChorusTag| before the
+% chorus.
+%
+% \item |\begin{SBExtraKeys}{|\meta{song content}|}\end{SBExtraKeys}|
+% \DescribeEnv{SBExtraKeys} is the environment used when you
+% wish to list the song again in another key. Typically, this
+% environment is used along with an |\STitle| command. For example:
+% \begin{verbatim}
+% \begin{SBExtraKeys}{
+% \STitle{You Alone}{D}
+%
+% \begin{SBVerse}
+% \Ch{D}{Ho}\Ch{F#m}{ly,} \Ch{G}{Ho}\Ch{D}{ly,}
+% ...
+% \end{SBVerse}
+% }\end{SBExtraKeys}
+% \end{verbatim}
+%
+% \item |\begin{SBOccurs}{|\meta{the occurrence}|}|\meta{\ldots stuff
+% to group\ldots}|\end{SBOccurs}|
+% \DescribeEnv{SBOccurs} is the environment used to mark a
+% given line of the song with a tag and brackets. For example ``1,3''
+% would designate that this passage applies to the 1st and 3rd
+% occurances. For example:
+% \begin{verbatim}
+% Be\Ch{Am}{cause} of \Ch{Dm7}{what} the...
+% \end{SBChorus}
+%
+% \begin{SBOccurs}{1,3}
+% Give \Ch{F}{thanks,}\Ch{C/F}{} \Ch{Bb/F}{}...
+% \end{SBOccurs}
+% \end{verbatim}
+%
+% \item |\begin{SBOpGroup}|\meta{\ldots stuff to
+% group\ldots}|\end{SBOpGroup}| \DescribeEnv{SBOpGroup} is
+% the environment in which unmarked versicles are placed; so called
+% ``open groups''.
+%
+% \item |\begin{SBSection}|\meta{\ldots the
+% section\ldots}|\end{SBSection}| \DescribeEnv{SBSection}
+% is very much like\\ \LaTeX's verse environment, except that here the
+% sections are numbered. The indent amount for lines that are too
+% long is set using the |\HangAmt| command. This environment would be
+% used in place of the |\SBVerse| environment for songs which are
+% broken into pieces/sections, in place of, or in addition to, verses.
+%
+% \DescribeEnv{SBSection*} The |SBSection*| version of this
+% command indents but doesn't place an |\SBSectionCnt| before the
+% chorus. Similar to \LaTeX's |\section*| command, the section
+% counter is not incremented either.
+%
+% \item |\begin{SBVerse}|\meta{\ldots the chorus\ldots}|\end{SBVerse}|
+% \DescribeEnv{SBVerse} is the environment to wrap around a
+% verse that you wish to be indented and given a verse number
+% (|\SBVerseCnt|). A song with one chorus and one verse, where the
+% verse is sung after the verse would probably use the |SBChorus|
+% environment. Whereas, if the chorus was sung first, an |SBVerse|
+% environment would probably be used. The indent amount for lines
+% that are too long is set with the |\HangAmt| command.
+%
+% \DescribeEnv{SBVerse*} The |SBVerse*| version of this
+% environment indents but down not place an |\SBVerseCnt| before the
+% chorus; similar to \LaTeX's |\section*| command, the verse counter
+% is not incremented either.
+%
+% \changes{v4.5}{2010/04/30}{Added |compactsong| documentation.}
+% \item |\begin{song}[|\meta{1}|]{|\meta{2}|}|\ \ldots|{|\meta{7}|}|\ \meta{\ldots
+% the song\ldots}|\end{song}| \DescribeEnv{song} is the
+% environment which each song resides within. The parameter list is
+% quite long, and is defined as:
+% \begin{enumerate}
+% \item Optional format string (Include song? / Compact song mode?);
+% \item Song title;
+% \item Key song is written in;
+% \item Copyright information;
+% \item Name(s) of composer and lyricist;
+% \item Scripture reference for the song;
+% \item Copyright licensing information.
+% \end{enumerate}
+% The |song| environment takes care of making index entries,
+% incrementing |\SBSongCnt| and page generation (if necessary).
+% Note, this environment makes use of |\everypar|. See the
+% \textit{Example\/} section, below, for a sample one-song songbook
+% document.
+%
+% The optional format string parameter allows per-song control of certain
+% typesetting attributes. Each of the attributes is optional, and a single
+% attribute, or multiple attributes, may be used. The available values
+% are:
+% \begin{description}
+% \item[|Y| or |N|] These two characters tell \Songbook{} whether to
+% include the song in the songbook. This ``Include this song?'' option
+% is referred to within this documentation as ``\meta{Include?}''. If
+% you don't specify a value (and you typically will not), then it behaves
+% as though you provided a value of ``\texttt{Y}''. When a value of
+% ``\texttt{N}'' then the song is excluded from the current songbook;
+% however, a table of contents record is written to a separate file
+% (\textit{jobname}|.tocS|).
+%
+% \item[|C| or |F|] These two characters tell \Songbook{} whether the
+% song should be presented in |compactsong| mode or full size presention
+% mode (|chordbk| formatting only).
+% \end{description}
+%
+% \DescribeMacro{\CBExcl}\DescribeMacro{\OHExcl}\DescribeMacro{\WBExcl}
+% \DescribeMacro{\WOExcl}Some predefined macros have been provided
+% which allow conditional exclusion of a song (they are used in the
+% optional parameter): |\CBExcl|, |\OHExcl|, |\WBExcl|, and |\WOExcl|;
+% respectively, these correspond to exclude in |chordbk| mode,
+% |overhead| mode, |wordbk| mode, and when in words-only (i.e., not in
+% |chordbk|) mode.
+%
+% As an organisation's songbook grows, and time passes, it is not
+% uncommon for the songbook to become overly large. The \meta{Include?}
+% parameter allows for a songbook's songs to be easily removed
+% and re-added, without requiring old songbooks to be destroyed or
+% overhead transparencies renumbered.
+%
+% When the ``copyright information'' or ``composer \& lyricist''
+% parameters are left empty then the string defined by the
+% |\SBUnknownTag| macro used (instead of leaving whitespace
+% in the song header.
+%
+% \item |\begin{songTranslation}{|\meta{1}|}|\ \ldots|{|\meta{4}|}|\ \meta{\ldots
+% the translation\ldots}|\end{songTranslation}|\DescribeEnv{songTranslation}
+% is the new song translation environment. The parameter list is defined
+% as:
+% \begin{enumerate}
+% \item \ Translation language;
+% \item \ Translated song title (in the foreign language);
+% \item \ Translation permission;
+% \item \ Who performed the translation.
+% \end{enumerate}
+% The |songTranslation| environment always occurs within a |song| environment;
+% it resets the verse counter, causes the title and other parameter
+% information to be displayed, and makes the appropriate index and
+% table of contents entries. It is important for the |songTranslation|
+% environment to occur within a song environment, because the |songTranslation|
+% environment inherits the song environment's |\everypar| definition.
+%
+% \item |\begin{xlatn}{|\meta{1}|}|\ \ldots|{|\meta{3}|}|\ \meta{\ldots
+% the translation\ldots}|\end{xlatn}|\DescribeEnv{xlatn}
+% is the old song translation environment---this environment is
+% considered obsolete and will be removed in a future relase of the
+% \Songbook{} macros; it has been replaced by the |songTranslation|
+% environment. The parameter list is defined
+% as:
+% \begin{enumerate}
+% \item \ Translated song title (in the foreign language);
+% \item \ Translation permission;
+% \item \ Who performed the translation.
+% \end{enumerate}
+% The |xlatn| environment always occurs within a |song| environment;
+% it resets the verse counter, causes the title and other parameter
+% information to be displayed, and makes the appropriate index and
+% table of contents entries. It is important for the |xlatn|
+% environment to occur within a song environment, because the |xlatn|
+% environment inherits the song environment's |\everypar| definition.
+% \end{description}
+%
+% \subsection{Primary \Songbook{} Macros}
+% Along with the \Songbook{} environments, these are the macros you will
+% most often use when constructing a songbook (of any style).
+%
+% \begin{description}
+% \item |\CBPageBrk| \DescribeMacro{\CBPageBrk} forces a new page if
+% |\ifChordBk| is true.
+%
+% \item |\Ch{|\meta{chord}|}{|\meta{syllable}|}| \DescribeMacro{\Ch}
+% the chord over lyrics command definition. This is the most commonly
+% used command in the \Songbook{} style. The words-only sub-style
+% turns off the chord generation and just prints the second parameter.
+% The \meta{chord} parameter is left-justified over the
+% \meta{syllable} parameter. Any `\#' or `b' characters in the
+% \meta{chord} parameter are replaced with `$\sharp$' and `$\flat$'
+% characters, respectively. Also, if a bass note is specified in a
+% chord (by way of a `/' character followed by the note) then it will
+% appear in a smaller font than the rest of the \meta{chord}.
+%
+% It is often desireable to typeset a chord---or set of
+% chords---inside square brackets, to indicate that they are optional.
+% A lighter weight font is probably desired, so that the brackets do
+% not detract from the chord name, so any `[' and `]' characters are
+% typeset with the font specified by the |\ChBkFont| macro.
+%
+% To set the chord raise amount to a value that matches version~1.x
+% and~2.x releases of the \Songbook{} style, insert the following
+% command into the preamble of your document:
+% \begin{verbatim}
+% \renewcommand{\SBChordRaise}{\SBOldChordRaise}
+% \end{verbatim}
+%
+% \item |\Chr{|\meta{chord}|}{|\meta{syllable}|}| \DescribeMacro{\Chr}
+% this command performs the same function as the |\Ch| command with
+% one exception: the |\Chr| command inserts a rule, at the height
+% specified by the |\SBRuleRaiseAmount| macro, when the chord is wider
+% than the syllable. The default value creates an extended
+% em-dash-like rule; a value of 0pt creates an underbar-like rule.
+% See the \textit{Usage Guidelines} section of this document, below,
+% for a more detailed explanation.
+%
+% \item |\ChX{|\meta{chord}|}{|\meta{syllable}|}| \DescribeMacro{\ChX}
+% this command performs the same function as the |\Ch| command with
+% one exception: the |\ChX| command causes spaces trailing the command
+% to be ignored. See the \textit{Usage Guidelines} section of this
+% document, below, for a more detailed explanation.
+%
+% \item |\CSColBrk| \DescribeMacro{\CSColBrk} generates a column break
+% here if we're in |compactsong| mode.
+%
+% \item |\makeArtistIndex| \DescribeMacro{\makeArtistIndex} starts creation
+% of an index of songs by artist (composer). If you need to add your
+% own information to this index use the |\artistIndex[][]| command,
+% documented in the \textit{Detailed Documentation} section, below.
+%
+% \item |\makeKeyIndex| \DescribeMacro{\makeKeyIndex} starts creation of
+% an index of songs by key. If you need to add your own information
+% to this index use the |\keyIndex[][]| command, documented in the
+% \textit{Detailed Documentation} section, below.
+%
+% \item |\makeTitleContents| \DescribeMacro{\makeTitleContents} starts
+% creation of a table of contents. If you need to add your own
+% information to this index use the |\titleContents[][]| command,
+% documented in the \textit{Detailed Documentation} section, below.
+%
+% \item |\makeTitleContentsSkip| \DescribeMacro{\makeTitleContentsSkip} starts
+% creation of a table of contents of songs exluded from the current
+% songbook. This macro operates in the same manner as |\makeTitleContents|.
+%
+% \item |\makeTitleIndex| \DescribeMacro{\makeTitleIndex} starts
+% creation of a title and first line index. If you need to add your
+% own information to this index use the |\titleIndex[][]| command,
+% documented in the \textit{Detailed Documentation} section, below.
+%
+% \item |\NotWOPageBrk| \DescribeMacro{\NotWOPageBrk} forces a new page
+% if |\ifWordsOnly| is false.
+%
+% \item |\OHContPgFtr| \DescribeMacro{\OHContPgFtr} prints a page
+% heading continuation footer on overheads; this macro must be
+% manually inserted where needed. |\OHContPgHdr| is a no-op, except when
+% |\ifOverhead| is true.
+%
+% \item |\OHContPgHdr| \DescribeMacro{\OHContPgHdr} prints a page
+% heading continuation header on overheads; this macro must be
+% manually inserted where needed. |\OHContPgHdr| is a no-op, except when
+% |\ifOverhead| is true.
+%
+% \item |\OHPageBrk| \DescribeMacro{\OHPageBrk} forces a new page if
+% |\ifOverhead| is true.
+%
+% \item |\SBBridge{|\meta{the bridge}|}| \DescribeMacro{\SBBridge}
+% is used to encapsulate a bridge: it causes \meta{the bridge} to be
+% set with |\SBBridgeTag|, using in the |\SBBridgeTagFont| font. In
+% words-only mode this command is a no-op.
+%
+% \item |\SBEnd[|\meta{use in words-only}|]{|\meta{the ending}|}|
+% \DescribeMacro{\SBEnd} is used to encapsulate a song ending: it
+% causes \meta{the ending} to be set with the |\SBEndTag|, using in
+% the |\SBEndTagFont| font. The first parameter is optional and if
+% used is put in square brackets; specifying any value except `N' will
+% cause the ending to be used in words-only mode. Some examples of
+% its intended use are:
+% \begin{description}\item
+% \emph{This will cause the ending to be printed in words-only mode. Note
+% how the parameter is specified in square brackets!}
+% \begin{verbatim}
+% \SBEnd[Y]{Give \Ch{F}{thanks,} \ldots}
+% \end{verbatim}
+%
+% \emph{In this case the ending is a no-op in words-only mode.}
+% \begin{verbatim}
+% \SBEnd{\Ch{A}{} \Ch{B/A}{} \Ch{D}{}}
+% \end{verbatim}
+% \end{description}
+%
+% \item |\SBIntro[|\meta{use in words-only}|]{|\meta{the
+% introduction}|}| \DescribeMacro{SBIntro} is used to encapsulate
+% any introduction to a song: it causes \meta{the introduction} to be
+% set with an intro tag of ``Intro:'', using in the |\SBIntroTagFont|
+% font. The first parameter is optional and if used is put in square
+% brackets; specifying any value except `N' will cause the ending to
+% be used in words-only mode. Some examples of its intended use are:
+% \begin{description}\item
+% \emph{This will cause the ending to be printed in words-only mode.
+% Note how the parameter is specified in square brackets!}
+% \begin{verbatim}
+% \SBIntro[Y]{\Ch{D}{} \Ch{C}{} Ooooh}
+% \end{verbatim}
+%
+% \emph{In this case the ending is a no-op in words-only mode.}
+% \begin{verbatim}
+% \SBIntro{{\SBLyricNoteFont Guitar and drums}}
+% \end{verbatim}
+% \end{description}
+%
+% \item |\SBMargNote{|\meta{marginal note}|}|
+% \DescribeMacro{\SBMargNote} is used to place a note of some kind in
+% the margin of a songbook. In words-only mode this macro is a no-op.
+%
+% \item |\SBRef{|\meta{book title}|}{|\meta{page or song number}|}|
+% \DescribeMacro{\SBRef} creates a reference in the margin to another
+% music book, or tape. This provides a method for directing people to
+% resources they may use to learn the song. The marginal reference
+% only prints when |\WordsOnly| is |\False|.
+%
+% \item |\SBem| \DescribeMacro{\SBem} prints an \textit{em-dash} (i.e.,
+% ``---'') when |\WordsOnly| is |\False.| See |\SBen|.
+%
+% \item |\SBen| \DescribeMacro{\SBen} prints an \textit{en-dash} (i.e.,
+% ``--'') when |\WordsOnly| is |\False.| This allows us to place a
+% short rule within text in order place a chord earlier than a
+% syllable; yet, that rule will not appear in the words-only book.
+% The words-only version of this macro is a no-op. An example of its
+% intended use is:
+% \begin{verbatim}
+% ...flows like a ri\Ch{B/A}{\SBen ver,} flows...
+% \end{verbatim}
+%
+% \item |\STitle{|\meta{song title}|}{|\meta{key}|}|
+% \DescribeMacro{\STitle} prints the \meta{song title}, preceded by
+% the current |\SBSongCnt| value and followed by the \meta{key} the
+% song is given in. |\STitle| is most often used along with the
+% |SBExtraKeys| environment. This command resets the |\SBVerseCnt|
+% and |\SBSectionCnt| counters.
+%
+% \item |\WBPageBrk| \DescribeMacro{\WBPageBrk} forces a new page if
+% |\ifWordBk| is true.
+%
+% \item |\WOPageBrk| \DescribeMacro{\WOPageBrk} forces a new page if
+% |\ifWordsOnly| is true.
+% \end{description}
+%
+% \subsection{Miscellaneous Commands}
+% Not all of the commands listed here are commonly used in songbooks
+% written using one of the \Songbook{} styles. The commands are listed
+% alphabetically.
+%
+% \begin{description}
+% \item |\CpyRt{|\meta{copyright info.}|}| \DescribeMacro{\CpyRt}
+% prints the copyright information line. This command is not usually
+% explicitly used in a songbook. It is called by the |song|
+% environment and will normally only be used there.
+%
+% \item |\FLineIdx{|\meta{first line}|}| \DescribeMacro{\FLineIdx} make
+% an entry in the \textit{Title \& First Line Index\/} file,
+% ``\texttt{\textit{jobname}}|.tIdx|.''
+%
+% \item |\SBChorusMarkright| \DescribeMacro{\SBChorusMarkright} hook to
+% allow |\SBSection|'s |\markright| to be overridden.
+%
+% \item |\SBContinueMark| \DescribeMacro{\SBContinueMark} conditionally
+% produce a continuation symbol. If the contents of |\rightmark| will
+% result in nothing being typeset, then don't output the continuation
+% mark; otherwise, output a continuation mark using the
+% |\SBContinueTag| command.
+%
+% \item |\SBSectionMarkright| \DescribeMacro{\SBSectionMarkright} hook
+% to allow |\SBSection|'s |\markright| to be overridden.
+%
+% \item |\SBVerseMarkright| \DescribeMacro{\SBVerseMarkright} hook to
+% allow |\SBVerse|'s |\markright| to be overridden.
+%
+% \item |\SongMarkboth| \DescribeMacro{\SongMarkboth} hook to allow the
+% song environment's |\markboth| to be overridden.
+%
+% \item |\STitleMarkboth| \DescribeMacro{\STitleMarkboth} hook to allow
+% |\STitle|'s |\markboth| to be overridden.
+%
+% \item |\ScriptRef{|\meta{scripture address}|}|
+% \DescribeMacro{\ScriptRef} is a scripture reference for the song.
+% This command has its name because the \Songbook{} style was written
+% to produce songbooks for the church I am part of. This command is
+% not usually explicitly used in a songbook. It is called by the
+% |song| environment and will normally only be used there.
+%
+% \item |\WAndM{|\meta{lyricist \& composer}|}| \DescribeMacro{\WAndM}
+% prints a line telling who wrote the words and music for this song.
+% The string ``W\&M:'' precedes the listing of the \meta{lyricist \&
+% composer} when it is printed. This command is not usually
+% explicitly used in a songbook. It is called by the |song|
+% environment and will normally only be used there.
+% \end{description}
+%
+% \subsection{Ifthen Commands}
+% These |\if| tests are used to perform formatting that is dependent
+% upon the type of songbook you are creating. It is these |\if| tests
+% which allow a single source file to output the three songbook styles.
+% \begin{description}
+% \item |\ifSBinSongEnv| \DescribeMacro{\ifSBinSongEnv} is true if we
+% are inside of a song environment.
+%
+% \item |\ifChordBk| \DescribeMacro{\ifChordBk} is true if we are
+% processing a |chordbk| document.
+%
+% \item |\ifOverhead| \DescribeMacro{\ifOverhead} is true if we are
+% processing an |overhead| document.
+%
+% \item |\ifWordBk| \DescribeMacro{\ifWordBk} are we processing a
+% |wordbk| document?
+%
+% \item |\ifWordsOnly| \DescribeMacro{\ifWordsOnly} is true when we are
+% typesetting a words-only document (i.e., no chords).
+%
+% \item |\ifNotWordsOnly| \DescribeMacro{\ifNotWordsOnly} is true if we
+% are processing a document that displays chords.
+%
+% \item |\ifCompactSongMode| \DescribeMacro{\ifCompactSongMode} is set
+% to true if you want songs presented in a compact mode? It is
+% initially set to false. Set this to true or false using the
+% |\CompactSongModetrue| and |\CompactSongModefalse| commands,
+% respectively.
+%
+% \item |\ifSongEject| \DescribeMacro{\ifSongEject} is set to true if we
+% want a new page generated at the end of every |song| environment? A
+% value of true means eject after every |song| environment (default
+% value is true).
+% \end{description}
+%
+% Papersize tests have been provided in order to detect if a
+% particular papersize has been specified. These are only documented
+% in the \textit{Detailed Documentation} section, below, since they
+% are not generally needed.
+%
+%
+% \subsection{Counters}
+% These are the counters used in the various environments. Although you
+% will generally not need to use them, they do sometimes come in handy;
+% hence, they have been documented here.
+% \begin{description}
+% \item |\theSBSongCnt| \DescribeMacro{\theSBSongCnt} counter is used
+% for numbering the songs. When a song is listed multiple times (for
+% multiple keys) the songs number must remain the same each time.
+%
+% \item |\theSBSectionCnt| \DescribeMacro{\theSBSectionCnt} the section
+% counter is used for numbering sections as they occur within a song.
+%
+% \item |\theSBVerseCnt| \DescribeMacro{\theSBVerseCnt} the verse
+% counter is used for numbering verses as they occur within a song.
+% \end{description}
+%
+%
+% \subsection{Spacing Commands}
+% These commands define the amount of space to leave in various
+% situations. Change their values via \LaTeX's |\renewcommand| command.
+%
+% All of these spaces are defined as \LaTeX{} commands to overcome
+% limitations in \LaTeX{} length evaluation. For example, if
+% |\LeftMarginSBVerse| were to be defined as a length (i.e., using
+% |\newlength|) and then immediately set to |4em|'s, the specific length
+% would be evaluated with respect to the current font. This may not be
+% what is desired; instead a length evaluated with respect to the font
+% in place at the start of an |SBVerse| is probably what is desired.
+% This can only be done by making these lengths \LaTeX{} commands
+% instead of lengths.
+%
+% \begin{description}
+% \item |\HangAmt| \DescribeMacro{\HangAmt} amount to indent when a
+% line wraps.
+%
+% \item |\LeftMarginSBBracket| \DescribeMacro{LeftMarginSBBracket} is
+% the amount of left margin to leave when the |\SBBracket| environment
+% is in effect.
+%
+% \item |\LeftMarginSBChorus| \DescribeMacro{\LeftMarginSBChorus} is
+% the amount of left margin to leave when the |\SBChorus| environment
+% is in effect.
+%
+% \item |\LeftMarginSBSection| \DescribeMacro{LeftMarginSBSection} is
+% the amount of left margin to leave when the |\SBSection| environment
+% is in effect.
+%
+% \item |\LeftMarginSBVerse| \DescribeMacro{\LeftMarginSBVerse} is the
+% amount of left margin to leave when the |\SBVerse| environment is in
+% effect.
+%
+% \item |\SBChordRaise| \DescribeMacro{\SBChordRaise} the distance to
+% raise the chords above the baseline of the text they sit over.
+%
+% \item |\SBRuleRaiseAmount| \DescribeMacro{\SBRuleRaiseAmount} the
+% distance to raise the rule (as specified by\\
+% |\SBIntersyllableRule|) which fills the space between adjoining
+% syllables.
+%
+% \item |\SpaceAboveSTitle| \DescribeMacro{\SpaceAboveSTitle} is the
+% amount of vertical space left by the |STitle| command before it
+% prints the song title line.
+%
+% \item |\SpaceAfterTitleBlk| \DescribeMacro{\SpaceAfterTitleBlk} is
+% the space inserted by the song environment between the
+% \emph{title block} and the versicles.
+%
+% \item |\SpaceAfterChorus| \DescribeMacro{\SpaceAfterChorus} is the
+% vertical space to leave after an |SBChorus|.
+%
+% \item |\SpaceAfterOpGroup| \DescribeMacro{\SpaceAfterOpGroup} is the
+% vertical space to leave after an |SBOpGroup|.
+%
+% \item |\SpaceAfterSection| \DescribeMacro{\SpaceAfterSection} is the
+% vertical space to leave after an |SBSection|.
+%
+% \item |\SpaceAfterSBBracket| \DescribeMacro{\SpaceAfterSBBracket} is the
+% vertical space to leave after an |SBBracket|.
+%
+% \item |\SpaceAfterSong| \DescribeMacro{\SpaceAfterSong} is the
+% vertical space to leave after a |song|.
+%
+% \item |\SpaceAfterVerse| \DescribeMacro{\SpaceAfterVerse} is the
+% vertical space to leave after an |SBVerse|.
+%
+% \item |\SpaceBeforeSBBracket| \DescribeMacro{\SpaceBeforeSBBracket} is the
+% vertical space to leave before an |SBBracket|.
+%
+% \end{description}
+%
+% It is worth noting that the |\SpaceAfterChorus|, |\SpaceAfterOpGroup|,\\
+% |\SpaceAfterSection|, and |\SpaceAfterSong|, |\SpaceAfterVerse|
+% macros all allow negative glue to be inserted; that is, the space may
+% be shrunk as well as expanded. If this proves problematic (due to
+% sections being visibly pushed into each other, the old spacing (as in
+% versions~1.x and~2.x) can be restored by resetting these macros to~0ex.
+% For example:
+% \begin{verbatim}
+% \renewcommand{\SpaceAfterChorus} {\vspace{0ex}}
+% \renewcommand{\SpaceAfterOpGroup}{\vspace{0ex}}
+% \renewcommand{\SpaceAfterSection}{\vspace{0ex}}
+% \renewcommand{\SpaceAfterSong} {\vspace{0ex}}
+% \renewcommand{\SpaceAfterVerse} {\vspace{0ex}}
+% \end{verbatim}
+%
+%
+% \subsection{String Constants}
+% These constants are provided so that users may easily customize the
+% appearance of formatted songs and songbooks. Use the |\renewcommand|
+% command to change the value of these constants.
+% \begin{description}
+% \item |\OHContPgFtrTag| \DescribeMacro{\OHContPgFtrTag} tag is inserted
+% by the |\OHContPgFtr| command. The default value for this is
+% ``|continued on next page\ldots|''.
+%
+% \item |\OHContPgHdrTag| \DescribeMacro{\OHContPgHdrTag} tag is inserted
+% by the |\OHContPgHdr| command. The default value for this is
+% ``|\theSBSongCnt\ --- \theSongTitle, continued\ldots|''.
+%
+% \item |\SBBaseLang| \DescribeMacro{\SBBaseLang} tag is the name of the
+% language of all songs not specified within an |songTranslation| environment, and
+% also as the default value of the |songTranslation| environment's optional song language
+% parameter. The default value for this is ``|English|''.
+%
+% \item |\SBBridgeTag| \DescribeMacro{\SBBridgeTag} the Bridge Tag to
+% insert before the start of a bridge. The default value for this is
+% ``|Bridge:|''.
+%
+% \item |\SBChorusTag| \DescribeMacro{\SBChorusTag} the Chorus Tag to
+% insert before the first line of a chorus. The default value for
+% this is ``|Ch:|''.
+%
+% \item |\SBContinueTag| \DescribeMacro{\SBContinueTag} the Continue Tag
+% to insert in an\\ |\SBContinueMark|. The default value for this is
+% ``|cont\ldots|''.
+%
+% \item |\SBEndTag| \DescribeMacro{\SBEndTag} the End Tag to insert
+% before the start of an ending (in an |\SBEnd| command). The default
+% value for this is ``|End:|''.
+%
+% \item |\SBIntersyllableRule| \DescribeMacro{\SBIntersyllableRule} the
+% command(s) to draw the rule between adjoining syllables.
+%
+% \item |\SBIntroTag| \DescribeMacro{\SBIntroTag} the Intro Tag to
+% insert before the start of an introduction (in an |\SBIntro|
+% command). The default value for this is ``|Intro:|''.
+%
+% \item |\SBPubDom| \DescribeMacro{\SBPubDom} the string to insert
+% which indicates song is in the public domain. The default value for
+% this is ``|Public Domain|''. If you
+% want to localize this string in the song title block, be sure to use
+% this public interface: the |\CpyRt| macro uses |\SBPubDom| to
+% determine whether or not to print the copyright symbol (\copyright).
+%
+% \item |\SBUnknownTag| \DescribeMacro{\SBUnknownTag} the WAndM string
+% to insert when either the author/artist or the copyright holder is
+% unknown. The default value for this is ``|Unknown|''.
+%
+% \item |\SBWAndMTag| \DescribeMacro{\SBWAndMTag} the tag to insert
+% before the words and music entry printed in the song header. The
+% default value for this is ``|W\&M:|''.
+% \end{description}
+%
+%
+% \subsection{Font Handling}
+% Of all the font selection \Songbook{} macros, only one is commonly
+% used by someone writing a songbook: |\SBLyricNoteFont|. All the other
+% font macros are only used by an author to over-ride default behaviour,
+% via the |\renewcommand| command.
+%
+% \begin{description}
+% \item |\ChBassFont| \DescribeMacro{\ChBassFont} sets the font for the
+% bass note in chords as printed by the |\Ch|, |\Chr| and |\ChX|
+% commands.
+%
+% \item |\ChBkFont| \DescribeMacro{\ChBkFont} sets the font for square
+% brackets typeset inside |\Ch| commands (and its variants).
+%
+% \item |\ChFont| \DescribeMacro{\ChFont} sets the font for chords as
+% printed by the |\Ch|, |\Chr|, and |\ChX| commands.
+%
+% \item |\CpyRtFont| \DescribeMacro{\CpyRtFont} sets the font used to
+% print the copyright line produced by the |\CpyRt| command.
+%
+% \item |\CpyRtInfoFont| \DescribeMacro{\CpyRtInfoFont} sets the font
+% used to print the \meta{copyright licensing information} parameter
+% of the |song| environment; which appears after the \meta{copyright
+% information} parameter under the \meta{song title.}
+%
+% \item |\SBBracketTagFont| \DescribeMacro{\SBBracketTagFont} sets the
+% font used to create the tag for an |SBBracket| environment.
+%
+% \item |\SBBridgeTagFont| \DescribeMacro{\SBBridgeTagFont} sets the
+% font used to create the tag for an |SBBridge| environment.
+%
+% \item |\SBChorusTagFont| \DescribeMacro{\SBChorusTagFont} sets the
+% font used to print the chorus tag, |\SBChorusTag|.
+%
+% \item |\SBDefaultFont| \DescribeMacro{\SBDefaultFont} sets the
+% default font for the songbook. As of version~4.0 there is no need
+% for you to specify this command yourself.
+%
+% \item |\SBEndTagFont| \DescribeMacro{\SBEndTagFont} sets the font
+% used to print the tag, |\SBEndTag|, for the |\SBEnd| command.
+%
+% \item |\SBIntroTagFont| \DescribeMacro{\SBIntroTagFont} sets the
+% font used to print the introduction tag, |\SBIntroTag|.
+%
+% \item |\SBLyricNoteFont| \DescribeMacro{\SBLyricNoteFont} sets the
+% font used in comments placed within the lyrics giving musical
+% direction. This is the only font command commonly used by the
+% writer of a songbook.
+%
+% \item |\SBMargNoteFont| \DescribeMacro{\SBMargNoteFont} sets the font
+% used in the marginal reference printed by the |\SBMargNote| command.
+%
+% \item |\SBOccursBrktFont| \DescribeMacro{\SBOccursBrktFont} sets the
+% font used to create the large left and right square brackets which
+% delimit an |SBOccurs| environment.
+%
+% \item |\SBOccursTagFont| \DescribeMacro{\SBOccursTagFont} sets the
+% font used to create the |\SBOccurs| tag.
+%
+% \item |\SBRefFont| \DescribeMacro{\SBRefFont} sets the font used in
+% the marginal reference printed by the |\SBRef| command.
+%
+% \item |\SBVerseNumberFont| \DescribeMacro{\SBVerseNumberFont} sets the
+% font used to print the |\SBVerseCnt| in front of verses in an
+% |SBVerse| environment.
+%
+% \item |\SBSectionNumberFont| \DescribeMacro{\SBSectionNumberFont} sets
+% the font used to print the |\SBSectionCnt| in front of sections in
+% an |SBSection| environment.
+%
+% \item |\STitleFont| \DescribeMacro{\STitleFont} sets the font used to
+% print the song title, as generated by the |\STitle| command.
+%
+% \item |\STitleKeyFont| \DescribeMacro{\STitleKeyFont} sets the font
+% used to print the key a song is written in, as generated by the
+% |\STitle| command.
+%
+% \item |\STitleNumberFont| \DescribeMacro{\STitleNumberFont} sets the
+% font used to print the |\SBSongCnt| in front of the song title, as
+% generated by the |\STitle| command.
+%
+% \item |\ScriptRefFont| \DescribeMacro{\ScriptRefFont} sets the font
+% used to print the scripture reference generated by the |\ScriptRef|
+% command.
+%
+% \item |\WandMFont| \DescribeMacro{\WandMFont} sets the font used to
+% print the lyricist and composer line generated by the |\WandM|
+% command.
+% \end{description}
+%
+%
+% \subsection{Deprecated Commands}
+% The following commands will be discontinued in some future release of
+% the \Songbook{} style:
+% \begin{description}
+% \item |\ChordBk| is set to |\True| if we're producing words
+% and chord books. Set to |\False|, otherwise. Superceded by the
+% |\ifChordBk| if.
+%
+% \item |\False| is a constant used in \TeX\ |\if| expressions.
+% This command is now unnecessary.
+%
+% \item |\Overhead| is set to |\True| if we're producing
+% overhead transparencies. Set to |\False|, otherwise. Superceded by
+% the |\ifOverhead| if.
+%
+% \item |\SongEject| is a flag indicating whether or not
+% the |\song| environment should end the current page when the
+% environment ends: |\True| means end the page when the |\song|
+% environment ends; |\False| means don't end the page. Superceded by
+% the |\ifSongEject| if.
+%
+% \item |\True| is a constant used in \TeX\ |\if| expressions.
+% This command is now unnecessary.
+%
+% \item |\WordBk| is the flag which tells us whether we're
+% producing a songbook with just words that is not a set of overhead
+% masters. Superceded by the |\ifWordBk| if.
+%
+% \item |\WordsOnly| is the flag which tells us whether
+% we're producing a songbook with just words, or set of overhead
+% masters. Superceded by the |\ifWordsOnly| if.
+% \end{description}
+%
+%
+% \section{Usage Guidelines}
+% This section gives some guidelines for use of the commands and
+% environments offered by the \Songbook{} style. These are not absolute
+% standards, merely the suggestions that I have come up with after
+% entering some 450 songs into a \Songbook{} style based songbook.
+% These guidelines rarely justify themselves, try things out and decide
+% for yourself whether they're right or wrong.
+% \begin{enumerate}
+%
+% \item Make each line of a song its own paragraph. This means that
+% the songbook file is mostly double spaced. This allows the file to
+% more easily survive encounters with users who edit the songbook
+% source using a non-text-editor, such as WordPerfect.
+%
+% \item Use of the |\Ch| command:
+% \begin{itemize}
+% \item Always try to attach a chord to a single syllable. If you
+% need to include more than one syllable with the chord then include
+% extra text in units of syllables (whenever possible). For
+% example:
+% \begin{description}
+% \item[Do:] |\Ch{G}{Halle}luia|
+% \item[Don't:] |\Ch{G}{Hall}eluia|
+% \end{description}
+% \item Always include punctuation along with a syllable that has
+% been included in a |\Ch| command. For example:
+% \begin{description}
+% \item[Do:] |\Ch{G}{Lord!}|
+% \item[Don't:] |\Ch{G}{Lord}!|
+% \end{description}
+% \item Only place a single chord within a |\Ch| command. For
+% example:
+% \begin{description}
+% \item[Do:] |\Ch{[}{}\Ch{G}{} \Ch{D}{}\Ch{]}{}|
+% \item[Don't:] |\Ch{[G D]}{}|
+% \end{description}
+% \end{itemize}
+%
+% \item Extension of syllables. Syllables may be extended at either/or
+% both ends. Each end should be done in a different way:
+% \begin{enumerate}
+% \item One usually needs to make a syllable longer because the chord
+% it is tied to is too long. This type of extension should be done
+% using the |\Chr| command.
+% \begin{description}
+% \item[Do:] |\Chr{G\#m7/C}{Ho}\Ch{C}{ly}|
+% \item[Don't:] |\Ch{G\#m7/C}{Ho\SBem}\Ch{C}{ly}|
+% \end{description}
+% \item Extending the beginning (i.e., delaying the start) of a
+% syllable is generally required because the chord change needs to
+% occur \emph{between syllables.} For example, when the chord change
+% is on the beat and the syllable is sung off-beat. Use |\SBen| and
+% |\SBem| for this purpose.
+% \begin{description}
+% \item[Do:] |none Ho\Ch{D}{\SBen ly}|
+% \end{description}
+% \end{enumerate}
+%
+% \item Typographic conventions. \LaTeX{} knows about certain
+% ligatures; that is, it groups certain sequences of letters into a
+% single character unit. |ff| is one of these ligatures and is
+% typeset in a special way; however this cannot occur if the f's are
+% split by a |\Ch| command. Therefore, if at all possible, never
+% split up the following character sequences with the |\Ch| command:
+% |ff, fi, ffi, fl, ffl|.
+% \begin{description}
+% \item[Do:] |\Ch{C}{diffi}cult|
+% \item[Don't:] |\Ch{C}{dif}ficult|
+% \end{description}
+%
+% \item Ordering of songs in the songbook. In order to allow \LaTeX2e{}
+% to fill pages in as natural a manner as possible, it is best to
+% order the songs within the songbook based upon a |wordbk| formatted
+% songbook. In that way, the words-only songbooks will contain
+% optimally filled columns. Start by placing the longest songs first,
+% only inserting shorter songs to cause page breaks at logical
+% intervals.
+%
+% \item Overheads that occupy more than one page. When in overhead
+% mode, if a song spills over onto a second page (or beyond), it is
+% helpful to print an extra header at the top of the page identifying
+% which song the extra page belongs to. This is accomplished with the
+% |\OHContPgHdr| macro. For example, one would insert the following
+% lines where the new page is to occur:
+% \begin{verbatim}
+% \OHContPgFtr
+% \OHPageBrk
+% \OHContPgHdr
+% \end{verbatim}
+% \end{enumerate}
+%
+%
+% \section{Index/TOC Generation}
+% The \Songbook{} style provides facilities for title/first line index,
+% song key index and table of contents generation. While this facility
+% is not yet completely developed, it is much better than it was in
+% early \Songbook{} releases, and it produces \emph{very} usable output!
+%
+% \subsection{Table of Contents Generation}
+% Steps to follow in order to produce a table of contents:
+% \begin{enumerate}
+%
+% \item Add a |\makeTitleContents| command to the preamble of your
+% songbook.
+%
+% \item Run \LaTeX2e{} on the songbook source.
+%
+% \item Make your own copy of \texttt{sampleToc.tex} and customize its
+% header and footer definitions (so they match your songbook's). Then
+% change the name of the file being |\input|ed to match your table of
+% contents file.
+%
+% \item Run \LaTeX2e{} on your copy of \texttt{sampleToc.tex}.
+% \end{enumerate}
+%
+% \subsection{Title \& First Line Index Generation}
+% Steps to follow in order to produce a title and first line index:
+% \begin{enumerate}
+%
+% \item Add a |\makeTitleIndex| command to the preamble of your
+% songbook.
+%
+% \item Run \LaTeX2e{} on the songbook source.
+%
+% \item Run the \texttt{./mksbtdx} shell script on the \texttt{.tIdx}
+% file that was produced by the previous step. Do this by typing
+% ``\texttt{mksbtdx} \textit{jobname}'' at a UNIX command line. For
+% example, the index file for \texttt{sample-sb.tex} was produced by
+% typing ``\texttt{mksbtdx sample-sb}''.
+%
+% \item Make your own copy of \texttt{sampleTdx.tex} and customize its
+% header and footer definitions (so they match your songbook's). Then
+% change the name of the file being |\input|ed to match your index
+% file. (\texttt{./mksbtdx} told you this file's name).
+%
+% \item Run \LaTeX2e{} on your copy of \texttt{sampleTdx.tex}.
+% \end{enumerate}
+%
+% \subsection{Song Key Index Generation}
+% Steps to follow in order to produce a song key index:
+% \begin{enumerate}
+%
+% \item Add a |\makeKeyIndex| command to the preamble of your
+% songbook.
+%
+% \item Run \LaTeX2e{} on the songbook source.
+%
+% \item Run the \texttt{./mksbkdx} shell script on the \texttt{.kIdx}
+% file that was produced by the previous step. Do this by typing
+% ``\texttt{mksbkdx} \textit{jobname}'' at a UNIX command line. For
+% example, the key index file for \texttt{sample-sb.tex} was produced
+% by typing ``\texttt{mksbkdx sample-sb}''.
+%
+% \item Make your own copy of \texttt{sampleKdx.tex} and customize its
+% header and footer definitions (so they match your songbook's). Then
+% change the name of the file being |\input|ed to match your index
+% file. (\texttt{./mksbkdx} told you this file's name).
+%
+% \item Run \LaTeX2e{} on your copy of \texttt{sampleKdx.tex}.
+% \end{enumerate}
+%
+% \subsection{Song Artist Index Generation}
+% To produce an index by song artist (composer) follow the same steps as
+% for song key index generation, above, with the following exceptions:
+% \begin{itemize}
+%
+% \item use |\makeArtistIndex| instead of |\makeKeyIndex|.
+%
+% \item use \texttt{./mksbadx} instead of \texttt{./mksbkdx}.
+%
+% \item use \texttt{sampleAdx.tex} instead of \texttt{sampleKdx.tex}.
+% \end{itemize}
+%
+% \section{Example}
+% Here is an example songbook; where the the songbook contains exactly
+% one song.
+% {\small\begin{verbatim}
+% \documentstyle[12pt]{book}
+% \usepackage[chordbk]{songbook} %% Words & Chords edition.
+%
+% %%
+% % C.C.L.I. license number definition; for copyright licensing info.
+% %%
+% \newcommand{\CCLInumber}{\#999999}
+% \newcommand{\CCLIed}{(CCLI \CCLInumber)}
+% \newcommand{\NotCCLIed}{}
+% \newcommand{\PGranted}{}
+% \newcommand{\PPending}{(Permission Pending)}
+%
+% %%
+% % Turn on index and table of contents.
+% %%
+% \makeTitleIndex %% Title and First Line Index.
+% \makeTitleContents %% Table of Contents.
+% \makeKeyIndex %% Song Key Index.
+% \makeArtistIndex %% Index by Artist.
+%
+% \begin{document}
+% %%
+% % Songbook begins.
+% %%
+% \begin{song}{What A Mighty God We Serve}{C}
+% {\SBPubDom}
+% {\SBUnknownTag}
+% {Isaiah 9:6}
+% {\NotCCLIed}
+%
+% \renewcommand{\RevDate}{February~11,~1993}
+% \SBRef{Give Thanks}{Hosanna! Music Tape HM-7}
+% \SBRef{Hosanna! Music Book~I}{\#93}
+%
+% \begin{SBOpGroup}
+% \Ch{C}{What} a mighty God we serve,
+%
+% What a mighty God we \Ch{G7}{serve},
+%
+% \Ch{C}{An}gels bow before Him,
+%
+% \Ch{C}{Hea}ven and earth adore Him,
+%
+% \Ch{C}{What} a mighty \Ch{G7}{God} we \Ch{C}{serve!}\Ch{[}{}\Ch{F}{}
+% \Ch{C}{}\Ch{]}{}
+% \end{SBOpGroup}
+%
+% \begin{SBVerse}
+% O \Ch{C}{Zion,} O \Ch{F}{Zion,} that \Ch{G7}{bring}est good \Ch{C}{tid}ings,
+%
+% Get thee \Ch{F}{up} into the \Ch{G7}{High} Moun\Ch{C}{tains}
+%
+% Je\Ch{C}{ru}salem, Je\Ch{F}{ru}salem, that \Ch{G7}{bring}est good \Ch{C}{tid}ings
+%
+% Lift up thy \Ch{F}{voice} with \Ch{G7}{all} thy \Ch{C}{strength}
+%
+% Lift it \Ch{F}{up,} be not afraid;
+%
+% Lift it \Ch{C}{up,} be not afraid
+%
+% Say \Ch{Am}{unto} the \Ch{C}{ci}ties of \Ch{G7}{Judah,}
+%
+% ``Behold your \Ch{C}{God,}\Ch{C7}{} Behold your \Ch{F}{God,}
+%
+% Be\Ch{C}{hold} \Ch{G7}{your} \Ch{C}{God!''}
+% \end{SBVerse}
+%
+% \CBPageBrk
+% \begin{SBExtraKeys}{%
+% \STitle{What A Mighty God We Serve}{D}
+%
+% \begin{SBOpGroup}
+% \Ch{D}{What} a mighty God we serve,
+%
+% What a mighty God we \Ch{A7}{serve},
+%
+% \Ch{D}{An}gels bow before Him,
+%
+% \Ch{D}{Hea}ven and earth adore Him,
+%
+% \Ch{D}{What} a mighty \Ch{A7}{God} we \Ch{D}{serve!}\Ch{[}{}\Ch{G}{}
+% \Ch{D}{}\Ch{]}{}
+% \end{SBOpGroup}
+%
+% \begin{SBVerse}
+% O \Ch{D}{Zion,} O \Ch{G}{Zion,} that \Ch{A7}{bring}est good \Ch{D}{tid}ings,
+%
+% Get thee \Ch{G}{up} to into the \Ch{A7}{High} Moun\Ch{D}{tains}
+%
+% Je\Ch{D}{ru}salem, Je\Ch{G}{ru}salem, that \Ch{A7}{bring}est good
+% \Ch{D}{tid}ings
+%
+% Lift up thy \Ch{G}{voice} with \Ch{A7}{all} thy \Ch{D}{strength}
+%
+% Lift it \Ch{G}{up} be not afraid,
+%
+% Lift it \Ch{D}{up} be not afraid
+%
+% Say \Ch{Bm}{unto} the \Ch{D}{ci}ties of \Ch{A7}{Judah,}
+%
+% ``Behold your \Ch{D}{God,}\Ch{D7}{} Behold your \Ch{G}{God,}
+%
+% Be\Ch{D}{hold} \Ch{A7}{your} \Ch{D}{God!''}
+% \end{SBVerse}
+% }\end{SBExtraKeys}
+% \end{song}
+% \end{document}
+% \bye
+% \end{verbatim}}
+%
+% \changes{v4.5}{2010/04/30}{Added new dependency: \texttt{xstring.sty}.}
+% \section{Dependencies}
+% The \Songbook{} style is dependent upon four other \LaTeX2e{} styles:
+% \texttt{conditionals.sty}, \texttt{calc.sty}, \texttt{ifthen.sty},
+% \texttt{multicol.sty}, and \texttt{xstring.sty}.
+% \texttt{Conditionals.sty} is supplied with this package.
+% \texttt{Calc.sty}, \texttt{ifthen.sty}, and \texttt{multicol.sty} are
+% part of the \LaTeX2e{} distribution. \texttt{xstring.sty} is available
+% from CTAN.
+%
+% Embedding guitar chord fingering charts within a songbook can be
+% accomplished with the \texttt{texchord.sty} package; which is supplied
+% in the contrib directory of the \Songbook{} distribution.
+%
+%
+% \section{Files}
+% \begin{description}
+% \item[conditionals.sty] Donald Arseneau's conditional tests; included
+% with Donald's kind permission.
+% \item[mksbadx] A shell script around makeindex to sort the song
+% artist index.
+% \item[mksbkdx] A shell script around makeindex to sort the song
+% key index.
+% \item[mksbtdx] A shell script around makeindex to sort the
+% title \& first line index.
+% \item[relnotes.txt] The \Songbook{} package release notes.
+% \item[sample-sb.tex] A sample songbook.
+% \item[sampleAdx.tex] Song artist index for the sample songbook.
+% \item[sampleKdx.tex] Song key index for the sample songbook.
+% \item[sampleTdx.tex] Title \& first line index for the sample
+% songbook.
+% \item[sampleToc.tex] TOC for the sample songbook.
+% \item[songbook.ist] The \Songbook{} package makeindex \texttt{.ist} file.
+% \item[songbook.dtx] The base style file.
+% \item[songbook.inx] The install script used to create
+% \texttt{songbook.sty}.
+% \end{description}
+%
+% \section{See Also}
+% Some resources you will find helpful when coding songbooks:
+% \begin{itemize}
+% \item \textit{\LaTeX{} A Document Preparation System,} by Leslie Lamport
+%
+% \item \textit{The \LaTeX{} Companion,} by Goossens, Mittlebach, \&~Samarin
+%
+% \item The \Songbook{} homepage, at URL \texttt{http://rath.ca/Misc/Songbook/}
+%
+% \item \textit{The \TeX{} book,} by Donald Knuth
+% \end{itemize}
+%
+% \changes{v4.1}{2003/08/31}{Added the Contributed Resources subsection.}
+% \subsection{Contributed Resources}
+% A couple of \Songbook{} users have created additional resources intended to
+% be used with the \Songbook{} style. If you have written anything which you
+% would like to contribute to \Songbook{} style's distribution, please let
+% me know.
+% \def\LyX{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\spacefactor1000}
+% \begin{description}
+% \item[CarolBook] a \Songbook{} 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.
+%
+% \item[crd2sb] a perl script which converts Chord files into Songbook files.
+% Contributed by Abel Chow $<$\texttt{abel@g2networks.com}$>$. Note that
+% a postscript formatter for Chord songs can be ftp'ed from:\\
+% \texttt{ftp://ftp.uu.net/doc/music/guitar/resources/misc/CHORD/}.
+%
+% \item[modulate] a perl script for modulating a song from one key to another.
+% Contributed by Christopher Rath $<$\texttt{christopher@rath.ca}$>$.
+%
+% \item[\LyX{} Integration] files for use of the \Songbook style with \LyX.
+% Christian Ridderstr\"{o}m $<$\texttt{chr@md.kth.se}$>$ has put together the
+% necessary files to allow \Songbook{}s to be edited using \LyX. While
+% these files are not distributed in the \Songbook{}'s \texttt{contrib}
+% files, they are available from \\
+% \texttt{http://www.md.kth.se/\~{}chr/lyx/songbook/Songbook.shtml}.
+%
+% \item[texchord.sty] \LaTeX{} macros for printing guitar fingering charts.
+% Contributed by Joel M. Hoffman $<$\texttt{joel@wam.umd.edu}$>$. Note,
+% this style is \emph{no longer} actively supported by Joel.
+% \end{description}
+%
+% \subsection{Other Similar Packages}
+% There are a number of song and songbook formatting packages available
+% which attempt to provide similar functionality to the
+% \Songbook{} package (although, IMHO, my package is better).
+% Similar \LaTeX2e packages (of which the author is aware) include:
+% \begin{description}
+% \item[chord.sty] a song formatting package based on \LaTeX{}'s article
+% style; written by Olivier Biot (\texttt{http://www.biot.yucom.be/}).
+%
+% \item[Chordpack] a utility for typesetting \emph{chordpro} chord
+% files in TeX; written by Daniel Polansky
+% (\texttt{http://www.fi.muni.cz/\~{}xpolansk/home.html}) and\\ available
+% at \texttt{http://www.fi.muni.cz/\~{}xpolansk/chordpack}.
+%
+% \item[gchords.sty] a TeX packages for typesetting guitar chord
+% diagrams; written by Kasper Peeters
+% (\texttt{http://www.damtp.cam.ac.uk/user/kp229/}) and available at
+% \texttt{http://www.damtp.cam.ac.uk/user/kp229/gchords/}.
+%
+% \item[Guitar.sty] \LaTeX{} macros for typesetting guitar chords over
+% song texts; written by Martin Väth
+% (\texttt{http://www.mathematik.uni-wuerzburg.de/\~{}vaeth/}) and
+% available from\\
+% \texttt{http://www.mathematik.uni-wuerzburg.de/\~{}vaeth/download/}.
+%
+% \item[GuitarTeX] a graphical tool for editing \emph{chordpro} chord
+% files and printing them in TeX; written by Joachim Miltz and
+% available from\\ \texttt{http://www.rz-home.de/\~{}jmiltz/guitartex/}.
+%
+% \item[song.sty] a song formatting package based on \LaTeX{}'s book
+% style; written by Jens T.~Berger Thielemann
+% (\texttt{http://www.stud.ifi.uio.no/\~{}jensthi/}).
+% \end{description}
+%
+% \section{Bugs}
+% In the specific case where a |\Ch|, |\Chr|, or |\ChX| macro begins a
+% paragraph that isn't inside one of \Songbook{}'s versicle environments,
+% that line may not indent properly in the |chordbk| substyle
+% (specifically, a long, wrapped line won't have its extra indentation).
+% I have been unable to identify the reason for the problem, although it
+% is easily reproducible. The best way to avoid this problem is through
+% use of the |\SBOpGroup| environment. If that isn't possible, the
+% problem may often be overcome by starting
+% such lines with an |\mbox{}| command; this inserts an empty (i.e., zero
+% width) mbox at the start of the line. For example:
+% \begin{verbatim}
+% \mbox{}\Ch{G}{Great} is the Lord \Ch{A}{even} beyond the
+% \Ch{D}{borders} of I\Chr{F#m}{srae}\Ch{Bm7}{l;}
+% \end{verbatim}
+%
+% The |\emph| macro is not completely compatible with |\Ch| and its friends.
+% The specific problem is that sharps can not be specified via `\#' within
+% an |\emph| macro. The following snippet,
+% \begin{verbatim}
+% \emph{for the \Ch{G/A}{King} of \Ch{F#}{kings.}}
+% \end{verbatim}
+% will fail with the \LaTeX2e{} message,
+% \begin{verbatim}
+% ! Illegal parameter number in definition of \\reserved\@a.
+% <to be read again>
+% \end{verbatim}
+% The error message can be supressed by replacing `\#' with `\#\#',
+% however this results in a double-sharp being typeset. The problem can
+% be worked-around by replacing the snippet with:
+% \begin{verbatim}
+% \emph{for the \Ch{G/A}{King} of} \Ch{F#}{\emph{kings.}}
+% \end{verbatim}
+%
+% \section{Special Thanks}
+% Thanks to Donald Arseneau for writing the \texttt{conditionals.sty}
+% file, and for helping write the |\Chord| macro. Donald, you are one
+% of the faithful who is always quick to reply with correct answers to
+% questions posted to |comp.text.tex|. Thanks again.
+%
+% Thanks also to Philip Hirschhorn whose |\Chord| macro I ultimately
+% used in versions~1.0--2.3 of the \Songbook{} style, and to Olivier
+% Boit who constructed a similar chord macro which I used to enhance
+% Philip's code for version~3.0
+%
+% A quick thank you to Herbert Martin Dietze
+% $<$\texttt{herbert@fh-wedel.de}$>$ for noting that |SBVerse*| and its
+% cousins were missing from the \texttt{.sty} file, and then coding up
+% an acceptable |SBVerse*| which I could quickly use as a model for the
+% other two missing environments.
+%
+% For version~4.1, I am grateful to Mark Wooding for suggesting the
+% method I ultimately used for implementing the |song| environment's
+% \meta{Include?} option (although I did not use his preferred
+% method).
+%
+% I am grateful to Adam Fletcher for prodding me to add the per-song
+% |compactsong| implementation; which took many years more than it
+% should have taken for me to get it coded.
+%
+% \section{Author}
+% Christopher Rath
+% \hskip 1cm \texttt{christopher@rath.ca}
+% \hskip 1cm (613)~824-4584\\
+% 1371 Major Rd.\\
+% Orleans, ON\\
+% Canada \hskip .5cm K1E 1H3
+%
+% \StopEventually{
+% ^^A \PrintIndex
+% ^^A \PrintChanges
+%
+% } ^^A end \StopEventually
+%
+% \newpage
+%
+% \section{\texttt{.dtx} Documentation Driver}
+% There is one last administrative detail to take care of before
+% beginning the detailed review: the insertion of the documentation
+% driver (i.e., the code that builds the documentation \texttt{.dvi}
+% file.
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc} \RequirePackage{calc} \EnableCrossrefs
+\CodelineIndex
+\RecordChanges % Gather update information
+ %\OnlyDescription % comment out for implementation details
+ %\OldMakeindex % use if your MakeIndex is pre-v2.9
+\setlength\hfuzz{15pt} % dont make so many
+\hbadness=7000 % over and under full box warnings
+\def\MacroFont{\fontencoding\encodingdefault
+ \fontfamily\ttdefault
+ \fontseries\mddefault
+ \fontshape\updefault
+ \footnotesize}%
+
+\voffset=-1.00in
+\topmargin=0.5in
+\headheight=0.0in
+\headsep=0.20in
+\textheight=9.4in
+\footskip=0.4in
+
+\newenvironment{ParameterList}
+ {\par\hskip 1.5em Parameters:\begin{list}{}
+ {\setlength{\topsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\itemsep}{0pt}
+ \setlength{\leftmargin}{\leftmargin + 1.5em}
+ \setlength{\parsep}{0pt}
+ }
+ }
+ {\end{list}\vskip 0.5ex
+ }
+\newcommand{\parm}[1]{\texttt{[}\meta{#1}\texttt{]}}
+\begin{document}
+ \setcounter{IndexColumns}{1}
+ \DocInput{songbook.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \newpage
+%
+% \part{Detailed Documentation}
+% This section contains style implementation details
+% along with the detailed descriptions and documentation for the
+% \Songbook{} commands and environments. It is strongly recommended
+% that these detailed descriptions be reviewed at least once as part
+% of becoming familiar with the \Songbook{} style.
+%
+% This coding style has been structured in a top down fashion which assume
+% that macros and environments must be declared before they are first used.
+% \TeX{} doesn't require this to be so, but since I've been coding software
+% this way for 20+ years, it's easier for me to also maintain this structure
+% here too.
+%
+% \section{Identification Part}
+% The first section in \texttt{songbook.sty} is what \LaTeX2e{} calls
+% the \textit{Implementation Part}. This is where \Songbook{}
+% identifies itself to the outside world. As part of this section
+% an RCS ``Id:'' variable has been included as a \TeX{} comment; the
+% intent is that this may assist with reporting problems later.
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% I D E N T I F I C A T I O N P A R T %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% rcsid = @(#)$Id: songbook.dtx,v 1.16 2010-04-12 18:10:15 rathc Exp $
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{songbook}[2010/04/30 v4.5 All purpose Songbook style]
+\typeout{Document Subclass: songbook 2010/04/30 v4.5 All purpose Songbook style}
+% \end{macrocode}
+%
+% \section{Initial Code Part}
+% The next section is called the \textit{Initial Code Part.} This
+% is where any dependencies in the early sections of
+% \texttt{songbook.sty} has are contained. In the case of
+% the \Songbook{} style we must declare our dependence on
+% \texttt{calc.sty} here because some of \Songbook{}'s
+% declarative sections themselves contain calculations. In
+% this section we also declare the |\if| constructs used
+% in the package.
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% I N I T I A L C O D E P A R T %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%========================================================
+%% E A R L Y P A C K A G E D E P E N D E N C I E S %
+%%========================================================
+% \end{macrocode}
+%
+% Page layout calculations have become overly complex and
+% so as of version~4.0 we now require \texttt{calc.sty} to make
+% them readable once again. In every instance we could probably
+% find a way to get along without \texttt{calc.sty}; however,
+% since the package is a part of the \LaTeX2e Base there is no
+% logical reason to avoid its use.
+%
+% \begin{macrocode}
+\RequirePackage{calc}
+
+% \end{macrocode}
+%
+% \subsection{If Constructs}
+% Most of these |\if| contructs are needed for use in the \textit{Delaration
+% Of Options} section of \texttt{songbook.sty}. In each case, we create
+% the if statement (a.k.a. the flag) and then immediately set it to a
+% known value. Where there are several flags which act as sort of radio
+% buttons, all of the flags are set so that none of them is selected;
+% which has been done so that if we forget to deal with them properly
+% in the \textit{Declaration Of Options} code it will eventually manifest
+% itself as an error.
+%
+% Since the majority of the |\if|s have to be declared in this section,
+% we will go ahead and declare the remaining |\if|s as well. It's
+% simpler to maintain them when they are all in one place.
+%
+% \begin{macrocode}
+%%========================================================
+%% I F C O N S T R U C T S %
+%%========================================================
+% \end{macrocode}
+%
+% \subsubsection{\Songbook{} Types}
+% At any time, only one of
+% |\ifChordBk|, |\ifOverhead|, or |\ifWordBk| may be true.
+% These |\if|s correspond directly to the |chordbk|, |overhead|,
+% and |wordbk| options; one of which \emph{must} be used in the
+% |\usepackage{}| statement used to invoke the \Songbook{} style.
+% All three flags are set to |\false|, and this fact is use later
+% in order to confirm that the user had specified one of the
+% 3~options in their document.
+%
+% \begin{macro}{\ifChordBk}
+% |\ifChordBk| is true if the user specified the |chordbk| option.
+%
+% \begin{macro}{\ifOverhead}
+% |\ifOverhead| is true if the user specified the |overhead| option.
+%
+% \begin{macro}{\ifWordBk}
+% |\ifWordBk| is true if the user specified the |wordbk| option.
+%
+% \begin{macrocode}
+\newif\ifChordBk \ChordBkfalse
+\newif\ifOverhead \Overheadfalse
+\newif\ifWordBk \WordBkfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{\Songbook{} Subtypes}
+% A pair of |\if|s are declared to indicate
+% whether we are only typesetting words on the page (i.e., the flag is
+% false if we are typesetting words \emph{and} chords). We are in words
+% only mode when the user has declared either the |overhead| or |wordbk|
+% options. When these flags are first declared they are set to the same
+% value, false.
+%
+% \begin{macro}{\ifWordsOnly}
+% |\ifWordsOnly| is true if we're in words-only mode.
+%
+% \begin{macro}{\ifNotWordsOnly}
+% |\ifNotWordsOnly| always has a value oposite the of
+% |\ifWordsOnly|. |\ifNotWordsOnly| is false if we are in words-only
+% mode.
+%
+% \begin{macrocode}
+\newif\ifWordsOnly \WordsOnlyfalse
+\newif\ifNotWordsOnly \NotWordsOnlyfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Song Indicator}
+% \begin{macro}{\ifSBinSongEnv}
+% The |\ifSBinSongEnv| flag is provided to the style
+% or a songbook's author to detect if the current text is inside of a |song|
+% environment. This flag hasn't proven to be useful, but it doesn't hurt
+% anything to leave it around; so, it hasn't been removed---who knows, there
+% may well be a user somewhere making use of it! The |song| environment
+% takes care of setting this flag's status.
+%
+% \begin{macrocode}
+\newif\ifSBinSongEnv \SBinSongEnvfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Behaviour Flags}
+% There are three flags which can be set in order
+% to effect certain behaviours from the \Songbook{} style. They are not
+% related to one another but have been grouped together since they are
+% they all |\if|s used to control \Songbook{} behaviour.
+%
+% \begin{macro}{\ifCompactSongMode}
+% |\ifCompactSongMode| is set to true if you want
+% songs presented in a compact mode. It is initially set to false.
+% This flag will \emph{only} be set to true by the user; the style
+% itself does not toggle this flag. Set this to true by specifying
+% the |compactsong| option in the |\usepackage| statement.
+%
+% \changes{v4.1}{2003/08/31}{Added \\ifExcludeSong construct.}
+% \begin{macro}{\ifExcludeSong}
+% |\ifExcludeSong| is set to true if you want to have the current
+% song excluded from the songbook. It is initially set to false,
+% and would only be set to true inside a |song| environment, during
+% processing of a song to be excluded. Its value is set to true
+% when you pass a value of ``\texttt{N}'' as the first (optional)
+% parameter to a |song| environment.
+%
+% \changes{v4.1}{2003/08/31}{Added \\ifPrintAllSongs construct.}
+% \begin{macro}{\ifPrintAllSongs}
+% |\ifPrintAllSongs| is set to true if you want to have \Songbook{}
+% print all a songbook's songs regardless of what option may have been
+% specified in each song.
+%
+% \begin{macro}{\ifSamepageMode}
+% |\ifSamepageMode| indicates we want the \Songbook{}
+% style to try and keep each song together on the same page. Set this
+% true or false using the |\SamepageModetrue| and |\SamepageModefalse|
+% commands, respectively. Important note: this command has \emph{not}
+% been documented in the \textit{High Level Documentation} section, above;
+% |\ifSamepageMode| is
+% very unreliable. The \LaTeX2e{} page breaking algorithms are not
+% happy when this mode is used. The the |song| environment description,
+% below, for a further explanation.
+%
+% \begin{macro}{\ifSongEject}
+% |\ifSongEject| is set to true if we
+% want a new page generated at the end of every |song| environment. A
+% value of true means eject after every |song| environment (default value
+% is true). Set this true or false using the |\SongEjecttrue| and
+% |\SongEjectfalse| commands, respectively.
+%
+% \changes{v4.5}{2010/04/30}{Added new |CompanAllMode| boolean.}
+% \begin{macrocode}
+\newif\ifCompactAllMode \CompactAllModefalse
+\newif\ifCompactSongMode\CompactSongModefalse
+\newif\ifExcludeSong \ExcludeSongfalse
+\newif\ifPrintAllSongs \PrintAllSongsfalse
+\newif\ifSamepageMode \SamepageModefalse
+\newif\ifSongEject \SongEjecttrue
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Papesize Indicators}
+% This next set of flags are needed to track
+% the papersize specified by the user in then processed in the
+% \textit{Declaration Of Options} section. This set of |\if|s are
+% mutually exclusive and only one of them should be true at any one time.
+% They are all initially set to false; setting of a default value is done
+% via an |\ExecuteOptions{}| clause, below. These flags were created for
+% use by the \Songbook{} style itself, but have been made part of the
+% public interface to simplify page layout coding related to paper
+% handling in a user's own songbook.
+%
+% \begin{macro}{\ifSBpaperA4}
+% |\ifSBpaperA4| is true if papersize is A4.
+% \begin{macro}{\ifSBpaperA5}
+% |\fSBpaperA5| is true if papersize is A5.
+% \begin{macro}{\ifSBpaperB5}
+% |\ifSBpaperB5| is true if papersize is B5.
+% \begin{macro}{\ifSBpaperLtr}
+% |\ifSBpaperLtr| is true if papersize is US~Letter.
+% \begin{macro}{\ifSBpaperLgl}
+% |\ifSBpaperLgl| is true if papersize is US~Legal.
+% \begin{macro}{\ifSBpaperExc}
+% |\ifSBpaperExc| is true if papersize is US~Executive Letter.
+%
+% \begin{macrocode}
+\newif\ifSBpaperAfour \SBpaperAfourfalse
+\newif\ifSBpaperAfive \SBpaperAfivefalse
+\newif\ifSBpaperBfive \SBpaperBfivefalse
+\newif\ifSBpaperLtr \SBpaperLtrfalse
+\newif\ifSBpaperLgl \SBpaperLglfalse
+\newif\ifSBpaperExc \SBpaperExcfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Fonts}
+% Fonts are specified up-front in this section in order to simplify
+% the |\DeclareOption{}| clauses that follow (i.e., those clauses
+% need only make changes against these baseline settings). The fonts
+% sizes and selections initially declared herein are those necessary
+% for |chordbk| songbooks.
+%
+% Fonts are handled by way of \LaTeX2e{} commands defined using the
+% |\newcommand| command. This was done specifically so that traditional
+% \LaTeX2e{} font selection occurs in the context the \Songbook{}
+% font command is used. I may have completely misunderstood how
+% \LaTeX2e{} does its font selection, in which case my implementation
+% choice here is pointless; however, until proven otherwise\ldots here
+% it is.\footnote{Given that \texttt{doc.dtx} uses fonts in this fashion,
+% I feel I'm in pretty good company.} Change these font specifiers via
+% \LaTeX2e's |\renewcommand.|
+%
+% \begin{macrocode}
+%%========================================================
+%% F O N T S %
+%%========================================================
+% \end{macrocode}
+%
+% \subsubsection{Chord Fonts}
+% These font selectors are used to determine how
+% chords are printed in words and chords songbooks:
+%
+% \begin{macro}{\ChBassFont}
+% |\ChBassFont| sets the font for the bass note
+% in chords as printed by the |\Ch|, |\Chr|, and |\ChX| commands.
+%
+% \begin{macro}{\ChBkFont}
+% |\ChBkFont| sets the font for square brackets
+% typeset by |\Ch|, |\Chr|, and |\ChX| commands.
+%
+% \begin{macro}{\ChFont}
+% |\ChFont| sets the font for chords as printed
+% by the |\Ch|, |\Chr|, and |\ChX| commands. This used to be set to
+% |\bf\sf| (i.e., cmss12 at 14.4pt).
+%
+% \begin{macrocode}
+\newcommand{\ChBassFont}{\normalsize\bf\sf} % = cmss12 at 12.0pt
+\newcommand{\ChFont}{\large\fontfamily{\sfdefault}%
+ \fontseries{sbc}\fontshape{n}\selectfont} %=cmssbc12 at 14.4pt
+\newcommand{\ChBkFont}{\ChFont\fontseries{m} %
+ \selectfont} % =cmssm12 at 14.4pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Title Block Fonts}
+% These font selectors are used to select
+% the fonts used in the Title Block that occurs that the start of
+% each song:
+%
+% \begin{macro}{\CpyRtFont}
+% |\CpyRtFont| sets the font used to print the
+% copyright symbol produced by the |\CpyRt| command.
+%
+% \begin{macro}{\CpyRtInfoFont}
+% |\CpyRtInfoFont| sets the font used to print
+% the copyright licensing information parameter of the |\song|
+% environment; which appears after the copyright information
+% parameter under the song title.
+%
+% \begin{macro}{\STitleFont}
+% |\STitleFont| sets the font used to print the
+% song title, as generated by the |\STitle| command.
+%
+% \begin{macro}{\STitleKeyFont}
+% |\STitleKeyFont| sets the font used to print
+% the key a song is written in, as generated by the |\STitle|
+% command.
+%
+% \begin{macro}{\STitleNumberFont}
+% |\STitleNumberFont| sets the font used to
+% print the |\SBSongCnt| in front of the song title, as generated by
+% the |\STitle| command. This is one of two \Songbook{} font commands
+% that are implemented using a real \LaTeX2e{} |\font| command; this
+% turned out to be the easiest manner in which to obtain the desired
+% fonts. In order to make the |\STitleNumberFont|'s behaviour the
+% the same as the other \Songbook{} font commands, the implementation
+% is done indirectly; whereby the |\font| command is inserted into
+% the |\STitleNumberFont| command so that it may be changed by the
+% user in the same way as the other font commands in this package.
+%
+% \begin{macro}{\ScriptRefFont}
+% |\ScriptRefFont| sets the font used to print
+% the scripture reference generated by the |\ScriptRef| command.
+%
+% \begin{macro}{\WandMFont}
+% |\WandMFont| sets the font used to print the
+% lyricist and composer line generated by the |\WandM| command.
+%
+% \begin{macrocode}
+\newcommand{\CpyRtFont}{\footnotesize} % = cmr10 at 10pt
+\newcommand{\CpyRtInfoFont}{\tiny} % = cmss8 at 8pt
+\newcommand{\STitleFont}{\large\bf\sf} % = cmss12 at 14.4pt
+\newcommand{\STitleKeyFont}{\large} % = cmr12 at 14.4pt
+\font\STNFont=cmtt12 at 20pt
+\newcommand{\STitleNumberFont}{\STNFont} % = cmtt12 at 20pt
+\newcommand{\ScriptRefFont}{\footnotesize} % = cmr10 at 10pt
+\newcommand{\WandMFont}{\footnotesize} % = cmr10 at 10pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Versicle Tag Fonts}
+% These font selectors are used to select
+% the fonts used to tag verses, choruses, bridges, and other elements
+% with which a song is constructed (e.g., verse numbers, ``Ch:''
+% chorus indicator, etc.):
+%
+% \begin{macro}{\SBBracketTagFont}
+% |\SBBracketTagFont| sets the font used to
+% create the tag for an |SBBracket| environment.
+%
+% \begin{macro}{\SBBridgeTagFont}
+% |\SBBridgeTagFont| sets the font used to
+% create the tag for an |SBBridge| environment.
+%
+% \begin{macro}{\SBChorusTagFont}
+% |\SBChorusTagFont| sets the font used to
+% print the chorus tag, |\SBChorusTag|.
+%
+% \begin{macro}{\SBEndTagFont}
+% |\SBEndTagFont| sets the font used to
+% print the tag, |\SBEndTag|, for the |\SBEnd| command.
+%
+% \begin{macro}{\SBIntroTagFont}
+% |\SBIntroTagFont| sets the font used to
+% print the introduction tag, |\SBIntroTag|.
+%
+% \begin{macro}{\SBOccursBrktFont}
+% |\SBOccursBrktFont| sets the font used to
+% create the large left and right square brackets used to delimit the
+% |\SBOccurs| environment.
+%
+% \begin{macro}{\SBOccursTagFont}
+% |\SBOccursTagFont| sets the font used to
+% create the |\SBOccurs| tag.
+%
+% \begin{macro}{\SBVerseNumberFont}
+% |\SBVerseNumberFont| sets the font used to
+% print the |\SBVerseCnt| in front of verses in an |SBVerse| environment.
+%
+% \begin{macro}{\SBSectionNumberFont}
+% |\SBSectionNumberFont| sets the font used to
+% print the |\SBSectionCnt| in front of sections in an |SBSection|
+% environment.
+%
+% \begin{macrocode}
+\newcommand{\SBBracketTagFont}{\small\bf\sf} % = cmss10 at 10.0pt
+\newcommand{\SBBridgeTagFont}{\SBEndTagFont} % = cmss10 at 10.9pt
+\newcommand{\SBChorusTagFont}{\small\bf\sf} % = cmss10 at 10.9pt
+\newcommand{\SBEndTagFont}{\small\bf\sf} % = cmss10 at 10.9pt
+\newcommand{\SBIntroTagFont}{\SBEndTagFont} % = cmss10 at 10.9pt
+\font\SBOBFont=cmss17 at 30pt
+\newcommand{\SBOccursBrktFont}{\SBOBFont} % = cmss17 at 30pt
+\newcommand{\SBOccursTagFont}{\small\bf\sf} % = cmss10 at 10.0pt
+\newcommand{\SBVerseNumberFont}{\small\bf\sf} % = cmss10 at 10.9pt
+\newcommand{\SBSectionNumberFont}{\small\bf\sf} % = cmss10 at 10.9pt
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Marginal Notes Fonts}
+% These font selectors are used to select
+% the fonts used when \Songbook{} commands make notations in the
+% margin of the songbook:
+%
+% \begin{macro}{\SBMargNoteFont}
+% |\SBMargNoteFont| sets the font used in the
+% marginal reference printed by the |\SBMargNote| command.
+%
+% \begin{macro}{\SBRefFont}
+% |\SBRefFont| sets the font used in the
+% marginal reference printed by the |\SBRef| command.
+%
+% \begin{macrocode}
+\newcommand{\SBMargNoteFont}{\scriptsize} % = cmti8 at 8pt
+\newcommand{\SBRefFont}{\SBMargNoteFont} % = cmti8 at 8pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Song Body Fonts}
+% These font selector command are used to
+% select fonts which are used within the body of songs:
+%
+% \begin{macro}{\SBDefaultFont}
+% |\SBDefaultFont| sets the default font for
+% the songbook. We will insert an occurrence of this command at the
+% top of the songbook using the |\AtBeginDocument{}| clause, below.
+%
+% \begin{macro}{\SBLyricNoteFont}
+% |\SBLyricNoteFont| sets the font used in
+% comments placed within the lyrics giving musical direction. This
+% is the only font command commonly used by the writer of a songbook.
+% For example, to tag a line to be sung only by the Cantor and
+% another by everyone, one would write:
+% \begin{verbatim}
+% {\SBLyricNoteFont (Cantor)} Give thanks to the Lord.
+%
+% {\SBLyricNoteFont (All)} His love endures forever.
+% \end{verbatim}
+%
+% \begin{macrocode}
+\newcommand{\SBDefaultFont}{\fontfamily{\rmdefault}%
+ \large} % = cmr12 at 14.4pt
+\newcommand{\SBLyricNoteFont}{\footnotesize\sf} % = cmss10 at 10pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Other Fonts}
+% The remaining font selector commands:
+%
+% \begin{macro}{\SBOHContTagFont}
+% |\SBOHContTagFont| sets the font used to
+% print the |\OHContPgFtr| and |\OHContPgHdr|.
+%
+% \begin{macrocode}
+\newcommand{\SBOHContTagFont}{\small\bf\sf\itshape} % = cmss10 at 10.9pt
+
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v4.5}{2010/04/30}{Added |compactsong| fonts.}
+% \subsubsection{Compact Song Fonts}
+% Downsized fonts to allow song to fit into half the space (i.e.,
+% two column mode) for |compactsong| printing; although the title
+% will not be reset since it will be presented unchanged from normal
+% chordbk mode.
+%
+% \begin{macro}{\ChBassFontCS}
+% \begin{macro}{\ChFontCS}
+% \begin{macro}{\ChBkFontCS}
+% \begin{macro}{\SBDefaultFontCS}
+% \begin{macro}{\SBOccursBrktFontCS}
+%
+% \begin{macrocode}
+\newcommand{\ChBassFontCS}{\small\bf\sf} % = cmss12 at 11.0pt
+\newcommand{\ChFontCS}{\normalsize\fontfamily{\sfdefault}%
+ \fontseries{sbc}\fontshape{n}\selectfont} % = cmssbc12 at 12.0pt
+\newcommand{\ChBkFontCS}{\ChFont\fontseries{m} %
+ \selectfont} % = cmssm12 at 12.0pt
+\newcommand{\SBDefaultFontCS}{\normalsize} % = cmr12 at 12.0pt
+\newcommand{\SBOccursBrktFontCS}{\large\bf\sf} % = cmss10 at 10.9pt
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v4.5}{2010/04/30}{Added variables to save fonts for |compactsong| mode.}
+% \subsubsection{Fonts Saving Variables}
+% Variables in which to save the current fonts before
+% we make changes for compactsong mode. We'll use them restore
+% the original values again after leaving compact song mode.
+%
+% \begin{macro}{\ChBassFontSav}
+% \begin{macro}{\ChFontSav}
+% \begin{macro}{\ChBkFontSav}
+% \begin{macro}{\SBDefaultFontSav}
+% \begin{macro}{\SBOccursBrktFontSav}
+% \begin{macro}{\SBFontSavVar}
+%
+% \begin{macrocode}
+\newcommand{\ChBassFontSav}{\relax}%
+\newcommand{\ChFontSav}{\relax}%
+\newcommand{\ChBkFontSav}{\relax}%
+\newcommand{\SBDefaultFontSav}{\relax}%
+\newcommand{\SBOccursBrktFontSav}{\relax}%
+\newcommand{\SBFontSavVar}{\relax}%
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Configurable Dimensions}
+% In this section we define the spaces to leave in various situations.
+%
+% All of these spaces are defined as \LaTeX2e{} commands to overcome
+% limitations in length evaluation. For example, if
+% |\LeftMarginSBVerse| were to be defined as a length, and then
+% immediately set to |4em|s the specific length would be evaluated with
+% respect to the current font. This is not be what is desired;
+% instead a length evaluated with respect to the font in place at the
+% start of an |SBVerse| is what is desired. This can only be done by
+% making these lengths \LaTeX2e{} commands.
+%
+% \begin{macrocode}
+%%========================================================
+%% C O N F I G U R A B L E D I M E N S I O N S %
+%%========================================================
+% \end{macrocode}
+%
+% \subsubsection{Published Dimensions}
+% While the bulk of the declared dimensions have been created to make
+% the \Songbook{} style more user configurable, there are also some dimensions
+% which were created for internal use. This first section describes the
+% user configurable dimensions:
+%
+% \begin{macro}{\HangAmt}
+% |\HangAmt| is the amount to indent when a
+% line wraps. This has been defined using |\newcommand| instead of
+% |\newlength| so that any unit definitions are evaluated at the
+% time the |\HangAmt| command is used.
+%
+% \begin{macro}{\LeftMarginSBBracket}
+% |\LeftMarginSBBracket| is the amount of
+% left margin left in front of |SBBracket|s and |SBBracket*|s in
+% the songbook. The value for this variable has been chosen such
+% that the song-words for |SBVerse|s, |SBChorus|es, and |SBBracket|s
+% all align against the same left margin when printing standard
+% words \&~chords songbooks.
+%
+% \begin{macro}{\LeftMarginSBChorus}
+% |\LeftMarginSBChorus| is the amount of
+% left margin left in front of named choruses in the songbook.
+% In most cases |\LeftMarginSBChorus|, |\LeftMarginSBSection|, and
+% |\LeftMarginSBVerse| should all be the same value.
+%
+% \begin{macro}{\LeftMarginSBSection}
+% |\LeftMarginSBSection| is the amount of
+% left margin left in front of sections in the songbook.
+%
+% \begin{macro}{\LeftMarginSBVerse}
+% |\LeftMarginSBVerse| is the amount of left
+% margin left in front of verses in the songbook.
+%
+% \begin{macro}{\SBChordRaise}
+% |\SBChordRaise| is the distance to raise
+% the chords above the baseline of the text they sit over.
+%
+% \begin{macro}{\SBRuleRaiseAmount}
+% |\SBRuleRaiseAmount| is the distance to
+% raise the rule (as specified by\\ |\SBIntersyllableRule|) which
+% fills the space between adjoining syllables.
+%
+% \begin{macro}{\SpaceAboveSTitle}
+% |\SpaceAboveSTitle| is the space skipped
+% by the |\STitle| macro before it prints the song title.
+%
+% \begin{macro}{\SpaceAfterTitleBlk}
+% |\SpaceAfterTitleBlk| is the space inserted by the song environment
+% between the \emph{title block} and the versicles.
+%
+% \begin{macro}{\SpaceAfterChorus}
+% |\SpaceAfterChorus| is the vertical space
+% to leave after an |SBChorus| environment.
+%
+% \begin{macro}{\SpaceAfterOpGroup}
+% |\SpaceAfterOpGroup| is the vertical space
+% to leave after an |SBOpGroup| environment.
+%
+% \begin{macro}{\SpaceAfterSBBracket}
+% |\SpaceAfterSBBracket| is the vertical space to leave after an
+% |SBBracket| environment. This has proven troublesome to choose
+% (see also |\SpaceBeforeSBBracket| because the |list| environment
+% that produces the versicle inside of the |SBBracket| environment is
+% itself enclosed inside of a math construct (which requires the
+% |list| to have its vertical spacing supressed---otherwise the
+% vertical line forming the left bracket encloses unnecessary
+% whitespace). The vertical spacing around a list is created by way
+% of some nontrivial macros and can't simply be copied into some other
+% context. Thus, the choice of values for |\SpaceAfterSBBracket|
+% and |\SpaceBeforeSBBracket| have been rather arbitrarily chosen.
+%
+% \begin{macro}{\SpaceAfterSection}
+% |\SpaceAfterSection| is the vertical space
+% to leave after an |SBSection| environment.
+%
+% \begin{macro}{\SpaceAfterSong}
+% |\SpaceAfterSong| is the vertical space to
+% leave after a song.
+%
+% \begin{macro}{\SpaceAfterVerse}
+% |\SpaceAfterVerse| is the vertical space to
+% leave after an |SBVerse| environment.
+%
+% \begin{macro}{\SpaceBeforeSBBracket}
+% |\SpaceBeforeBBracket| is the vertical space to leave before an
+% |SBBracket| environment. None of the other versicles have an
+% extra space inserted before them. See |\SpaceAfterSBBracket|
+% for further explanation.
+%
+% \begin{macrocode}
+\newcommand{\HangAmt} {1.5em}
+\newcommand{\LeftMarginSBBracket}{2.85em}
+\newcommand{\LeftMarginSBChorus} {4em}
+\newcommand{\LeftMarginSBSection}{\LeftMarginSBChorus}
+\newcommand{\LeftMarginSBVerse} {\LeftMarginSBChorus}
+\newcommand{\SBChordRaise} {2.25ex}
+\newcommand{\SBOldChordRaise} {2.90ex}
+\newcommand{\SBRuleRaiseAmount} {0.57ex}
+\newcommand{\SpaceAboveSTitle} {0.5in}
+\newcommand{\SpaceAfterTitleBlk} {-1.75ex}
+\newcommand{\SpaceAfterChorus} {\vspace{0ex plus0ex minus3ex}}
+\newcommand{\SpaceAfterOpGroup} {\vspace{0ex plus0ex minus3ex}}
+\newcommand{\SpaceAfterSBBracket}{\vspace{2ex plus1ex minus1ex}}
+\newcommand{\SpaceAfterSection} {\vspace{0ex plus0ex minus3ex}}
+\newcommand{\SpaceAfterSong} {\vspace{0ex plus10ex minus3ex}}
+\newcommand{\SpaceAfterVerse} {\vspace{0ex plus0ex minus3ex}}
+\newcommand{\SpaceBeforeSBBracket}{\vspace{1ex plus1ex minus1ex}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Internal Dimensions}
+% These variables are used internally within \Songbook{} macros. They are
+% not part of the published \texttt{songbook.sty} interface; but a few of them
+% can be used to tune some of its functions.
+%
+% \begin{macro}{\chSpaceTolerance}
+% \begin{macro}{\chMiniSpace}
+% The |\chSpaceTolerance| and |\chMiniSpace| lengths are used in the |\Chr| macro.
+%
+% \begin{macro}{\sbBaselineSkipAmt}
+% |\sbBaselineSkipAmt| is used internally in |SBVerse|, |SBChorus|, and all the
+% other versicle environments; where hanging indentation has been accomplished
+% using a specially defined list environment. The value of |\sbBaselineSkipAmt|
+% is recalculated immediately before each being used in each \emph{hanging indent}
+% list.
+%
+% \begin{macrocode}
+\newlength{\chSpaceTolerance} \setlength{\chSpaceTolerance}{1.5mm}
+\newlength{\chMiniSpace} \setlength{\chMiniSpace} {0.3mm}
+\newlength{\sbBaselineSkipAmt} \setlength{\sbBaselineSkipAmt}{0pt}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\textwidthSav}
+% \begin{macro}{\evensidemarginSav}
+% \begin{macro}{\marginparwidthSav}
+% \begin{macro}{\marginparsepSav}
+% \begin{macro}{\chSpaceToleranceSav}
+% \begin{macro}{\HangAmtSav}
+% \begin{macro}{\LeftMarginSBChorusSav}
+% \begin{macro}{\LeftMarginSBSectionSav}
+% \begin{macro}{\LeftMarginSBVerseSav}
+% The |\textwidthSav|, |\evensidemarginSav|, |\marginparwidthSav|,
+% |\chSpaceToleranceSav|, |\HangAmtSav|, |\LeftMarginSBChorusSav|,
+% |\LeftMarginSBSectionSav|, and |\LeftMarginSBVerse| lengths are
+% used in |compactsong| processing; to save and then restore values
+% from.
+% \begin{macrocode}
+\newlength{\textwidthSav}
+\newlength{\evensidemarginSav}
+\newlength{\marginparsepSav}
+\newlength{\marginparwidthSav}
+\newlength{\chSpaceToleranceSav}
+\newcommand{\HangAmtSav}{}
+\newcommand{\LeftMarginSBChorusSav}{}
+\newcommand{\LeftMarginSBSectionSav}{}
+\newcommand{\LeftMarginSBVerseSav}{}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Declaration Of Non-Core Options}
+% In the \textit{Declaration Of Options} section of the \texttt{.sty}
+% file we deal with the various options which a user may specify in
+% the options part of the |\usepackage{songbook}| command. Since the
+% \Songbook{} style accepts standard \LaTeX2e{} papersize options, we
+% deal with those in addition to the style's own options. The
+% documentation of these options is broken into two parts: the core
+% options (|chordbk|, |wordbk|, \& |overhead|), and the non-core
+% options (all the rest).
+%
+% The \LaTeX2e{} documentation specifies that the options will be
+% processed in the order in which they are listed in the \texttt{.sty}
+% file. We take advantage of this fact and cause all of the options
+% except the core three (|chordbk|, |wordbk|, \& |overhead|) to
+% simply set flags which indicate they were user-specified. The core
+% options then do all the work.
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% D E C L A R A T I O N O F O P T I O N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \end{macrocode}
+%
+% \subsubsection{Papersize Options}
+% Paper selection options inherited from Book Class. We process
+% these first in order to remember what paper size the user has
+% selected; before processing the \Songbook's own options.
+%
+% The code in each of these |\DeclareOption{}| clauses sets
+% the |\SBpaper|\ldots{} flags to unambiguously indicate which
+% papersize the user specified.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% P A P E R S I Z E O P T I O N S %
+%%=======================================================%
+% \end{macrocode}
+%
+% \begin{macro}{a4paper}
+% \begin{macrocode}
+\DeclareOption{a4paper}{% Paper size: 210mm x 297mm
+ \SBpaperAfourtrue
+ \SBpaperAfivefalse
+ \SBpaperBfivefalse
+ \SBpaperLtrfalse
+ \SBpaperLglfalse
+ \SBpaperExcfalse
+}
+
+% \end{macrocode}
+% \begin{macro}{a5paper}
+% \begin{macrocode}
+\DeclareOption{a5paper}{% Paper size: 148mm x 210mm
+ \SBpaperAfourfalse
+ \SBpaperAfivetrue
+ \SBpaperBfivefalse
+ \SBpaperLtrfalse
+ \SBpaperLglfalse
+ \SBpaperExcfalse
+}
+
+% \end{macrocode}
+% \begin{macro}{b5paper}
+% \begin{macrocode}
+\DeclareOption{b5paper}{% Paper size: 176mm x 250mm
+ \SBpaperAfourfalse
+ \SBpaperAfivefalse
+ \SBpaperBfivetrue
+ \SBpaperLtrfalse
+ \SBpaperLglfalse
+ \SBpaperExcfalse
+}
+
+% \end{macrocode}
+% \begin{macro}{letterpaper}
+% \begin{macrocode}
+\DeclareOption{letterpaper}{% Paper size: 8.5in x 11in
+ \SBpaperAfourfalse
+ \SBpaperAfivefalse
+ \SBpaperBfivefalse
+ \SBpaperLtrtrue
+ \SBpaperLglfalse
+ \SBpaperExcfalse
+}
+
+% \end{macrocode}
+% \begin{macro}{legalpaper}
+% \begin{macrocode}
+\DeclareOption{legalpaper}{% Paper size: 8.5in x 14in
+ \SBpaperAfourfalse
+ \SBpaperAfivefalse
+ \SBpaperBfivefalse
+ \SBpaperLtrfalse
+ \SBpaperLgltrue
+ \SBpaperExcfalse
+}
+
+% \end{macrocode}
+% \begin{macro}{executivepaper}
+% \begin{macrocode}
+\DeclareOption{executivepaper}{% Paper size: 7.25in x 10.5in
+ \SBpaperAfourfalse
+ \SBpaperAfivefalse
+ \SBpaperBfivefalse
+ \SBpaperLtrfalse
+ \SBpaperLglfalse
+ \SBpaperExctrue
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v4.5}{2010/04/30}{Added new compactallsongs option.}
+% \subsubsection{Compactallsongs Option}
+%
+% This option tells the \Songbook{} style to present all the songs in a
+% compact form, regardless of what has been specified in each song. For
+% |chordbk| mode this means presenting the songs in
+% two columns per page using a smaller font. When I can figure out
+% what this option should mean for the other modes I'll code them up.
+% In the mean time, |wordbk| and |overhead| modes simply ignore the
+% |compactallsongs| option. Like the papersize options, the
+% |compactallsongs| processing here simply sets a flag; the actual code
+% required to implement |compactallsongs| mode is embedded below inside
+% the three core options.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% C O M P A C T A L L S O N G S O P T I O N %
+%%=======================================================%
+% \end{macrocode}
+% \begin{macro}{compactallsongs}
+% \begin{macrocode}
+\DeclareOption{compactallsongs}{%
+ %%%
+ % Set flag to indicate the user wants compact song mode
+ % for all songs.
+ \CompactAllModetrue
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v4.5}{2010/04/30}{Removed compactsong option.}
+% \subsubsection{Compactsong Option}
+%
+% This option has been replaced with the combination of
+% a new |compactallsongs| option and per-song specification
+% of |compactsong| mode (see the documentation for the |song|
+% environmnet.
+%
+% So, we now stop processing and print an error message telling
+% the user that the option has been removed.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% C O M P A C T S O N G O P T I O N %
+%%=======================================================%
+% \end{macrocode}
+% \begin{macro}{compactsong}
+% \begin{macrocode}
+\DeclareOption{compactsong}{%
+ \errmessage{The compactsong Songbook option has been
+ removed and replaced with a combination of a global
+ compactallsongs Songbook option and a per-song
+ environment compactsong option. See the song
+ environment's documentation}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v4.1}{2003/08/31}{Added |printallsongs| option processing.}
+% \subsubsection{Printallsongs Option}
+%
+% This option tells the \Songbook{} style to print all songs in the
+% songbook, regardless of what has been specified in each song.
+% Like the papersize options, the |printallsongs|
+% processing here simply sets a flag; the actual code required to
+% implement |printallsongs| mode is embedded below inside the |song|
+% environment.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% P R I N T A L L S O N G S O P T I O N %
+%%=======================================================%
+% \end{macrocode}
+% \begin{macro}{printallsongs}
+% \begin{macrocode}
+\DeclareOption{printallsongs}{%
+ %%%
+ % Set flag to indicate the user wants to print all songs.
+ \PrintAllSongstrue
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Declaration Of Core Options}
+% Now we deal with the Options which set up the songbook instances
+% appropriately; i.e., a ``words-only'', ``chords \& words'', or
+% ``overhead master'' book (|wordbk|, |chordbk|, \& |overhead|).
+% These option declarations take advantage of the fact that we have
+% already been told what paper size to design for.
+%
+% The style has been constructed on the underlying assumption that the
+% user \emph{must} specify one of the core options. To that end, we
+% will later throw an error if none of these three options was
+% executed (done at |\AtBeginDocument| time, see the top of the
+% \textit{Main Code Part} for details).
+%
+% \begin{macrocode}
+%%=======================================================%
+%% S O N G B O O K C O R E O P T I O N S %
+%%=======================================================%
+% \end{macrocode}
+%
+% \subsubsection{\texttt{chordbk} Option}
+% \begin{macro}{chordbk}
+% The |chordbk| option is executed here.
+%
+% Each of the core options is structured similarly. As as result,
+% the documentation for the first one, |chordbk|, will be more
+% detailed, and the other two subsections will refer to this one.
+%
+% \begin{macrocode}
+\DeclareOption{chordbk}{%
+% \end{macrocode}
+%
+% Set flags to indicate that we \emph{are} in |chordbk| mode.
+% Set flags to indicate we are \emph{not} in words-only mode.
+% Indicate that we \emph{do} want a page eject after every song.
+% \begin{macrocode}
+ \ChordBktrue
+ \WordBkfalse
+ \Overheadfalse
+ \WordsOnlyfalse
+ \NotWordsOnlytrue
+ \SongEjecttrue
+
+% \end{macrocode}
+%
+% \paragraph{Page Layout}
+% This first part specifies the page layout considerations.
+%
+% Page layout usage recommendation: copy the appropriate page layout
+% commands to the preamble of your own document and customize them
+% appropriately. This will over-ride the default layout specified
+% herein. Use a structure like this one to handle the three
+% songbook types automatically for your songbooks:
+% \begin{verbatim}
+% \ifChordBk
+% <page layout for Words & Chords books>
+% \else\ifWordBk
+% <page layout for Words-Only books>
+% \else\ifOverhead
+% <page layout for Overhead masters>
+% \fi\fi\fi
+% \end{verbatim}
+%
+% The only way I found to get these page layouts successfully built
+% was to draw the various frames in a drawing package and then use a
+% combination of page measurements and hand calculations to ensure I
+% had everything done correctly. One of the key concepts that had
+% not been evident to me until just recently was that on even pages
+% the |\marginparsep| and |\marginparwidth| variables exist \emph{inside}
+% the |\evensidemargin|; this fact is not explicitly mentioned in
+% any \LaTeX{} manual I have read, not even in ``The \LaTeX{} Companion''!
+%
+% The negative |\hoffset| and |\voffset| are to overcome the DVI
+% driver default left and top margins of 1in, and all page layout
+% commands herein assume these offsets have been ``unset'' in this
+% fashion.
+%
+% \begin{macrocode}
+ \voffset=-1.00in
+ \hoffset=-1.00in
+
+% \end{macrocode}
+%
+% Papersize-dependant processing. In general we don't change
+% anything except the page layout, however for smaller page
+% sizes the some of the fonts are reduced to ensure that the
+% songs fit reasonably onto the page.
+%
+% \begin{macrocode}
+ \ifSBpaperAfour
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.2in
+ \textheight=10.0in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.618in
+ \evensidemargin=1.4in
+ \textwidth=6.25in
+ \marginparsep=0.2in
+ \marginparwidth=0.8in
+ \else\ifSBpaperAfive
+ \topmargin=6.0mm
+ \headheight=5.334mm
+ \headsep=2.666mm
+ \textheight=185.17mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=12.0mm
+ \evensidemargin=30.0mm
+ \textwidth=106.0mm
+ \marginparsep=3.68mm
+ \marginparwidth=20.32mm
+% \end{macrocode}
+%
+% Downsize the fonts to allow song to fit into the smaller A5
+% papersize.
+%
+% \begin{macrocode}
+ \renewcommand{\ChBassFont}{\small\bf\sf} % = cmss12 at 11.0pt
+ \renewcommand{\ChFont}{\normalsize\fontfamily{\sfdefault}%
+ \fontseries{sbc}\fontshape{n}\selectfont} %=cmssbc12 at 12.0pt
+ \renewcommand{\ChBkFont}{\ChFont\fontseries{m} %
+ \selectfont} % =cmssm12 at 12.0pt
+ \renewcommand{\SBDefaultFont}{\normalsize} % = cmr12 at 12.0pt
+ \renewcommand{\SBOccursBrktFont}{\large\bf\sf} % = cmss10 at 10.9pt
+ \else\ifSBpaperBfive
+ \topmargin=10.0mm
+ \headheight=5.334mm
+ \headsep=5.0mm
+ \textheight=214.84mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=20.0mm
+ \evensidemargin=34.0 mm
+ \textwidth=122.0mm
+ \marginparsep=3.68mm
+ \marginparwidth=20.32mm
+% \end{macrocode}
+%
+% Downsize the fonts to allow song to fit into the smaller B5
+% papersize.
+%
+% \begin{macrocode}
+ \renewcommand{\ChBassFont}{\small\bf\sf} % = cmss12 at 11.0pt
+ \renewcommand{\ChFont}{\normalsize\fontfamily{\sfdefault}%
+ \fontseries{sbc}\fontshape{n}\selectfont} %=cmssbc12 at 12.0pt
+ \renewcommand{\ChBkFont}{\ChFont\fontseries{m} %
+ \selectfont} % =cmssm12 at 12.0pt
+ \renewcommand{\SBDefaultFont}{\normalsize} % = cmr12 at 12.0pt
+ \renewcommand{\SBOccursBrktFont}{\large\bf\sf} % = cmss10 at 10.9pt
+ \else\ifSBpaperLtr
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.20in
+ \textheight=9.4in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.75in
+ \evensidemargin=1.5in
+ \textwidth=6.25in
+ \marginparsep=0.2in
+ \marginparwidth=0.8in
+ \else\ifSBpaperLgl
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.20in
+ \textheight=12.4in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.75in
+ \evensidemargin=1.5in
+ \textwidth=6.25in
+ \marginparsep=0.2in
+ \marginparwidth=0.8in
+ \else\ifSBpaperExc
+ \topmargin=0.25in
+ \headheight=0.21in
+ \headsep=0.165in
+ \textheight=9.435in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.5in
+ \evensidemargin=1.25in
+ \textwidth=5.5in
+ \marginparsep=0.2in
+ \marginparwidth=0.8in
+ \fi\fi\fi\fi\fi\fi
+
+% \end{macrocode}
+%
+% Enable ragged bottom.
+%
+% \begin{macrocode}
+ \raggedbottom
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\texttt{wordbk} Option}
+% \begin{macro}{wordbk}
+% The |wordbk| option is executed here.
+%
+% \begin{macrocode}
+\DeclareOption{wordbk}{%
+% \end{macrocode}
+%
+% Set flags to indicate we \emph{are} in wordbk mode.
+% Set flags to indicate we \emph{are} in words-only mode.
+% Indicate that we do \emph{not} want a page eject after every song.
+%
+% \begin{macrocode}
+ \ChordBkfalse
+ \WordBktrue
+ \Overheadfalse
+ \WordsOnlytrue
+ \NotWordsOnlyfalse
+ \SongEjectfalse
+
+% \end{macrocode}
+%
+% Set fonts for |wordbk| use.
+%
+% \begin{macrocode}
+ \renewcommand{\SBDefaultFont}{\normalsize}
+ \font\mySTNFont=cmtt12 at 17pt
+ \renewcommand{\STitleNumberFont}{\mySTNFont}
+ \renewcommand{\CpyRtFont}{\scriptsize}
+ \renewcommand{\WandMFont}{\scriptsize}
+ \renewcommand{\ScriptRefFont}{\scriptsize}
+ \renewcommand{\SBOccursBrktFont}{\large\bf\sf}
+
+% \end{macrocode}
+%
+% Reset a few of the song spacing amounts.
+%
+% \begin{macrocode}
+ \renewcommand{\SpaceAboveSTitle} {0.25in}
+ \renewcommand{\LeftMarginSBChorus} {1.5em}
+ \renewcommand{\LeftMarginSBSection}{\LeftMarginSBChorus}
+ \renewcommand{\LeftMarginSBVerse} {\LeftMarginSBChorus}
+
+% \end{macrocode}
+%
+% See the page layout comment in the |\DeclareOption{chordbk}|
+% section, above, for usage recommendations w.r.t. page layout
+% commands.
+%
+% The negative |\hoffset| and |\voffset| are to overcome the DVI driver
+% default left and top margins of 1in, and all page layout commands
+% herein assume these offsets have been ``unset'' in this fashion.
+%
+% \begin{macrocode}
+ \voffset=-1.00in
+ \hoffset=-1.00in
+
+% \end{macrocode}
+%
+% Papersize-dependant processing.
+%
+% \begin{macrocode}
+ \ifSBpaperAfour
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.2in
+ \textheight=10.0in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.618in
+ \evensidemargin=0.4in
+ \textwidth=7.25in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperAfive
+ \topmargin=6.0mm
+ \headheight=5.334mm
+ \headsep=2.666mm
+ \textheight=185.17mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=12.0mm
+ \evensidemargin=6.0mm
+ \textwidth=130.0mm
+ \marginparsep=0.0mm
+ \marginparwidth=0.0mm
+ \else\ifSBpaperBfive
+ \topmargin=10.0mm
+ \headheight=5.334mm
+ \headsep=5.0mm
+ \textheight=214.84mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=20.0mm
+ \evensidemargin=10.0mm
+ \textwidth=146.0mm
+ \marginparsep=0.0mm
+ \marginparwidth=0.0mm
+ \else\ifSBpaperLtr
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.10in
+ \textheight=9.4in
+ \footskip=0.29in
+ %
+ \oddsidemargin=0.75in
+ \evensidemargin=0.5in
+ \textwidth=7.25in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperLgl
+ \topmargin=0.5in
+ \headheight=0.21in
+ \headsep=0.20in
+ \textheight=12.4in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.75in
+ \evensidemargin=0.5in
+ \textwidth=7.25in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperExc
+ \topmargin=0.25in
+ \headheight=0.21in
+ \headsep=0.165in
+ \textheight=9.435in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.5in
+ \evensidemargin=0.25in
+ \textwidth=6.5in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \fi\fi\fi\fi\fi\fi
+
+% \end{macrocode}
+%
+% Set ragged-right margins.
+%
+% \begin{macrocode}
+ \raggedright
+
+% \end{macrocode}
+%
+% Do CompactSong processing, which at this time is nothing except
+% resetting the |compactallsongs| flag back to false; to ensure that
+% no |compactallsongs| processing occurs. We take time to print a
+% warning message for the user to remind them that the |compactallsongs|
+% option will not have any effect at this time.
+%
+% \begin{macrocode}
+ \ifCompactAllMode
+ \typeout{``compactallsongs'' mode not implemented for Wordbk mode.}
+ \CompactAllModefalse
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\texttt{overhead} Option}
+% \begin{macro}{overhead}
+% The |wordbk| option is executed here.
+%
+% \begin{macrocode}
+\DeclareOption{overhead}{%
+% \end{macrocode}
+%
+% Set flags to indicate we \emph{are} in overhead mode.
+% Set flags to indicate we \emph{are} in words-only mode.
+% Indicate that we \emph{do} want a page eject after every song.
+%
+% \begin{macrocode}
+ \ChordBkfalse
+ \WordBkfalse
+ \Overheadtrue
+ \WordsOnlytrue
+ \NotWordsOnlyfalse
+ \SongEjecttrue
+
+% \end{macrocode}
+%
+% Set fonts for |overhead| use. Before doing any font stuff,
+% change the regular sans serif font to demi-bold condensed.
+%
+% \begin{macrocode}
+ \def\@mss{cmssdc10}
+ \renewcommand{\SBDefaultFont}{\LARGE\bf\sf}
+ \renewcommand{\STitleNumberFont}{\Large\sf}
+ \renewcommand{\STitleFont}{\LARGE\sf}
+ \renewcommand{\CpyRtFont}{\normalsize\rm}
+ \renewcommand{\CpyRtInfoFont}{\normalsize\rm}
+ \renewcommand{\WandMFont}{\normalsize\rm}
+ \renewcommand{\ScriptRefFont}{\normalsize\rm}
+ \renewcommand{\SBLyricNoteFont}{\normalsize\rm}
+ \renewcommand{\SBChorusTagFont}{\Large\sf}
+ \renewcommand{\SBVerseNumberFont}{\Large\sf}
+ \renewcommand{\SBSectionNumberFont}{\Large\sf}
+ \renewcommand{\SBOccursTagFont}{\Large\sf}
+ \renewcommand{\SBOccursBrktFont}{\huge\sf}
+ \renewcommand{\SBBracketTagFont}{\Large\sf}
+ \renewcommand{\SBOHContTagFont}{\Large\sf\itshape}
+
+% \end{macrocode}
+%
+% Reset a few of the song spacing amounts.
+%
+% \begin{macrocode}
+ \renewcommand{\SpaceAboveSTitle} {0.25in}
+ \renewcommand{\LeftMarginSBBracket}{2.25em}
+ \renewcommand{\LeftMarginSBChorus} {1.5em}
+ \renewcommand{\LeftMarginSBSection}{\LeftMarginSBChorus}
+ \renewcommand{\LeftMarginSBVerse} {\LeftMarginSBChorus}
+
+% \end{macrocode}
+%
+% Reset the \baselinestretch. For some reason I'm not getting good
+% results with the default value.
+%
+% \begin{macrocode}
+ \renewcommand{\baselinestretch}{.9}
+
+% \end{macrocode}
+%
+% See the page layout comment in the |\DeclareOption{chordbk}|
+% section, above, for usage recommendations w.r.t. page layout
+% commands.
+%
+% General note re: |\textwidth| and overhead tranparencies: it is my
+% personal experience that with font sizes used in overhead mode,
+% a |\textwidth| of greater than 6in produces too wide an image for
+% use in all situations. Depending upon how you intend to use
+% your overheads, you may be able to use a wider image, however
+% if you are uncertain I strongly recommend you stick with the 6in
+% |\textwidth| that is specified herein.
+%
+% The negative |\hoffset| and |\voffset| are to overcome the DVI driver
+% default left and top margins of 1in, and all page layout commands
+% herein assume these offsets have been ``unset'' in this fashion.
+%
+% \begin{macrocode}
+ \voffset=-1.00in
+ \hoffset=-1.00in
+
+% \end{macrocode}
+%
+% Papersize-dependant processing.
+%
+% \begin{macrocode}
+ \ifSBpaperAfour
+ \topmargin=0.25in
+ \headheight=0.25in
+ \headsep=0.0in
+ \textheight=10.3in
+ \footskip=0.2in
+ %
+ \oddsidemargin=1.134in
+ \evensidemargin=1.134in
+ \textwidth=6.0in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperAfive
+ \topmargin=0.0mm
+ \headheight=5.334mm
+ \headsep=0.0mm
+ \textheight=193.666mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=9.0mm
+ \evensidemargin=9.0mm
+ \textwidth=130.0mm
+ \marginparsep=0.0mm
+ \marginparwidth=0.0mm
+ \else\ifSBpaperBfive
+ \topmargin=0.666mm
+ \headheight=5.334mm
+ \headsep=0.0mm
+ \textheight=229.0mm
+ \footskip=4.826mm
+ %
+ \oddsidemargin=15.0mm
+ \evensidemargin=15.0mm
+ \textwidth=146.0mm
+ \marginparsep=0.0mm
+ \marginparwidth=0.0mm
+ \else\ifSBpaperLtr
+ \topmargin=0.25in
+ \headheight=0.25in
+ \headsep=0.0in
+ \textheight=9.75in
+ \footskip=0.2in
+ %
+ \oddsidemargin=1.25in
+ \evensidemargin=1.25in
+ \textwidth=6.0in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperLgl
+ \topmargin=0.25in
+ \headheight=0.25in
+ \headsep=0.0in
+ \textheight=12.8in
+ \footskip=0.2in
+ %
+ \oddsidemargin=1.25in
+ \evensidemargin=1.25in
+ \textwidth=6.0in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \else\ifSBpaperExc
+ \topmargin=0.25in
+ \headheight=0.21in
+ \headsep=0.0in
+ \textheight=9.6in
+ \footskip=0.19in
+ %
+ \oddsidemargin=0.625in
+ \evensidemargin=0.625in
+ \textwidth=6.0in
+ \marginparsep=0.0in
+ \marginparwidth=0.0in
+ \fi\fi\fi\fi\fi\fi
+
+% \end{macrocode}
+%
+% Set ragged-botton and ragged-right margins.
+%
+% \begin{macrocode}
+ \raggedright
+ \raggedbottom
+
+% \end{macrocode}
+%
+% Do compactallsongs processing, which at this time is nothing except
+% resetting the |compactallsongs| flag back to false; to ensure that
+% no |compactallsongs| processing occurs. We take time to print a
+% warning message for the user to remind them that the |compactallsongs|
+% option will not have any effect at this time.
+%
+% \begin{macrocode}
+ \ifCompactAllMode
+ \typeout{``compactallsongs'' mode not implemented for Overhead mode.}
+ \CompactAllModefalse
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Execution Of Options}
+% Here we tell the the \Songbook{} style to execute the user's
+% declared options.
+%
+% First set up a default paper size, just in case the user didn't
+% specify one. Then process the user specified options. It is
+% mandatory for one of the songbook type options to be declared,
+% but rather than delare a default we will throw an error (see
+% below at the top of the \textit{Main Code Part}).
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% E X E C U T I O N O F O P T I O N S %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ExecuteOptions{letterpaper}
+\ProcessOptions
+
+% \end{macrocode}
+%
+% \subsection{Package Loading Part}
+% In this section of the style we load the remaining styles
+% upon which the \Songbook{} style is dependant.
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% P A C K A G E L O A D I N G P A R T %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \end{macrocode}
+%
+% Donald Arseneau's \texttt{conditionals.sty}. This style
+% is bundled with the \Songbook{} style (Donald has often posted
+% the macros to the USENET comp.text.tex newsgroup, but they
+% haven't been formally submitted to CTAN.
+%
+% \begin{macrocode}
+\RequirePackage{conditionals}
+
+% \end{macrocode}
+%
+% Leslie Lamport's \& David Carlilse's \texttt{ifthen.sty}. This
+% style is part of the \LaTeX2e{} distribution.
+%
+% \begin{macrocode}
+\RequirePackage{ifthen}
+
+% \end{macrocode}
+%
+% \changes{v4.5}{2010/04/30}{\texttt{multicol.sty} is now always required.}
+% We load Christian Tellechea's |xtring| package to enable the new
+% optional song format string available for the |song| environment.
+% This style is available on CTAN.
+%
+% \begin{macrocode}
+\RequirePackage{xstring}
+
+% \end{macrocode}
+%
+% \changes{v4.5}{2010/04/30}{New dependency on \texttt{xtring.sty}.}
+% We load Frank Mittelbach's |multicol| package to enable use of
+% |compactsong| mode. We specify the date of the 1.5u release;
+% since we make use of the |\columnbreak| command which was only
+% added in 1.5u.
+%
+% \begin{macrocode}
+\RequirePackage{multicol}[1999/05/25]
+
+% \end{macrocode}
+%
+% \subsection{Main Code Part}
+% The \textit{Main Code Part} is the main part of the style. All
+% of the ``hard working'' macros are detailed below.
+%
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% M A I N C O D E P A R T %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \end{macrocode}
+%
+% The user \emph{must} specify at least one of the |chordbk|, |wordbk|,
+% or |overhead| options; otherwise we throw an error. This
+% bit of code performs that check at the start of the users
+% document.
+%
+% We check to see if at least one of the core options have
+% been specified by the user by populating an |\hbox{}| with
+% the digit ``1'' if an option was specified. If no core
+% option was specified then the |\hbox{}| will be empty and
+% we throw an error.
+%
+% \begin{macro}{\AtBeginDocument}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \setbox0=\hbox{}
+ %
+ \ifChordBk\setbox0=\hbox{1}\fi
+ \ifWordBk\setbox0=\hbox{1}\fi
+ \ifOverhead\setbox0=\hbox{1}\fi
+ %
+ \ifthenelse{\wd0 = 0}
+ {\errmessage{No songbook option (i.e., type) specified.
+ Specify a songbook mode in your usepackage
+ statement; one of: [chordbk], [wordbk], or [overhead]}}
+ {\relax}
+
+% \end{macrocode}
+%
+% If the user had specified one of the required options then we
+% continue with setting things up. At present, the only housekeeping
+% item that needs attention is to set the default font for the
+% songbook. We do this by inserting the |\SBDefaultFont| here;
+% this lifts from the user the burden of having to remember to
+% specifying inside the songbook.
+%
+% \begin{macrocode}
+ \SBDefaultFont
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Constants \& Variables}
+% Define Counters used herein.
+%
+% \begin{macrocode}
+%%========================================================
+%% C O N S T A N T S & V A R I A B L E S %
+%%========================================================
+
+% \end{macrocode}
+%
+% \begin{macro}{\theSBSongCnt}
+% The |\theSBSongCnt| counter is used for numbering the
+% songs. When a song is listed multiple times (for
+% multiple keys) the songs number must remain the same
+% each time.
+%
+% \begin{macro}{\theSBSectionCnt}
+% The |\theSBSectionCnt| counter is used for numbering
+% sections as they occur within a song.
+%
+% \begin{macro}{\theSBVerseCnt}
+% The |\theSBVerseCnt| counter is used for numbering
+% verses as they occur within a song.
+%
+% \begin{macrocode}
+\newcounter{SBSongCnt}
+\newcounter{SBSectionCnt}
+\newcounter{SBVerseCnt}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+
+% \end{macrocode}
+%
+% \paragraph{String Constants}
+% Declare string constants.
+%
+% These constants are provided so that users may easily customize
+% the appearance of formatted songs and songbooks. Use the
+% |\renewcommand| command to change the value of these constants.
+%
+% \begin{macro}{\OHContPgFtrTag}
+% The |\OHContPgFtrTag| tag is inserted by the |\OHContPgFtr| command.
+% The default value for this is ``|continued on next page\ldots|''.
+%
+% \begin{macro}{\OHContPgHdrTag}
+% The |\OHContPgHdrTag| tag is inserted by the |\OHContPgHdr| command.
+% The default value for this is
+% ``|\theSBSongCnt\ --- \theSongTitle, continued\ldots|''.
+%
+% \begin{macro}{\SBBaseLang}
+% The |\SBBaseLang| tag is the name of the language of all songs
+% not specified within an |songTranslation| environment, and also as the
+% default value of the |songTranslation| environment's optional song language
+% parameter.
+% The default value for this is ``|English|''.
+%
+% \begin{macro}{\SBBridgeTag}
+% The |\SBBridgeTag| tag is inserted before the start of a bridge.
+% The default value for this is ``|Bridge:|''.
+%
+% \begin{macro}{\SBChorusTag}
+% The |\SBChorusTag| tag is inserted before the first line of a
+% chorus. The default value for this is ``|Ch:|''.
+%
+% \begin{macro}{\SBContinueTag}
+% The |\SBContinueTag| tag is inserted in an |\SBContinueMark|.
+% The default value for this is ``|cont\ldots|''.
+%
+% \begin{macro}{\SBEndTag}
+% The |\SBEndTag| tag is inserted before the start of an
+% ending (in an |\SBEnd| command). The default value for this
+% is ``|End:|''.
+%
+% \begin{macro}{\SBIntersyllableRule}
+% The |\SBIntersyllableRule| tag is actually the command(s) used
+% to draw the rule between adjoining syllables.
+%
+% \begin{macro}{\SBIntroTag}
+% The |\SBIntroTag| tag is inserted before the start of an
+% introduction (in an |\SBIntro| command). The default value
+% for this is ``|Intro:|''.
+%
+% \begin{macro}{\SBPubDom}
+% The |\SBPubDom| tag is used to indicate that a song is in the public
+% domain. The default value for this is ``|Public Domain|''. If you
+% want to localize this string in the song title block, be sure to use
+% this public interface: the |\CpyRt| macro uses |\SBPubDom| to
+% determine whether or not to print the copyright symbol (\copyright).
+%
+% \begin{macro}{\SBUnknownTag}
+% The |\SBUnknownTag| tag is used with the |\WAndM| command and is the
+% string to insert when either the author/artist or the copyright holder
+% is unknown. The default value for this is ``|Unknown|''.
+%
+% \begin{macro}{\SBWAndMTag}
+% The |\SBWAndMTag| the tag is insert before the words and music
+% entry printed in the song header. The default value for this is
+% ``|W&M:|''.
+%
+% \begin{macro}{\Songbook}
+% The macro used to print this style's name. The `b' in the word
+% songbook has been replace with a flat ($\flat$).
+%
+% \begin{macrocode}
+\newcommand{\OHContPgFtrTag} {continued on next page\ldots}
+\newcommand{\OHContPgHdrTag} {\theSBSongCnt\ --- \theSongTitle, continued\ldots}
+\newcommand{\SBBaseLang} {English}
+\newcommand{\SBBridgeTag} {Bridge:}
+\newcommand{\SBChorusTag} {Ch:}
+\newcommand{\SBContinueTag} {cont\ldots}
+\newcommand{\SBEndTag} {End:}
+\newcommand{\SBIntersyllableRule}{\hrulefill}
+\newcommand{\SBIntroTag} {Intro:}
+\newcommand{\SBPubDom} {Public Domain}
+\newcommand{\SBUnknownTag} {Unknown}
+\newcommand{\SBWAndMTag} {W\&M:}
+\newcommand{\Songbook} {\textrm{Song$\flat$ook}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Internal Song Variables}
+% Declare song attribute variables.
+%
+% These variables are intended for consumption within the songbook
+% style itself, so they will \emph{not} be documented in the
+% \textit{High Level Documentation} section, above.
+%
+% \begin{macro}{\theSongComposer}
+% |\theSongComposer| is the composer and lyricist of the last song.
+%
+% \changes{v4.2}{2006/10/13}{Added new |theSongComposerU| variable.}
+% \begin{macro}{\theSongComposerU}
+% |\theSongComposerU| takes the value of |\theSongComposer| except
+% when the song composer parameter was left empty in the songbook;
+% in which case this variable will be assigned the value of
+% |\SBUnknownTag|.
+%
+% \begin{macro}{\theSongKey}
+% |\theSongKey| is the key of the last song. This variable must be
+% reset within the |\STitle| command, as well as at the
+% start of the song environment, because of the way in
+% which extra keys are handled.
+%
+% \begin{macro}{\theSongLicense}
+% |\theSongLicense| is the copyright license info.
+%
+% \begin{macro}{\theSongTitle}
+% |\theSongTitle| is the title of the last song.
+%
+% \begin{macro}{\theCopyRtInfo}
+% |\theCopyRtInfo| is the copyright information of the last song.
+% This includes the copyright licensing information.
+%
+% \begin{macro}{\theScriptureRef}
+% |\theScriptureRef| is the scripture reference of the last song.
+%
+% \begin{macro}{\theXlatnBy}
+% |\theXlatnBy| is who translated the song.
+%
+% \begin{macro}{\theXlatnLang}
+% |\theXlatnLang| is the language the song has been translated into.
+%
+% \begin{macro}{\theXlatnPerm}
+% |\theXlatnPerm| is the permission details for the last song
+% translation. This variable is reset to an empty
+% string at the start of each song environment.
+%
+% \begin{macro}{\theXlatnTitle}
+% |\theXlatnTitle| is the title of the last song-translation. This
+% variable is reset to an empty string at the start of
+% each song environment.
+%
+% \begin{macrocode}
+\newcommand{\theSongComposer}{the Composer}
+\newcommand{\theSongComposerU}{the ComposerU}
+\newcommand{\theSongCopyRt}{the Copyright}
+\newcommand{\theSongKey}{the Key}
+\newcommand{\theSongLicense}{the License}
+\newcommand{\theSongScriptRef}{the Scripture}
+\newcommand{\theSongTitle}{the Title}
+\newcommand{\theXlatnBy}{the Translator}
+\newcommand{\theXlatnLang}{the Language}
+\newcommand{\theXlatnPerm}{the Permission}
+\newcommand{\theXlatnTitle}{the Translation Title}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Special Characters}
+% Some macros to ease the entry of special characters in songbooks.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% S P E C I A L C H A R A C T E R S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% \begin{macro}{\SBem}
+% |\SBem| --- em-dash macro definition.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% Generate an em-dash within a songbook. This macro is used to place
+% in em-dash within text when we're \emph{not} in words-only mode. This
+% allows us to place dashes within text in order place a chord earlier
+% than a sylable; yet, that dash will not appear in the words-only book.
+% The words-only version of this macro is a no-op. Example of intended
+% use:
+%
+% \begin{macrocode}
+\newcommand{\SBem}{\ifWordsOnly\relax\else---\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBen}
+% |\SBen| --- en-dash macro definition.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% Generate an en-dash within a songbook. This macro is used to place
+% in en-dash within text when we're \emph{not} in words-only mode; just like
+% |\SBem|. The words-only version of this macro is a no-op.
+%
+% \begin{macrocode}
+\newcommand{\SBen}{\ifWordsOnly\relax\else--\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBContinueMark}
+% |\SBContinueMark| --- conditionally produce a continuation symbol.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% If the contents of |\rightmark| will result in nothing being typeset,
+% then don't output the continuation mark; otherwise, output a
+% continuation mark using the |\SBContinueTag| command.
+%%%
+% \begin{macrocode}
+\newcommand{\SBContinueMark}{%
+ \setbox0=\hbox{\rightmark}
+ \ifthenelse{\lengthtest{\wd0 = 0pt}}
+ {\relax}%
+ {\SBContinueTag}%
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\OHContPgFtr}
+% |\OHContPgFtr| --- macro to print page footing continuation
+% headers on overheads.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% This macro must be manually inserted where needed. It is
+% generally used in conjunction with the |\OHPageBrk| and |\OHPageHdr|
+% macros. |\OHContPgFtr| is a no-op, except when |\ifOverhead| is true.
+%
+% \begin{macrocode}
+\newcommand{\OHContPgFtr}{%
+ \ifOverhead
+ \vskip .25in
+ \centerline{\SBOHContTagFont\OHContPgFtrTag}
+ \else%
+ \relax%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\OHContPgHdr}
+% |\OHContPgHdr| --- macro to print page heading continuation
+% headers on overheads.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% This macro must be manually inserted where needed. It is
+% generally used in conjunction with the |\OHPageBrk| macro.
+% |\OHContPgHdr| is a no-op, except when |\ifOverhead| is true.
+%
+% \begin{macrocode}
+\newcommand{\OHContPgHdr}{%
+ \ifOverhead
+ \centerline{\SBOHContTagFont\OHContPgHdrTag}
+ \vskip .25in
+ \else%
+ \relax%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Table Of Contents \& Indices}
+% The macros used to create the \textit{Key Index}, the
+% \textit{Title \& First Line Index}, and the \texttt{Table
+% Of Contents}. Planned enhancements are the addition of
+% a \textit{Scripture Index} and a \textit{Artist Index};
+% i.e., an index of the |\ScriptRef{}| and |\WandM{}|
+% entries, respectively.
+%
+% Most of the specific code involved in managing the index files
+% and writing the entries was copied from \texttt{latex.tex} (version~2.09)
+% and then modified to suit our purposes here.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% T A B L E O F C O N T E N T S %
+%% %
+%% A N D I N D I C E S %
+%%=======================================================%
+% \end{macrocode}
+%
+% \changes{v4.2}{2006/10/13}{Added |makeArtistIndex| and necessary children.}
+% \begin{macro}{\makeArtistIndex}
+% |\makeArtistIndex| starts the creation of an index of artists.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\makeArtistIndex{\if@filesw \newwrite\@artistIndexfile
+ \immediate\openout\@artistIndexfile=\jobname.aIdx
+ \def\artistIndex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrArtistIndex}\typeout
+ {Writing index file \jobname.aIdx }\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\artistIndex}
+% |\artistIndex|\parm{1}\parm{2} makes an entry in the index of songs
+% by artist.
+% \begin{ParameterList}
+% \item[\meta{1}] Song artist.
+% \item[\meta{2}] Song title and number.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\@wrArtistIndex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write\@artistIndexfile{\string
+ \indexentry{#1}{#2}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\artistIndex{\@bsphack\begingroup \@sanitize\@artistIndex}
+
+\def\@artistIndex#1#2{\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeKeyIndex}
+% |\makeKeyIndex| starts the creation of an index of songs
+% by key.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\makeKeyIndex{\if@filesw \newwrite\@keyIndexfile
+ \immediate\openout\@keyIndexfile=\jobname.kIdx
+ \def\keyIndex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrKeyIndex}\typeout
+ {Writing index file \jobname.kIdx }\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\keyIndex}
+% |\keyIndex|\parm{1}\parm{2} makes an entry in the index of songs
+% by key.
+% \begin{ParameterList}
+% \item[\meta{1}] Song key and title.
+% \item[\meta{2}] Song number.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\@wrKeyIndex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write\@keyIndexfile{\string
+ \indexentry{#1}{#2}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\keyIndex{\@bsphack\begingroup \@sanitize\@keyIndex}
+
+\def\@keyIndex#1#2{\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeTitleIndex}
+% |\makeTitleIndex| starts creation of a title \& first line index.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\makeTitleIndex{\if@filesw \newwrite\@titleIndexfile
+ \immediate\openout\@titleIndexfile=\jobname.tIdx
+ \def\titleIndex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrTitleIndex}\typeout
+ {Writing index file \jobname.tIdx }\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleIndex}
+% |\titleIndex|\parm{1}\parm{2} makes an entry in the title \&
+% first line index.
+% \begin{ParameterList}
+% \item[\meta{1}] Song title or first line.
+% \item[\meta{2}] Song number.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\@wrTitleIndex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write\@titleIndexfile{\string
+ \indexentry{#1}{#2}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\titleIndex{\@bsphack\begingroup \@sanitize\@titleIndex}
+
+\def\@titleIndex#1#2{\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeTitleContents}
+% |\makeTitleContents| starts creation of a table of contents.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\makeTitleContents{\if@filesw \newwrite\@titleContentsfile
+ \immediate\openout\@titleContentsfile=\jobname.toc
+ \def\titleContents{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrTitleContents}\typeout
+ {Writing table of contents file \jobname.toc }\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleContents}
+% |\titleContents|\parm{1}\parm{2} makes an entry in the table
+% of contents file.
+% \begin{ParameterList}
+% \item[\meta{1}] Song number.
+% \item[\meta{2}] Song title.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\@wrTitleContents#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write\@titleContentsfile{\string
+ \item\ \theSBSongCnt. #1\protect\hbox{, \thepage}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\titleContents{\@bsphack\begingroup \@sanitize\@titleContents}
+
+\def\@titleContents#1#2{\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBtocSEntry}
+% |\SBtocSEntry| is the macro that encloses each skipped song TOC entry.
+% The intent is that when you format your skipped TOC list you redefine
+% |\SBtocSEntry| appropriately (assuming you are not happy with the
+% default value).
+% \begin{ParameterList}
+% \item[\meta{1}] Song number.
+% \item[\meta{2}] Song title.
+% \item[\meta{3}] Page number.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\SBtocSEntry}[3]{#1. \textit{#2}\hbox{, #3}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\makeTitleContentsSkip}
+% |\makeTitleContentsSkip| starts creation of a table of contents
+% of songs excluded from the songbook.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\makeTitleContentsSkip{\if@filesw \newwrite\@titleContentsSkipfile
+ \immediate\openout\@titleContentsSkipfile=\jobname.tocS
+ \def\titleContentsSkip{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrTitleContentsSkip}\typeout
+ {Writing table of contents (skipped) file \jobname.tocS }\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleContentsSkip}
+% |\titleContentsSkip|\parm{1}\parm{2} makes an entry in the table
+% of contents file.
+% \begin{ParameterList}
+% \item[\meta{1}] Song number.
+% \item[\meta{2}] Song title.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\def\@wrTitleContentsSkip#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write\@titleContentsSkipfile{\string
+ \item\ \protect\SBtocSEntry{\theSBSongCnt}{#1}{\thepage}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\titleContentsSkip{\@bsphack\begingroup \@sanitize\@titleContentsSkip}
+
+\def\@titleContentsSkip#1#2{\endgroup\@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FLineIdx}
+% |\FLineIdx|\parm{1} adds a first line of song entry to
+% the song \& title index file~(\texttt{.idx}).
+% \begin{ParameterList}
+% \item[\meta{1}] First line of song.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\FLineIdx}[1]{\titleIndex{#1@{\it #1\/}}{\theSBSongCnt}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Some Other Hooks}
+% The macros have been provided to allow the user additional control
+% of songbooks created by the \Songbook{} package.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% S O M E O T H E R H O O K S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% \begin{macro}{\SBChorusMarkright}
+% The |\SBChorusMarkright|\parm{1} hook to allow |\SBSection|'s |\markright|
+% to be overridden.
+%
+% \begin{macrocode}
+\newcommand{\SBChorusMarkright}[1]{\markright{#1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBVerseMarkright}
+% The |\SBVerseMarkright|\parm{1} hook to allow |\SBVerse|'s |\markright|
+% to be overridden.
+%
+% \begin{macrocode}
+\newcommand{\SBVerseMarkright}[1]{\markright{#1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBSectionMarkright}
+% The |\SBSectionMarkright|\parm{1} hook to allow |\SBSection|'s |\markright|
+% to be overridden.
+%
+% \begin{macrocode}
+\newcommand{\SBSectionMarkright}[1]{\markright{\alph{#1}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SongMarkboth}
+% The |\SongMarkboth|\parm{1}\parm{2} hook to allow the song environment's |\markboth|
+% to be overridden.
+%
+% \begin{macrocode}
+\newcommand{\SongMarkboth}[2]{\markboth{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\STitleMarkboth}
+% The |\STitleMarkboth|\parm{1}\parm{2} hook to allow |\Stitle|'s |\markboth| to be
+% overridden.
+%
+% \begin{macrocode}
+\newcommand{\STitleMarkboth}[2]{\markboth{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Miscellaneous Macros}
+% This section contains a few miscellaneous macros used by the
+% main macros that then follow.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% M I S C E L L A N E O U S M A C R O S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% \begin{macro}{\CpyRt}
+% The |\CpyRt|\parm{1}\parm{2}\parm{3} copyright info. macro definition.
+% \begin{ParameterList}
+% \item[\meta{1}] Centre this line Y/N? (optional)
+% \item[\meta{2}] Copyright information.
+% \item[\meta{3}] Copyright licensing information.
+% \end{ParameterList}
+%
+% This command is not usually explicitly used in a songbook. It is
+% called by the |song| environment and will normally only be used
+% there.
+%
+% The first parameter to this macro is optional and is used to surpress
+% the centering of the Scripture reference (i.e., if the parameter is
+% specified, and that value is \emph{not} `\texttt{Y}' then the center
+% environment will not be created around the reference.
+%
+% \begin{macrocode}
+\newcommand{\CpyRt}[3][Y]{%
+ \if#1Y\begin{center}\fi
+ \if\blank{#2}%
+ \if\blank{#3}%
+ {\CpyRtFont\copyright \SBUnknownTag{} \CpyRtInfoFont}%
+ \else
+ {\CpyRtFont\copyright \SBUnknownTag{} \CpyRtInfoFont #3}%
+ \fi%
+ \else%
+ \ifthenelse{\equal{#2}{\SBPubDom}}
+ {%then
+ {\CpyRtFont #2 \CpyRtInfoFont #3}%
+ }{%else
+ {\CpyRtFont\copyright #2 \CpyRtInfoFont #3}%
+ }%fi
+ \fi%
+ \if#1Y\end{center}\fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ScriptRef}
+% The |\ScriptRef|\parm{1}\parm{2} macro indicates a scripture reference.
+% \begin{ParameterList}
+% \item[\meta{1}] Centre this line Y/N? (optional)
+% \item[\meta{2}] Address of scripture reference for the song.
+% \end{ParameterList}
+%
+% Used to indicate a scripture reference for the song. May either be
+% the scripture being quoted in the song, or a scripture which
+% supports the theology presented in the song.
+%
+% The first parameter to this macro is optional and is used to surpress
+% the centering of the Scripture reference (i.e., if the parameter is
+% specified, and that value is \emph{not} `\texttt{Y}' then the center
+% environment will not be created around the reference.
+%
+% \begin{macrocode}
+\newcommand{\ScriptRef}[2][Y]{%
+ \if#1Y\begin{center}\fi
+ {\ScriptRefFont #2}%
+ \if#1Y\end{center}\fi
+}
+
+% \end{macrocode}
+% \end{macro}
+
+%
+% \begin{macro}{\WAndM}
+% The |\WAndM|\parm{1}\parm{2} macro indicates Words and Music authorship.
+% \begin{ParameterList}
+% \item[\meta{1}] Centre this line Y/N? (optional)
+% \item[\meta{2}] Name(s) of the composer and lyricist.
+% \end{ParameterList}
+%
+% This command is not usually explicitly used in a songbook. It is
+% called by the song environment and will normally only be used
+% there.
+%
+% The first parameter to this macro is optional and is used to surpress
+% the centering of the composer \& lyricist (i.e., if the parameter is
+% specified, and that value is \emph{not}~`\texttt{Y}' then the center environment will
+% not be created around the composer \& lyricist.
+%
+% \begin{macrocode}
+\newcommand{\WAndM}[2][Y]{%
+ \if#1Y\begin{center}\fi
+ \if\blank{#2}%
+ {\WandMFont\SBWAndMTag ~\SBUnknownTag}%
+ \else
+ {\WandMFont\SBWAndMTag ~#2}%
+ \fi
+ \if#1Y\end{center}\fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sbSetsbBaselineSkipAmt}
+% |\sbSetsbBaselineSkipAmt| sets the |\sbBaselineSkipAmt| length.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% This command is only used internally within the songbook style. It
+% is invoked just prior to any use of the sbBaselineSkipAmt length and
+% it calculated the proper value based upon all the fonts chosen at that
+% particular moment in time. It does this by creating an |\hbox{}| that
+% contains one letter with a chord overtop of it; the height and depth
+% of that |\hbox{}| added together then become the baseline skip.
+%
+% \begin{macrocode}
+\newcommand{\sbSetsbBaselineSkipAmt}{
+ \ifChordBk%
+ \setbox0=\hbox{\strut\raise\SBChordRaise\hbox{\ChFont\sbChord{}A\relax\strut}A}%
+ \setlength{\sbBaselineSkipAmt}{\ht0 + \dp0}%
+ \else%
+ \setlength{\sbBaselineSkipAmt}{\baselineskip}%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Primary Songbook Macros}
+% The macros in this section comprise those most often used by
+% \Songbook{} users.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% P R I M A R Y S O N G B O O K M A C R O S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% \begin{macro}{\STitle}
+% |\STitle|\parm{1}\parm{2}\parm{3} is the song title macro.
+% \begin{ParameterList}
+% \item[\meta{1}] Centre this line Y/N? (optional)
+% \item[\meta{2}] Song's title.
+% \item[\meta{3}] Song's Key.
+% \end{ParameterList}
+%
+% Before printing the title we reset the |\SBVerseCnt| and |\SBSectionCnt|
+% counters back to zero. This is for songs which are printed in more
+% than one key, because the verse count always begins at~``\texttt{1.}''
+% for each key.
+%
+% The first parameter to this macro is optional and is used to surpress
+% the centering of the title (i.e., if the parameter is specified, and
+% that value is \emph{not}~`\texttt{Y}' then the center environment will not be created
+% around the title.
+%
+% This macro also makes an entry in the key index file; except in the case
+% where a song is not being included, in which case no entry is made.
+%
+% \changes{v4.1}{2003/08/31}{Added code to not write entries for excluded songs.}
+%%%
+% \begin{macrocode}
+\newcommand{\STitle}[3][Y]{%
+ \setcounter{SBVerseCnt}{0}%
+ \setcounter{SBSectionCnt}{0}%
+ \ifExcludeSong\relax%
+ \else\keyIndex{{\protect\sbChord#3\protect\relax} -- #2}{\theSBSongCnt}\fi%
+ \vspace{\SpaceAboveSTitle}%
+ \if#1Y\begin{center}\fi
+ {\STitleNumberFont\theSBSongCnt}{\STitleFont\ --- #2}%
+ \ifWordsOnly\relax\else{\STitleKeyFont\ [{\sbChord#3\relax}]}\fi%
+ \if#1Y\end{center}\fi
+ \STitleMarkboth{#2}{\relax}%
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v4.1}{2003/08/31}{Added $[$\meta{Include?}$]$ option code.}
+% \changes{v4.5}{2010/04/30}{Added |compactsong| option code.}
+% \begin{macro}{song}
+% |song|\parm{1}\ldots\parm{7} is the environment within which a song
+% is entered.
+% \begin{ParameterList}
+% \item[\meta{1}] Song format string (optional).
+% \item[\meta{2}] Title of song.
+% \item[\meta{3}] Key song is written in.
+% \item[\meta{4}] Copyright information.
+% \item[\meta{5}] Name(s) of composer and lyricist.
+% \item[\meta{6}] Scripture reference for the song.
+% \item[\meta{7}] Copyright licensing information.
+% \end{ParameterList}
+%
+% The song environment encapsulates a song, including multiple
+% appearances for multiple keys and translations. We increment
+% the song counter and then cause the title and other parameter
+% information to be displayed.
+%
+% \paragraph{Song Format String (options)}
+% The first parameter is optional and its default value is
+% ``\texttt{YF}''. Each letter in the format string controls one aspect
+% of a song's formating. The format string options are:
+% \begin{ParameterList}
+% \item[|Y| |N|]: Include song in book; specify ``\texttt{Y}'' or
+% ``\texttt{N}''?
+% \item[|C| |F|]: |compactsong| or not (full size); specify ``\texttt{C}''
+% or ``\texttt{F}''?
+% \end{ParameterList}
+%
+% \subparagraph{YN: Include Song in Book?}
+% When the value of \meta{YN: Include Song in Book?} is ``\texttt{Y}'' then all
+% processing is done normally. If the value of \meta{YN: Include Song in Book?}
+% is ``\texttt{N}'' then:
+% \begin{itemize}
+% \item the songcounter is incremented;
+% \item a TOC index entry is written
+% to a skipped-entry files, with each entry bracketted by some extra
+% code (compared to the non-skipped-entry files);
+% \item consider making \meta{Include?} look for several values to allow
+% exclusions/inclusions to only happen for certain types of
+% songbooks.
+% \end{itemize}
+%
+% If both ``\texttt{Y}'' and ``\texttt{N}'' are specified, then ``\texttt{Y}''
+% is taken as the specified value. Don't forget that a value of ``\texttt{N}''
+% will be overridden by the global |printallsongs| option.
+%
+% The skipped-entry TOC file is named \texttt{*.tocS}. The purpose of creating
+% a separate file is twofold: (1)~to allow normal songbook
+% processing to simply omit these not-included files; (2)~to allow the
+% skipped entries to be easily added back into the TOC processing
+% process through simple appending of the files to the standard TOC
+% file.
+%
+% \subparagraph{CF: Compactsong or Full Size?}
+% When the value of \meta{CF: Compactsong or Full Size?} is ``\texttt{F}''
+% then all processing is done normally. If the value is ``\texttt{C}''
+% then the song is printed in |compactsong| mode. If both ``\texttt{F}''
+% and ``\texttt{F}'' are specified, then ``\texttt{F}''
+% is taken as the specified value. Don't forget that a value of ``\texttt{F}''
+% will be overridden by the global |compactallsongs| option.
+%
+% \begin{macrocode}
+\newenvironment{song}[7][YF]{ % Comment markers to negate
+ \IfSubStr{\uppercase{#1}}{N}{\ExcludeSongtrue}{\relax}% newlines.
+ \IfSubStr{\uppercase{#1}}{Y}{\ExcludeSongfalse}{\relax}%
+ \ifPrintAllSongs\ExcludeSongfalse\fi %
+ \IfSubStr{\uppercase{#1}}{C}{\CompactSongModetrue}{\relax}% newlines.
+ \IfSubStr{\uppercase{#1}}{F}{\CompactSongModefalse}{\relax}%
+ \ifCompactAllMode\CompactSongModetrue\fi %
+ \SongMarkboth{\relax}{\relax} %
+ \SBinSongEnvtrue %
+ \renewcommand{\SBinSongEnv}{\True} %
+ \ifWordsOnly %
+ \setlength{\parindent}{0pt} %
+ \fi %
+% \end{macrocode}
+%
+% Store each of the parameters in a macro to make them easily accessible
+% later. This isn't as useful as it should be due to my inability to
+% properly detect in the title block macros whether or not the parameter
+% is nil or blank when one of these |\the| macros is passed instead of
+% the native parameter itself.
+%
+% We \emph{clear} the translation macros now, since the |songTranslation| environment
+% is only valid inside a |song| environment, and we are now declaring a new
+% |song|.
+%
+% \begin{macrocode}
+ \renewcommand{\theSongComposer}{#5} %
+ \if\blank{#5} %
+ \renewcommand{\theSongComposerU}{\SBUnknownTag}%
+ \else %
+ \renewcommand{\theSongComposerU}{#5} %
+ \fi %
+ \renewcommand{\theSongCopyRt}{#4} %
+ \renewcommand{\theSongKey}{#3} %
+ \renewcommand{\theSongLicense}{#7} %
+ \renewcommand{\theSongScriptRef}{#6} %
+ \renewcommand{\theSongTitle}{#2} %
+ \renewcommand{\theXlatnBy}{} %
+ \renewcommand{\theXlatnLang}{\SBBaseLang} %
+ \renewcommand{\theXlatnPerm}{} %
+ \renewcommand{\theXlatnTitle}{} %
+ %
+ \addtocounter{SBSongCnt}{1} %
+ %
+% \end{macrocode}
+%
+% \changes{v4.1}{2003/08/31}{Changes index invocation to match
+% \meta{Include?} directive.}
+% \changes{v4.2}{2006/10/13}{Added invocation for artist index.}
+%
+% Write table of contents and index entries in reponse to the user's
+% \meta{Include?} directive.
+%
+% \begin{macrocode}
+ \ifExcludeSong %
+ \titleContentsSkip{\theSongTitle}{\theSongKey}%
+ \else %
+ \titleIndex{\theSongTitle}{\theSBSongCnt} %
+ \titleContents{\theSongTitle}{\theSongKey} %
+ \artistIndex{\theSongComposerU+\theSongTitle}{\theSBSongCnt}%
+ \fi %
+% \end{macrocode}
+%
+% \changes{v4.1}{2003/08/31}{Implemented \meta{Include?} parameter through use
+% of \TeX's |box2|.}
+%
+% Now we deal with the user's \meta{Include?} directive. If \meta{Include?} is
+% ``\texttt{Y}'' then we will cause normal songbook processing to occur;
+% otherwise we'll simply insert a |\relax| macro. I have implemented this
+% feature using a memory hungry method: when excluding a song, put the
+% lyrics into |box2| and then discard it without using it. Although Mark
+% Wooding suggested using this method, he also provided a pointer to
+% a more robust method: using the |sverb| package that is part of `mdwtools'
+% collection (specifically, the |\ignoreenv{}| command).
+%
+% \begin{macrocode}
+ \ifExcludeSong\setbox2=\vbox\bgroup\fi%
+% \end{macrocode}
+%
+% Try to keep the song title and all its contents on the same page;
+% if that is what is desired.
+%
+% \begin{macrocode}
+ \ifSamepageMode%
+ \begin{samepage}%
+ \fi%
+% \end{macrocode}
+%
+% \paragraph{CompactSong Font Processing}
+%
+% Downsize fonts to allow song to fit into half the space (i.e.,
+% two column mode); although the title will not be reset since
+% it will be presented unchanged from normal chordbk mode.
+%
+% \begin{macrocode}
+ \ifCompactSongMode
+ \renewcommand{\ChBassFontSav}{\ChBassFont} %
+ \renewcommand{\ChFontSav}{\ChFont} %
+ \renewcommand{\ChBkFontSav}{\ChBkFont} %
+ \renewcommand{\SBDefaultFontSav}{\SBDefaultFont} %
+ \renewcommand{\SBOccursBrktFontSav}{\SBOccursBrktFont}%
+ %
+ \renewcommand{\ChBassFont}{\ChBassFontCS} %
+ \renewcommand{\ChFont}{\ChFontCS} %
+ \renewcommand{\ChBkFont}{\ChBkFontCS} %
+ \renewcommand{\SBDefaultFont}{\SBDefaultFontCS} %
+ \renewcommand{\SBOccursBrktFont}{\SBOccursBrktFontCS}%
+%
+% Multicol specific changes.
+% \begin{macrocode}
+ \setlength{\columnsep}{0.25in}
+
+% \end{macrocode}
+%
+% Remove side-margin, since marginal notes are not allowed when
+% using multicol.sty; but, we save their values before changing
+% them.
+%
+% \begin{macrocode}
+ \setlength{\textwidthSav} {\textwidth}
+ \setlength{\evensidemarginSav}{\evensidemargin}
+ \setlength{\marginparsepSav} {\marginparsep}
+ \setlength{\marginparwidthSav}{\marginparwidth}
+ %
+ \addtolength{\textwidth} {\marginparsep + \marginparwidth}
+ \addtolength{\evensidemargin}{-\marginparsep - \marginparwidth}
+ \setlength {\marginparsep} {0in}
+ \setlength {\marginparwidth}{0in}
+
+% \end{macrocode}
+%
+% Reduce minimum spacing amount used in |\Chr| macro (since we're
+% now using a smaller font for lyrics and chords.
+%
+% \begin{macrocode}
+ \setlength{\chSpaceToleranceSav}{\chSpaceTolerance}
+ %
+ \setlength{\chSpaceTolerance}{1.0mm}
+
+% \end{macrocode}
+%
+% Remove the extra space before Verses, etc.
+%
+% \begin{macrocode}
+ \renewcommand{\HangAmtSav} {\HangAmt}
+ \renewcommand{\LeftMarginSBChorusSav} {\LeftMarginSBChorus}
+ \renewcommand{\LeftMarginSBSectionSav}{\LeftMarginSBSection}
+ \renewcommand{\LeftMarginSBVerseSav} {\LeftMarginSBVerse}
+ %
+ \renewcommand{\HangAmt} {1.5em}
+ \renewcommand{\LeftMarginSBChorus} {2em}
+ \renewcommand{\LeftMarginSBSection}{\LeftMarginSBChorus}
+ \renewcommand{\LeftMarginSBVerse} {\LeftMarginSBChorus}
+ \fi
+% \end{macrocode}
+%
+% Whereever you see a parameter used directly, and not the parameter macro
+% just set, above, it is because I haven't figured out how the receiving
+% macro can deal with accepting its input via a macro (and not via the
+% native parameter). In general this is because the receiving macro is
+% attempting to detect and empty or blank parameter.
+%
+% The second parameter is used directly here when |\STitle| is invoked
+% (instead of |\theSongKey|), because I can't figure out how to cause the
+% sharp and flat substitution to occur within the context of the
+% |\renewcommand| statement, above.
+%
+% \begin{macrocode}
+ \begin{center}
+ \STitle[N]{\theSongTitle}{#3}\\
+ \vspace{-.5ex}
+ \CpyRt[N]{#4}{#7}\\
+ \vspace{-.5ex}
+ \WAndM[N]{#5}\\
+ \if\given{#6}%
+ \vspace{-.75ex}
+ \ScriptRef[N]{\theSongScriptRef}\\
+ \fi%
+ \end{center}%
+ \vspace{\SpaceAfterTitleBlk}
+% \end{macrocode}
+%
+% If we're in |compactsong| mode then put us into |multicols{2}| mode.
+%
+% \begin{macrocode}
+ \ifCompactSongMode
+ \begin{multicols*}{2}
+ \raggedcolumns
+ \fi
+ \SBDefaultFont%
+ }%
+% \end{macrocode}
+%
+% This brings the |song| environment's open clause to a close.
+%
+% The close clause now starts. We begin by closing out the |SamepageMode|
+% and |CompactSongMode| environments, as applicable. For |CompactSongMode|
+% we need to restore the fonts and lengths.
+%
+% \begin{macrocode}
+{\ifSamepageMode%
+ \end{samepage}%
+ \fi%
+ \ifCompactSongMode
+ \renewcommand{\ChBassFont}{\ChBassFontSav} %
+ \renewcommand{\ChFont}{\ChFontSav} %
+ \renewcommand{\ChBkFont}{\ChBkFontSav} %
+ \renewcommand{\SBDefaultFont}{\SBDefaultFontSav} %
+ \renewcommand{\SBOccursBrktFont}{\SBOccursBrktFontSav}%
+ %
+ \setlength{\textwidth} {\textwidthSav}
+ \setlength{\evensidemargin}{\evensidemarginSav}
+ \setlength{\marginparsep} {\marginparsepSav}
+ \setlength{\marginparwidth}{\marginparwidthSav}
+ %
+ \renewcommand{\HangAmt} {\HangAmtSav}
+ \renewcommand{\LeftMarginSBChorus} {\LeftMarginSBChorusSav}
+ \renewcommand{\LeftMarginSBSection}{\LeftMarginSBSectionSav}
+ \renewcommand{\LeftMarginSBVerse} {\LeftMarginSBVerseSav}
+ %
+ \end{multicols*}
+ \fi
+ \ifSongEject%
+ \vfill\pagebreak%
+ \else%
+ \SpaceAfterSong\pagebreak[1]%
+ \fi%
+% \end{macrocode}
+%
+% Here's where we close out the \meta{Include?} if-then-else. Note that we
+% immediately clear |box2| before proceding (an attempt to free up the
+% memory we've just consumed).
+%
+% \begin{macrocode}
+ \ifExcludeSong\egroup\setbox2=\hbox{}\fi%
+ \renewcommand{\SBinSongEnv}{\False}%
+ \SBinSongEnvfalse%
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CBExcl}
+% \begin{macro}{\OHExcl}
+% \begin{macro}{\WBExcl}
+% \begin{macro}{\WOExcl}
+% The |\CBExcl|, |\OHExcl|, |\WBExcl|, and |\WOExcl| macros exist to be
+% passed as parameters to the |song| environment's \meta{Include?}
+% parameter. The parameters cause the song to be excluded when processing the
+% particular \Songbook{} type:
+% \begin{description}
+% \item[|CBExcl|\ ] Exclude the song when in |chordk| mode
+% \item[|OHExcl|\ ] Exclude the song when in |overhead| mode
+% \item[|WBExcl|\ ] Exclude the song when in |wordbk| mode
+% \item[|WOExcl|\ ] Exclude the song when in either |wordbk| or
+% |overhead| mode
+% \end{description}
+%
+% Here's an example usage which shows a song to be excluded when in
+% |chordbk| mode:
+% \begin{verbatim}
+% \documentclass{book}
+% \usepackage[chordbk]{songbook}
+%
+% \begin{document}
+% \begin{song}[\CBExcl]{title}{}{}{}{}{}
+% some lyrics
+% \end{song}
+% \end{document}
+% \end{verbatim}
+%
+% \begin{macrocode}
+\newcommand{\CBExcl}{\ifChordBk N\else Y\fi}
+\newcommand{\OHExcl}{\ifOverhead N\else Y\fi}
+\newcommand{\WBExcl}{\ifWordBk N\else Y\fi}
+\newcommand{\WOExcl}{\ifWordsOnly N\else Y\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{xlatn}
+% |xlatn|\parm{1}\parm{2}\parm{3} is the old song-translation environment.
+% \begin{ParameterList}
+% \item[\meta{1}] Title of the translated song.
+% \item[\meta{2}] Translation permission.
+% \item[\meta{3}] Who performed the translation.
+% \end{ParameterList}
+%
+% The |xlatn| environment is considered obsolete and will be removed from
+% a future release of the \Songbook{} macros.
+%
+% The xlatn environment always occurs within a song environment.
+% We reset the verse counter then cause the title and other
+% parameter information to be displayed.
+%
+% \begin{macrocode}
+\newenvironment{xlatn}[3]{% Comment marker negates the newline.
+ \renewcommand{\theXlatnBy}{#3}%
+ \renewcommand{\theXlatnPerm}{#2}%
+ \renewcommand{\theXlatnTitle}{#1}%
+ %
+ \titleIndex{\theXlatnTitle}{\theSBSongCnt}%
+ \titleContents{\theXlatnTitle}{\theSongKey}%
+ %
+ \begin{center}
+ \STitle[N]{\theXlatnTitle}{\theSongKey}\\
+ \CpyRt[N]{\theSongCopyRt}{\theSongLicense}\\
+ \if\nil{#2}%
+ \relax%
+ \else%
+ \vspace{-.5ex}
+ {\CpyRtFont\theXlatnPerm}\\
+ \fi
+ \if\nil{#3}%
+ \relax%
+ \else%
+ \vspace{-.5ex}
+ {\CpyRtFont\theXlatnBy}\\
+ \fi
+ \end{center}%
+ %
+ \setcounter{SBVerseCnt}{0}%
+ \setcounter{SBSectionCnt}{0}%
+}{\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{songTranslation}
+% |songTranslation|\parm{1}\parm{2}\parm{3} is the song-translation environment.
+% \begin{ParameterList}
+% \item[\meta{1}] Language of translated song.
+% \item[\meta{2}] Title of the translated song.
+% \item[\meta{3}] Translation permission.
+% \item[\meta{4}] Who performed the translation.
+% \end{ParameterList}
+%
+% The |songTranslation| environment always occurs within a |song| environment.
+% We reset the verse counter then cause the title and other
+% parameter information to be displayed.
+%
+% The |xlatn| environment was the original song translation environment, but
+% with the addition of an additional parameter (the ``Language of translated
+% song.'' parameter) it made most sense to create a new environment which
+% simply deals with the new parameter and then calls the old environment. At
+% some point in the future, when the |xlatn| environment is removed, the |xlatn|
+% code will be moved here.
+%
+% \begin{macrocode}
+\newenvironment{songTranslation}[4]{% Comment marker negates the newline.
+ \renewcommand{\theXlatnBy}{#4}%
+ \begin{xlatn}{#2}{#3}{#4}%
+}{\end{xlatn}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\sbChord}
+% |\sbChord| changes a sequence of characters into a chord.
+% \begin{ParameterList}
+% \item[\meta{1}] Chord.
+% \end{ParameterList}
+%
+% The original version of this function was written by Philip
+% Hirschhorn $<$\texttt{psh@math.mit.edu}$>$ or
+% $<$\texttt{phirschhorn@lucy.wellesley.edu}$>$.
+%
+% Scan the sequence of characters in Chord. Replace `\texttt{\#}' characters
+% with $\sharp$'s and `\texttt{b}' characters with $\flat$. This produces more
+% realistic looking chord symbols (which also take up less space than
+% their phoney counterparts). We also look for `\texttt{/}' characters, and
+% insert a |\ChBassFont| command into the stream when a `\texttt{/}' is found.
+% This makes the bass note of the chord to appear in a smaller font.
+%
+% \begin{macrocode}
+\def\sbChord#1{%
+ \ifx#1\relax%
+ \let\next=\relax%
+ \else%
+ \ifx#1##% double sharp because we're inside a \def
+ $\sharp$%
+ \else%
+ \ifx#1b%
+ $\flat$%
+ \else%
+ \ifx#1/%
+ \ChBassFont /%
+ \else%
+ \ifx#1[%
+ \bgroup\ChBkFont [\egroup%
+ \else%
+ \ifx#1]%
+ \bgroup\ChBkFont ]\egroup%
+ \else%
+ #1%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \let\next=\sbChord%
+ \fi%
+ \next%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Ch}
+% \begin{macro}{\ChX}
+% \begin{macro}{\Chr}
+% |\Ch|\parm{1}\parm{2} is the chord over lyrics macro.\\
+% |\ChX| is the Chord over lyrics macro, but deleting trailing spaces.\\
+% |\Chr| is the Chord over lyrics macro, but inserting a rule, when necessary.
+% \begin{ParameterList}
+% \item[\meta{1}] Chord.
+% \item[\meta{2}] Syllable that chord is to be left justified over.
+% \end{ParameterList}
+%
+% The words-only style file turns off the chord generation and just
+% prints the second parameter.
+%
+% The |\ChX| version of this macro is used for the benefit of the words-only
+% style to ensure that spaces following the macro are removed. For
+% example, an interword space containing a couple of extra chords would
+% be written as (this is not usually necessary, but sometimes there is no
+% other way to elliminate spurious white space from a words-only songbook):
+% \begin{verbatim}
+% \ChX{D7}{ing} \ChX{E}{} \ChX{D}{} \Ch{A}{You}
+% \end{verbatim}
+%
+% The |\Chr| version of this macro inserts a rule, at the height specified
+% by the |\SBRuleRaiseAmount| macro, when the chord is wider than the
+% syllable. The default value creates an extended em-dash-like rule; a
+% value of 0pt creates an underbar-like rule. More details about the
+% |\Chr| command follow below, just preceeding its definition.
+%
+% This code is based on macros from Olivier Biot's
+% (\texttt{http://www.biot.yucom.be/}) \texttt{chord.sty} file. Changes made by me:
+% \begin{itemize}
+% \item removed annoying space between |\SBIntersyllableRules| when they butt
+% up against one another
+% \item changed the default |\ChordRaise| value to something closer to what my
+% previous version of the |\Ch| command used to set
+% \item renamed the commands: |\@| to |\Ch|, and |\@@| to |\Chr|
+% \item renamed the variables used to adjust |\Ch|'s behaviour, to ensure no
+% conflict exists with Olivier's macro.
+% \end{itemize}
+%%%
+% \begin{macrocode}
+\newcommand{\Ch}[2]{{%
+ \ifChordBk%
+ \setbox1=\hbox{\ChFont\sbChord#1\relax\strut}%
+ \setbox0=\hbox{#2}%
+ \ifdim\wd1<\wd0%
+ \strut\raise\SBChordRaise\copy1\kern-\wd1\copy0%
+ \else%
+ \strut\copy0\kern-\wd0\strut\raise\SBChordRaise\copy1%
+ \fi%
+ \else%
+ #2%
+ \fi}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |\ChX| code.
+%
+% \begin{macrocode}
+\newcommand{\ChX}[2]{%
+ \ifWordsOnly%
+ \if\nil{#2}%
+ \ignorespaces%
+ \else%
+ #2%
+ \fi%
+ \else%
+ \Ch{#1}{#2}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |\Chr| code and a detailed macro description \& definition.
+%
+% We start with some internal scratch variables. Any value they
+% have prior to |\Chr|'s execution will be discarded each time.
+%
+% \begin{macrocode}
+\newlength{\chCriticDim}
+\newlength{\chSpaceDim}
+% \end{macrocode}
+%
+% \begin{verbatim}
+% DEF\Chr#1#2
+% BEGIN
+% \box1 == \hbox{... #1 --> Chord ...}
+% \box0 == \hbox{... #2 --> Syllable ...}
+% \chCriticDim == \wd0 - \chSpaceTolerance - 2 \chMiniSpace
+% IFF \wd1 > \chCriticDim
+% \chCriticDim == \wd1 - \wd0 - \chSpaceTolerance - 2 \chMiniSpace
+% IFF \chCriticDim > 0mm
+% \chSpaceDim == \wd1 - \wd0 + \chSpaceTolerance
+% ELSE
+% \chSpaceDim == \chSpaceTolerance
+% FFI
+% \chCriticDim == \chSpaceDim - 2 \chSpaceTolerance
+% \raise \SBChordRaise \copy1 \kern - \wd1
+% IFF \wd0 == 0mm
+% \kern - 2 \chMiniSpace
+% FFI
+% \copy0
+% \hbox to \chCriticDim{\hss\raise\SBRuleRaiseAmount
+% \hbox to \chSpaceDim{\SBIntersyllableRule}\hss}
+% ELSE
+% \raise \SBChordRaise \copy1 \kern - \wd1 \copy0
+% FFI
+% END
+% \end{verbatim}
+%
+% \begin{macrocode}
+\newcommand{\Chr}[2]{{%
+ \ifChordBk
+ \setbox1=\hbox{\ChFont\sbChord#1\relax\strut}%
+ \setbox0=\hbox{#2}%
+ \setlength{\chCriticDim}{\wd0 - \chSpaceTolerance}%
+ \advance\chCriticDim by 2\chMiniSpace%
+ \ifdim\wd1>\chCriticDim%
+ \chCriticDim \wd1%
+ \advance\chCriticDim by -\wd0%
+ \advance\chCriticDim by -\chSpaceTolerance%
+ \advance\chCriticDim by -2\chMiniSpace%
+ \ifdim\chCriticDim>0mm%
+ \chSpaceDim \wd1%
+ \advance\chSpaceDim by -\wd0%
+ \advance\chSpaceDim by \chSpaceTolerance%
+ \else%
+ \chSpaceDim\chSpaceTolerance%
+ \fi%
+ \chCriticDim \chSpaceDim%
+ \advance\chCriticDim by 2\chMiniSpace%
+ \strut\raise\SBChordRaise\copy1\kern-\wd1\ifdim\wd0=0mm\kern-2\chMiniSpace\fi%
+ \copy0\hbox to\chCriticDim{\hss%
+ \raise\SBRuleRaiseAmount\hbox to\chSpaceDim{\SBIntersyllableRule}\hss}%
+ \else%
+ \strut\raise\SBChordRaise\copy1\kern-\wd1%
+ \copy0%
+ \fi%
+ \else%
+ #2%
+ \fi}%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBMargNote}
+% |\SBMargNote|\parm{1} creates a \Songbook{} marginal note.
+% \begin{ParameterList}
+% \item[\meta{1}] Text of note to place in margin.
+% \end{ParameterList}
+%
+% Used to place a note of some kind in the margin of a songbook, or within
+% a footnote when in |CompactSong| mode. In words-only mode this macro is a
+% no-op.
+%
+% If we are excluding a song then we have |\SBMargNote| take no action.
+% We do this to be sure that no footnotes are generated, and to prevent
+% the error that will occur from attempting to use the |\marginpar| command
+% within a |\vbox{}|.
+% \changes{v4.1a}{2003/09/22}{Added an \textsf{ifExcludeSong} clause to avoid the
+% conflict with \textsf{marginpar}}
+%
+% \begin{macrocode}
+\newcommand{\SBMargNote}[1]{%
+ \ifExcludeSong%
+ \relax%
+ \else\ifWordsOnly%
+ \relax%
+ \else\ifCompactSongMode%
+ \footnote{{\SBMargNoteFont{#1}}}%
+ \else%
+ \marginpar{{\begin{flushleft}\SBRefFont{#1}\end{flushleft}}}%
+ \fi\fi\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBRef}
+% |\SBRef| creates a song reference in the margin.
+% \begin{ParameterList}
+% \item[\meta{1}] Songbook/CD/tape name.
+% \item[\meta{2}] Page/Song number within book referenced by \meta{1},
+% or tape/CD publisher info.
+% \end{ParameterList}
+%
+% Used to indicate a source for the full SATB music for this song, or
+% what CD/cassette the song can be found on. In words-only mode this
+% macro is a no-op. This normally appears in the margin of the songbook,
+% but in |CompactSong| mode the information appears in a footnote that is
+% always numbered `\texttt{0}' (even if there is more than one reference in a
+% song.
+%
+% If we are excluding a song then we have |\SBRef| take no action. We do
+% this to be sure that no footnotes are generated, and to prevent the
+% error that will occur from attempting to use the |\marginpar| command
+% within a |\vbox{}|.
+% \changes{v4.1a}{2003/09/22}{Added an \textsf{ifExcludeSong} clause to avoid the
+% conflict with \textsf{marginpar}}
+%
+% \begin{macrocode}
+\newcommand{\SBRef}[2]{%
+ \ifExcludeSong%
+ \relax%
+ \else\ifWordsOnly%
+ \relax%
+ \else\ifCompactSongMode%
+ \footnotetext[0]{{\SBRefFont{\em #1}, {#2}.}}%
+ \else%
+ \marginpar{{\begin{flushleft}\SBRefFont{\em #1}, {#2}.\end{flushleft}}}%
+ \fi\fi\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{SBVerse}
+% \begin{macro}{SBVerse*}
+% The |SBVerse| and |SBVerse*| environments encapsulate a verse.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% Very much like \LaTeX{}'s verse environment, except that here the
+% verses are numbered. The indent amount for lines that are too long
+% is set with the |\HangAmt| command (see the constant definitions at
+% the top of this document).
+%
+% A version of this command which indents but down not place an
+% |\SBVerseCnt| before the chorus is available as |SBVerse*|.
+% Similar to \LaTeX{}'s |\section*| command, the verse counter is not
+% incremented either.
+%
+% \begin{macrocode}
+\newenvironment{SBVerse}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \addtocounter{SBVerseCnt}{1}%
+ \SBVerseMarkright{\theSBVerseCnt}%
+ \begin{list}{{\SBVerseNumberFont\theSBVerseCnt .}}
+ {\setlength {\leftmargin} {\LeftMarginSBVerse + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterVerse}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |SBVerse*| code. Coding of this environment courtesy of Herbert
+% Martin Dietze $<$\texttt{herbert@fh-wedel.de}$>$.
+%
+% \begin{macrocode}
+\newenvironment{SBVerse*}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBVerseNumberFont }}
+ {\setlength {\leftmargin} {\LeftMarginSBVerse + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterVerse}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{SBSection}
+% \begin{macro}{SBSection*}
+% The |SBSection| and |SBSection*| environments encapsulate a section.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% Very much like \LaTeX's verse environment, except that here the
+% sections are numbered. The indent amount for lines that are too long
+% is set with the |\HangAmt| command (see the constant definitions at
+% the top of this file).
+%
+% A version of this command which indents but doesn't place an
+% |\SBSectionCnt| before the chorus is available as |SBSection*|.
+% Similar to \LaTeX's |\section*| command, the section counter is not
+% incremented either.
+%
+% \begin{macrocode}
+\newenvironment{SBSection}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \addtocounter{SBSectionCnt}{1}%
+ \SBSectionMarkright{SBSectionCnt}
+ \begin{list}{{\SBSectionNumberFont\alph{SBSectionCnt})}}
+ {\setlength {\leftmargin} {\LeftMarginSBSection + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterSection}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |SBSection*| code. Coding of this environment courtesy of Herbert
+% Martin Dietze $<$\texttt{herbert@fh-wedel.de}$>$.
+%
+% \begin{macrocode}
+\newenvironment{SBSection*}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBSectionNumberFont }}
+ {\setlength {\leftmargin} {\LeftMarginSBSection + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterSection}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBChorus}
+% \begin{macro}{\SBChorus*}
+% The |SBChorus| and |SBChorus*| environments encapsulate a chorus.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% Very much like \LaTeX{}'s verse environment, except that here a
+% |\SBChorusTag| tag is inserted to demark the start of the chorus.
+% The indent amount for lines that are too long is set with the
+% |\HangAmt| command (see the constant definitions at the top of
+% this file).
+%
+% A version of this command which indents but does not place a
+% |\SBChorusTag| before the chorus is available as |SBChorus*|.
+%
+% \begin{macrocode}
+\newenvironment{SBChorus}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \SBChorusMarkright{\SBChorusTag}
+ \begin{list}{{\SBChorusTagFont\SBChorusTag}}
+ {\setlength {\leftmargin} {\LeftMarginSBChorus + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterChorus%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |SBChorus*| code. Coding of this environment courtesy of Herbert
+% Martin Dietze $<$\texttt{herbert@fh-wedel.de}$>$.
+%
+% \begin{macrocode}
+\newenvironment{SBChorus*}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBChorusTagFont }}
+ {\setlength {\leftmargin} {\LeftMarginSBChorus + \HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterChorus}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBOpGroup}
+% |\SBOpGroup| identifies an open chorus/verse.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% This environment is akin to SBChorus, except that no tag and no
+% indentation is performed. This environment serves two purposes:
+% \begin{enumerate}
+% \item Identify a verse or chorus that is unmarked (by way of a tag)
+% and the left margin of the block is not indented.
+% \item Puts the verse or chorus in a list environment so that wrapping
+% lines are properly indented.
+% \end{enumerate}
+%%%
+% \begin{macrocode}
+\newenvironment{SBOpGroup}{%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{\hbox{}}
+ {\setlength {\leftmargin} {\HangAmt}
+ \setlength{\itemindent} {-\HangAmt}
+ \setlength{\listparindent}{-\HangAmt}
+ \setlength{\topsep} {0pt}
+ \setlength{\parsep} {0pt}
+ \setlength{\labelwidth} {0pt}
+ \setlength{\labelsep} {0pt}
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}
+ }%
+ \item}
+{\end{list}%
+ \egroup%
+ \SpaceAfterOpGroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBBridge}
+% |\SBBridge|\parm{1} identifies a bridge.
+% \begin{ParameterList}
+% \item[\meta{1}] The Bridge.
+% \end{ParameterList}
+%
+% This command is used to encapsulate a bridge that occurs in a song. In
+% words-only mode this command is a no-op.
+%
+% \begin{macrocode}
+\newcommand{\SBBridge}[1]{%
+ \ifWordsOnly%
+ \relax%
+ \else%
+ \sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBBridgeTagFont\SBBridgeTag}}
+ {\setlength {\leftmargin} {\LeftMarginSBChorus}%
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip}{\sbBaselineSkipAmt}
+ }%
+ \item #1
+ \end{list}%
+ \egroup\par
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBEnd}
+% |\SBEnd|\parm{1}\parm{2} identifies a song ending.
+% \begin{ParameterList}
+% \item[\meta{1}] Display in words-only? (optional)
+% \item[\meta{2}] The Ending.
+% \end{ParameterList}
+%
+% This command is used to encapsulate the ending of a song. If
+% the first parameter is not specified, or if it is~`\texttt{N}',
+% then in words-only mode this command is a no-op.
+%
+% \begin{macrocode}
+\newcommand{\SBEnd}[2][N]{%
+ \ifthenelse{\equal{\ifWordsOnly Y\fi}{Y}
+ \and \equal{N}{#1}}%
+ {\relax}%
+ {\sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBEndTagFont\SBEndTag}}
+ {\setlength {\leftmargin} {\LeftMarginSBChorus}
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip}{\sbBaselineSkipAmt}
+ }%
+ \item #2
+ \end{list}%
+ \egroup\par}
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SBIntro}
+% |\SBIntro|\parm{1}\parm{2} identifiesd an introduction.
+% \begin{ParameterList}
+% \item[\meta{1}] Display in words-only? (optional)
+% \item[\meta{2}] The Introduction.
+% \end{ParameterList}
+%
+% This command is used to encapsulate an introduction to a song. If
+% the first parameter is not specified, or if it is~`\texttt{N}', then in
+% words-only mode this command is a no-op.
+%
+% \begin{macrocode}
+\newcommand{\SBIntro}[2][N]{%
+ \ifthenelse{\equal{\ifWordsOnly Y\fi}{Y}
+ \and \equal{N}{#1}}%
+ {\relax}%
+ {\sbSetsbBaselineSkipAmt%
+ \bgroup%
+ \begin{list}{{\SBIntroTagFont\SBIntroTag}}%
+ {\setlength {\leftmargin} {\LeftMarginSBChorus}%
+ \setlength{\parsep} {0pt}
+ \setlength{\baselineskip}{\sbBaselineSkipAmt}
+ }%
+ \item #2
+ \vspace{-\topsep}%\vspace{-\partopsep}%
+ \end{list}%
+ \egroup\par}%
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{SBBracket}
+% \begin{macro}{SBBracket*}
+% The |SBBracket|\parm{1} and |SBBracket|\parm{1} environments encapsulates
+% a bracketed versicle.
+% \begin{ParameterList}
+% \item[\meta{1}] Some tag is inserted before the bracket to indicate
+% the significance of the bracketed area.
+% \end{ParameterList}
+%
+% There are two versions of this environment: |SBBracket| and |SBBracket*|.
+% They operate identically, except that the *ed version doesn't print
+% its tag and bracket in words-only modes.
+%
+% This is a more versatile, and better formatted version of |SBBridge|,
+% |SBOccurs|, etc.; and it is recommended that this be used in the others
+% place.
+%
+% Starting in version~4.0 of the style, the left-hand indentation of
+% this environment has been chosen such that the |SBVerse|, |SBChorus|, and
+% |SBBracket| song-words all align against the same left margin when printing
+% standard words \&~chords songbooks.
+%
+% \begin{macrocode}
+\newenvironment{SBBracket}[1]{%
+ \SpaceBeforeSBBracket
+ \sbSetsbBaselineSkipAmt%
+ \setbox0=\hbox to \LeftMarginSBBracket{\parbox{\LeftMarginSBBracket}%
+ {\flushright{\hspace{0pt}\SBBracketTagFont #1}}}%
+ \hbox\bgroup%
+ \rightskip=\LeftMarginSBBracket%
+ $\raisebox{1.25ex}{\copy0}%
+ \left\lbrack%
+ \vcenter\bgroup%
+ \begin{list}{\hbox{}}% %
+ {\setlength {\leftmargin} {\HangAmt + 0.5em}% This list
+ \setlength{\rightmargin} {\LeftMarginSBBracket}%
+ \setlength{\itemindent} {-\HangAmt}% % been copied
+ \setlength{\listparindent}{-\HangAmt}% % verbatim from
+ \setlength{\topsep} {0pt}% % the SBOpGroup
+ \setlength{\parsep} {0pt}% % environment,
+ \setlength{\labelwidth} {0pt}% % above and then
+ \setlength{\labelsep} {0pt}% % modified slightly.
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}%
+ }% %
+ \item%
+}{%
+ \end{list}%
+ \egroup%
+ \right.$%
+ \rightskip=0pt
+ \egroup
+ \SpaceAfterSBBracket
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |SBBracket*| code.
+%
+% \begin{macrocode}
+\newenvironment{SBBracket*}[1]{%
+ \SpaceBeforeSBBracket
+ \sbSetsbBaselineSkipAmt%
+ \ifNotWordsOnly
+ \setbox0=\hbox to \LeftMarginSBBracket{\parbox{\LeftMarginSBBracket}%
+ {\flushright{\hspace{0pt}\SBBracketTagFont #1}}}%
+ \hbox\bgroup%
+ \rightskip=\LeftMarginSBBracket%
+ $\raisebox{1.25ex}{\copy0}%
+ \left\lbrack%
+ \vcenter\bgroup%
+ \fi
+ \begin{list}{\hbox{}}% %
+ {\setlength {\leftmargin} {\HangAmt + 0.5em}% This list
+ \setlength{\rightmargin} {\LeftMarginSBBracket}%
+ \setlength{\itemindent} {-\HangAmt}% % been copied
+ \setlength{\listparindent}{-\HangAmt}% % verbatim from
+ \setlength{\topsep} {0pt}% % the SBOpGroup
+ \setlength{\parsep} {0pt}% % environment,
+ \setlength{\labelwidth} {0pt}% % above and then
+ \setlength{\labelsep} {0pt}% % modified slightly.
+ \setlength{\baselineskip} {\sbBaselineSkipAmt}%
+ }% %
+ \item%
+}{%
+ \end{list}%
+ \ifNotWordsOnly
+ \egroup%
+ \right.$%
+ \rightskip=0pt
+ \egroup
+ \fi
+ \SpaceAfterSBBracket
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{SBOccurs}
+% The |SBOccurs|\parm{1} environment encapsulates an occurance.
+% \begin{ParameterList}
+% \item[\meta{1}] Occurance number(s). For example ``\texttt{1,3}'' would
+% designate that this passage applies to the 1$^{st}$ and
+% 3$^{rd}$ occurances.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newenvironment{SBOccurs}[1]{%
+ {\SBOccursTagFont #1\SBOccursBrktFont [}
+ }
+{{\SBOccursBrktFont ]}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{SBExtraKeys}
+% The |SBExtraKeys|\parm{1} environment encapsulates extra song keys.
+% \begin{ParameterList}
+% \item[\meta{1}] This parameter actually is used to either pass or
+% not pass all the content of the environment on to
+% the \LaTeX processor.
+% \end{ParameterList}
+%
+% Songs are frequently listed in more than one key. This is ok for
+% books with chords, however the words-only edition should only print
+% one occurance of a song. So, any extra keys are placed in a
+% |SBExtraKey| environment. This allows them to be \emph{shut off} when
+% they're not needed.
+%
+% This was coded some years ago and I probably wouldn't do it this way
+% again; however, it works so I'm not inclined to \emph{better} it.
+%
+% \begin{macrocode}
+\newenvironment{SBExtraKeys}[1]{%
+ \ifWordsOnly%
+ \relax%
+ \else%
+ #1
+ \fi}
+{}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CBPageBrk}
+% |\CBPageBrk|\parm{1} generates a page break here if we're in Chordbk mode.
+% \begin{ParameterList}
+% \item[\meta{1}] Take effect in CompactSong mode too? (optional)
+% \end{ParameterList}
+%
+% When we're also in CompactSong mode we will only execute the page
+% break if a parameter other than~`\texttt{N}' has been passed.
+%
+% \begin{macrocode}
+\newcommand{\CBPageBrk}[1][N]{%
+ \ifChordBk%
+ \ifCompactSongMode
+ \ifthenelse{\equal{#1}{N}}
+ {\relax}
+ {\vfill\pagebreak}
+ \else
+ \vfill\pagebreak
+ \fi
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CSColBrk}
+% |\CSColBrk| generates a column break here if we're in |compactsong| mode.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\CSColBrk}{%
+ \ifCompactSongMode%
+ \columnbreak%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NotWOPageBrk}
+% |\NotWOPageBrk| generates a page break here if we're \emph{not} in words-only mode.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\NotWOPageBrk}{%
+ \ifWordsOnly%
+ \relax%
+ \else%
+ \pagebreak
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\OHPageBrk}
+% |\OHPageBrk| generates a page break here if we're in |overhead| mode.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\OHPageBrk}{%
+ \ifOverhead%
+ \pagebreak
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WBPageBrk}
+% |\WBPageBrk| generates a page break here if we're in |workbk| mode.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\WBPageBrk}{%
+ \ifWordBk%
+ \pagebreak
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WOPageBrk}
+% |\WOPageBrk| generates a page break here if we're in words-only mode.
+% \begin{ParameterList}
+% \item None.
+% \end{ParameterList}
+%
+% \begin{macrocode}
+\newcommand{\WOPageBrk}{%
+ \ifWordsOnly%
+ \pagebreak
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Obsolete Macros}
+% The macros in this section are no longer recommended, but will
+% continue to exist in the next version of the style. Existing
+% users of this style should upgrade their source files to make
+% use of the new, replacement, mechanisms offered by the style.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% O B S O L E T E M A C R O S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% The |xlatn| environment is obsolete, but for the sake of
+% code-clarity the code has not been moved into the
+% Obsolete Macros section of this document.
+%
+% \subsubsection{Deprecated Macros}
+%
+% The macros in this section will be deleted in the next version of
+% the style. Where these old macros conflict with new ones they have
+% been renamed by placing a lowercase `o' at the start of each macro
+% name; this makes them easily accessible yet out of the way.
+%
+% \begin{macrocode}
+%%=======================================================%
+%% D E P R E C A T E D M A C R O S %
+%%=======================================================%
+
+% \end{macrocode}
+%
+% \paragraph{Boolean Contants} In the early releases, before I \emph{knew}
+% about \LaTeX's |\newif| command I had coded |\if|s using these contants.
+% These should have been removed some time ago, but I had neglected placing
+% them into this \textit{Deprecated Macros} section and so hadn't given proper
+% notice. Consider this \textit{notice}.
+% \begin{macro}{\False}
+% \begin{macro}{\True}
+% \begin{macro}{\ChordBk}
+% \begin{macro}{\Overhead}
+% \begin{macro}{\SongEject}
+% \begin{macro}{\WordBk}
+% \begin{macro}{\WordsOnly}
+% \begin{macro}{\SBinSongEnv}
+% |\False| is defined for use in |\if| macro contructs and the other
+% constants in this style.\\
+% |\True| is defined for use in |\if| macro contructs and the other
+% constants in this style.\\
+% |\ChordBk| tells if we are processing a \texttt{chordbk.sty} document.\\
+% |\Overhead| tells if we are processing an \texttt{overhead.sty} document.\\
+% |\SongEject| specifies if we want to end the current page at the end of
+% every |song| environment. A value of |\True| means
+% eject after every |song| environment.\\
+% |\WordBk| tells if we are processing a \texttt{wordbk.sty} document\\
+% |\WordsOnly| is equal to |\True| if we're in words-only mode.
+% The default value will be |\False|, as that is how all of
+% the commands in this file will act.\\
+% |\SBinSongEnv| tells if we are inside of a song environment. This is
+% re-defined as we enter and exit the song environment.
+%%%
+% \begin{macrocode}
+\newcommand{\False}{0}
+\newcommand{\True}{1}
+\newcommand{\ChordBk}{\False}
+\newcommand{\Overhead}{\False}
+\newcommand{\SongEject}{\True}
+\newcommand{\WordBk}{\False}
+\newcommand{\WordsOnly}{\False}
+\newcommand{\SBinSongEnv}{\False}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% End of songbook.sty file.
+%
+% \begin{macrocode}
+\endinput
+
+% \end{macrocode}
+%
+% \Finale
+% \PrintIndex \PrintChanges
+\endinput
+
+TODO:
+
+Make the index sorted in the order of the keys (i.e. Bb should come
+before B). I have some ideas about this one, but they involve rather
+more work that I may have time for.
+
+Chord macro that places [] around optional chords.
+
+Allow chords to be centered over the sylables. Re: request by "Tobias
+Weidelt" <tobias@weidelt.de>.
+
+% 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/songbook.ins b/macros/latex/contrib/songbook/songbook.ins
new file mode 100644
index 0000000000..064e52175c
--- /dev/null
+++ b/macros/latex/contrib/songbook/songbook.ins
@@ -0,0 +1,74 @@
+%% rcsid = @(#)$Id: songbook.ins,v 1.8 2010-04-12 18:04:32 rathc Exp $
+%%
+%% songbook.ins - Docstrip batch file for Songbook Style
+%%
+%% Version 4.5, 30 April, 2010
+%%
+%% Copyright 1992--2010 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.
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run
+%% through LaTeX or TeX.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\input docstrip
+
+\def\SimplePackage#1{%
+ \generate{\file{#1.sty}{\from{#1.dtx}{package}}}}
+
+\keepsilent
+
+%\usedir{tex/latex/tools}
+
+\preamble
+
+This is a generated file.
+
+Copyright 1992--2002 Christopher Rath <christopher@rath.ca>
+
+This package is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later
+version.
+
+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.
+
+The list of all files belonging to the LaTeX Songbook Style is
+given in the file `relnotes.txt'.
+
+\endpreamble
+
+% Generate Files
+%%%%%%%%%%%%%%%%
+\SimplePackage{songbook}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* All the files with extension `.sty' and `.tex'}
+\Msg{*}
+\Msg{* To produce the documentation run the .dtx files through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/songbook/songbook.ist b/macros/latex/contrib/songbook/songbook.ist
new file mode 100644
index 0000000000..603f7583f7
--- /dev/null
+++ b/macros/latex/contrib/songbook/songbook.ist
@@ -0,0 +1,4 @@
+level '+'
+preamble ""
+postamble ""
+delim_0 ",~"
diff --git a/macros/latex/contrib/songbook/songbook.pdf b/macros/latex/contrib/songbook/songbook.pdf
new file mode 100644
index 0000000000..d6816f32c5
--- /dev/null
+++ b/macros/latex/contrib/songbook/songbook.pdf
Binary files differ