diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/latex4musicians/latex4musicians.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/latex4musicians/latex4musicians.tex | 2714 |
1 files changed, 2714 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/latex4musicians/latex4musicians.tex b/Master/texmf-dist/doc/latex/latex4musicians/latex4musicians.tex new file mode 100644 index 00000000000..b408262bff9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/latex4musicians/latex4musicians.tex @@ -0,0 +1,2714 @@ +% latex4musicians.tex -*- LaTeX -*- +% +% By Guido Gonzato, PhD <guido.gonzato (at) gmail.com> +% +% Last updated: January 05, 2019 + +\documentclass[a4paper,12pt]{article} +\usepackage{etoolbox} % fix alltt +\usepackage{fancyhdr} % fancy headers +\usepackage{metalogo} % LaTeX logos +\usepackage{wasysym} % for \twonotes +\usepackage{graphicx} % include PDF files +\usepackage[colorlinks,% + linkcolor=darkred,% + urlcolor=darkblue,% + filecolor=darkblue,% + breaklinks=true]% + {hyperref} % URLs and links +\urlstyle{same} % use the same font for links +\usepackage{setspace} % for sources +\usepackage{fancyvrb} % fancy verbatim +\usepackage{pdfpages} % include external pages +\usepackage[breakable]% +{tcolorbox} % shaded boxes +\usepackage{alltt} % for sources + +\include{params} % low-level formatting stuff +\pagestyle{fancy} + +% ----- + +\begin{document} + +\title{\LaTeX{} for {\huge\twonotes{}}usicians} + +\author{Guido Gonzato, PhD} + +\date{Version \version\\ +\today} + +\maketitle + +\begin{center} + \includegraphics{shave.pdf} +\end{center} + +\begin{abstract} + + This guide shows how to create \LaTeX{} documents that include + several kinds of music elements, from very simple to highly complex. + Music features may consist of music symbols, song lyrics, guitar + chords diagrams, lead sheets, music excerpts, guitar tablatures, + multi-page scores. + + Music can be produced by \TeX{} and \LaTeX{} directly using + packages, and also by external scorewriters. Major packages and + programs are listed and briefly described, providing ready-to-use + examples. + +\end{abstract} + +\noteseparator + +\tableofcontents +% \listoftables +% \listoffigures + +\noteseparator + +% ----- + +\section{Introduction} + +~ \hfill% +\begin{minipage}{0.7\linewidth} + \begin{quote} + [And] there is no such hobby that it cannot be combined with \LaTeX. + + ~ \hfill --- \href{http://www.mychemistry.eu/2013/04/guitar-tablatures/} + {Clemens Niederberger} + \end{quote} +\end{minipage} + +\bigskip + +I'm a long-time and enthusiastic \LaTeX{} user, and I'm also an +amateur musician; I play folk music on wind instruments. Years ago, I +used \LaTeX{} to typeset my +\href{http://abcplus.sourceforge.net/#ABCGuide}{ABC notation +tutorial}, which I'm still maintaining. Writing that tutorial, I +included many music snippets along with the corresponding sources, and +I was very satisfied with the result. (I hope that other people are +satisfied, too.) + +Since then, I've become interested in other music notation languages. +I've come across many great programs and many great packages I wasn't +aware of; I've collected many snippets and I've taken notes. I'm +really impressed; there are plenty of options for the musician who is +also a \LaTeX{} user. In fact, \TeX{} can typeset music by itself +using extensions, such as the MusiX\TeX{} family. Besides, \LaTeX{} +can easily include music produced by other programs. + +So, to write \LaTeX{} documents that include music we have to solve +two problems: how do we make the music in a suitable format? And how +do we combine the music with \LaTeX? + +For my own self-training, and hoping to do something useful for other +musicians, I have decided to write this manual that explains how to +solve these problems. In particular, it shows how to create documents +that include many types of music information, from very simple to +highly complex: + +\begin{itemize} + + \item \hyperref[sec:musicsymbols]{music symbols}: + \begin{minipage}[c]{\linewidth} + \includegraphics{glyphs} + \end{minipage} + + \item \hyperref[sec:songbooks]{song lyrics}: + \begin{minipage}[c]{\linewidth} + \includegraphics[width=2cm]{guitar} + \end{minipage} + + \item \hyperref[sec:guitar]{guitar chord diagrams}: + \begin{minipage}[c]{\linewidth} + \includegraphics{gdiagram} + \end{minipage} + + \item \hyperref[sec:sheetmusic]{sheet music}: + \begin{minipage}[c]{\linewidth} + \includegraphics{sheet} + \end{minipage} + + \item \hyperref[sec:tablatures]{guitar tablatures}: + \begin{minipage}[c]{\linewidth} + \includegraphics{gtablature} + \end{minipage} + +\end{itemize} + +This guide aims to provide a roundup of available options, along with +ready-to-use examples. We will examine a few \TeX/\LaTeX{} packages +and several programs that produce high-quality musical output; then we +will learn how to include them in \LaTeX{} documents. + +% ----- + +\subsection{Conventions} + +This document is meant to be consulted in its PDF version, rather than +printed on paper. Links are written in short form whenever possible; +for instance, links to packages are written simply as +\href{https://www.ctan.org/pkg/abc}{abc} instead of +\url{https://www.ctan.org/pkg/abc}. + +Sources (\LaTeX{} or notation languages) are shown in a frame with a +cyan background; the resulting PDF output, when applicable, has a +light background. Command line sessions are shown in a frame, with +user commands emphasised in boldface. + +All software described in this guide is +\href{https://en.wikipedia.org/wiki/Free_and_open-source_software}{free +and open source}. + +% ----- + +\subsection{Preliminaries} + +To begin with, we need a working \LaTeX{} system. I recommend that you +install the latest release of \href{https://www.tug.org/texlive/}{TeX +Live}, which I used to typeset this manual and all included examples +on a GNU/Linux system (TeX Live 2018). On Debian-based GNU/Linux +systems, all you need to do is install \file{texlive-mu\-sic}; all +other needed components will be installed as dependencies. I suppose +that other distributions like \href{https://miktex.org/}{MiKTeX} or +\href{http://www.tug.org/mactex/}{MacTeX} are just as good, but I have +no first-hand experience with them. + +Secondly, we need a Bash-based command line environment; this is +provided by default in GNU/Linux and macOS systems. I recommend that +Windows users install the \href{http://www.msys2.org/}{MSYS2} +platform. + +In most cases, typesetting is done with the common \cmd{pdflatex} +command. Some packages, however, require the \XeLaTeX{} or \LuaLaTeX{} +engines. In that case, you'll also have to install +\file{texlive-xetex} or \file{texlive-luatex}. In this manual, +\cmd{pdflatex} is the default command, unless otherwise specified. + +This manual is not meant to replace the documentation of the packages +and programs that it describes. A few examples are provided to get you +started and to whet your appetite, but in many cases they don't cover +all available features. The package or program documentation is the +primary source of information. + +Finally, I assume that you are reasonably familiar with \LaTeX. Should +you need some information, fine manuals and tutorials are available at +the \href{https://ctan.org/tex-archive/info/}{\LaTeX{} info page}. + +% ----- + +\subsection{Adding Packages} + +TeX Live provides a large number of packages, but in the following +sections we will deal with packages that may not be included in less +recent releases. In this case, you will have to install the missing +package manually. + +The procedure is simple: + +\begin{enumerate} + + \item create this directory structure: + + \verb|$ mkdir -p $HOME/texmf/tex/latex| + + new packages will be installed in this directory tree. + + \item get the package (typically as a zip-compressed directory) from + your favourite CTAN mirror; let's call it \file{foo.zip} + + \item unpack it in the right place: + + \verb|$ mkdir $HOME/texmf/tex/latex/foo| + + \verb|$ mv foo.zip $HOME/texmf/tex/latex/foo| + + \verb|$ cd $HOME/texmf/tex/latex/foo ; unzip foo.zip| + + \item if no \file{.sty} file exists, run the command + \cmd{latex foo.ins} or \cmd{latex foo.dtx} to create it; + + \item run the command \cmd{texhash \$HOME/texmf} + +\end{enumerate} + +Package \pkgname{foo} is now accessible by \LaTeX. + +% ----- + +\subsection{Including PDF files} + +It's reasonable to assume that PDF is the most sensible format for +final output. PostScript, SVG, PNG and other formats will not be +considered, but it's easy to convert PDF files to these formats using +applications like \href{https://inkscape.org}{Inkscape} or +\href{https://www.imagemagick.org}{ImageMagick}. + +Unless you create music directly using \pkgname{MusiXTeX} and related +packages (Section~\ref{sec:musixtex}), your \LaTeX{} document will +include music as PDF files. Such files can be short excerpts, i.e.\ +smaller than a page, or span several pages. These files will be +included with the \ltx{includegraphics} command (package +\pkg{graphicx}) or with the \ltx{include\-pdf} command (package +\pkg{pdfpages}), respectively: + +\begin{source} +\begin{verbatim} +\documentclass[oneside]{article} +\usepackage{graphicx} +\usepackage{pdfpages} +\usepackage[a4paper,margin=1.5cm]{geometry} + +\begin{document} + +This is a short excerpt: + +\includegraphics[width=0.8\textwidth]{sample.pdf} + +Let's now include several pages: + +% pages=- means "all pages" +\includepdf[pages=-,pagecommand={},width=\textwidth]{music.pdf} + +\end{document} +\end{verbatim} +\end{source} + +In the case of short excerpts, we need some means of cropping the PDF +to its actual contents (bounding box); PDF files, in fact, are usually +created as whole pages. Cropping the PDF is accomplished with the free +program \href{http://pdfcrop.sourceforge.net}{pdfcrop}, a Perl script +that depends on \href{https://www.ghostscript.com}{Ghostscript} and +\href{http://pdfedit.cz/en/index.html}{PDFedit}. + +Given a file called \file{music.pdf}, we crop it with these commands: + +\begin{screen} +$ \textbf{pdfcrop music.pdf} +PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek. +==> 1 page written on \verb|`|music-crop.pdf'. +$ \textbf{mv -f music-crop.pdf music.pdf} +$ _ +\end{screen} +% $ + +Pdfcrop doesn't work on MSYS2. However, if you install the official +release of \href{https://ghostscript.com/}{Ghostscript} for Windows, +you can use the following shell script, \cmd{pdfcrop.sh}. It only +works with single-page PDF files: + +\begin{source} +\begin{verbatim} +#!/bin/sh + +# pdfcrop.sh - for MSYS2 and GhostScript +# Guido Gonzato, PhD. GPL 2 or later. + +MYSELF=$(basename $0) + +if [ $# -eq 0 ] ; then + printf "Usage: ${MYSELF} <file.pdf>\n" + printf "This script uses 'gs' to crop a one-page pdf file.\n\n" + exit 1 +fi + +# GhostScript is installed in C:\Gs +GS=/c/gs/gs9.26/bin/gswin64c.exe +INPUT=$1 +PDF=$(basename $1 .pdf) +OUTPUT=$PDF-cropped.pdf +GSOPTS="-q -sDEVICE=bbox -dBATCH -dNOPAUSE" + +# find out the bounding box +$GS $GSOPTS $INPUT 2>&1 | grep "%%B" > $PDF.bbox + +# read bbox coordinates in variables +read tmp X1 Y1 X2 Y2 < $PDF.bbox + +# write the output, cropped to bbox +$GS -q -o $OUTPUT \ + -sDEVICE=pdfwrite \ + -c "[ /CropBox [$X1 $Y1 $X2 $Y2] /PAGES pdfmark" \ + -f $INPUT + +/bin/rm -f $PDF.bbox + +echo "$INPUT cropped to $OUTPUT" +\end{verbatim} +\end{source} + +% $ + +% ----- + +\noteseparator + +% ----- + +\section{Music Symbols} +\label{sec:musicsymbols} + +The simplest music elements we may want to include in our documents +are music symbols (\emph{glyphs}). Standard \LaTeX{} only provides the +math mode commands \ltx{sharp}, \ltx{flat}, and \ltx{natural}: +$\sharp$ $\flat$ $\natural$. Additional glyphs are provided by several +packages; moreover, glyphs provided by music fonts are accessible via +\XeLaTeX{} and Lua\LaTeX. + +% ----- + +\subsection{Using Packages} + +The impressive +\href{http://tug.ctan.org/info/symbols/comprehensive/symbols-a4.pdf}% +{Comprehensive LaTeX Symbol List}, Section 7, lists packages that +provide a handful of music symbols: \pkg{textcomp}, \pkg{mnsymbol}, +\pkg{fdsymbol}, \pkg{boisik}, \pkg{wasysym}, \pkg{stix}, and +\pkg{arev}. + +More symbols are provided by \pkg{musicography}, \pkg{leadsheets}, and +\pkg{harmony}. These packages work with \cmd{pdflatex}, but still +provide a fairly limited number of glyphs. Besides, there could be +incompatibility between packages because of commands defined using the +same name. + +% TODO: figure out what harmony glyphs are for... + +% ----- + +\subsubsection{Package \pkg{musicography}} + +This package may be missing in less recent releases of TeX Live, so +you might have to install it manually. If you only need a limited +number of glyphs, then \pkg{musicography} may do the job: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{musicography} +\thispagestyle{empty} + +\begin{document} + +Musicography makes the music symbol font provided by MusiX\TeX\ +available as text font and then uses it to define a number +of symbols: + +\musFlat\ \musSharp\ \musNatural\ \musDoubleFlat\ \musDoubleSharp\ +\musWhole\ \musHalf\ \musQuarter\ \musEighth\ \musSixteenth\ +\musWholeDotted\ \musHalfDotted\ \musQuarterDotted\ +\musEighthDotted\ \musSixteenthDotted\ +\meterC\ \meterCutC\ \meterCThree\ \meterCThreeTwo\ \meterCZ\ +\musMeter{7}{8} + +\end{document}\end{verbatim} +\end{source} + +\score{musicography} + +% ----- + +\subsubsection{Package \pkg{leadsheets}} + +If you only need a limited number of glyphs, then also +\pkg{leadsheets} may do the job: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage[minimal]{leadsheets} +\useleadsheetslibraries{musicsymbols} +\thispagestyle{empty} + +\begin{document} + +Leadsheets makes the music symbol font provided by MusiX\TeX\ +available as text font and then uses it to define a number +of symbols: + +\sharp\ \doublesharp\ \flat\ \doubleflat\ \natural\ +\trebleclef\ \altoclef\ \bassclef\ \meterC\ \allabreve\ +\meter{12}{8}\ \wholerest\ \halfrest\ \quarterrest\ +\eighthrest\ \sixteenthrest\ \Break\ \normalbar\ +\leftrepeat\ \rightrepeat\ \leftrightrepeat\ \doublebar\ +\stopbar + +\end{document} +\end{verbatim} +\end{source} + +\score{glyphs_ls} + +% ----- + +\subsubsection{Package \pkg{lilyglyphs}} + +By far, the most complete source of music glyphs is the +\pkg{lilyglyphs} package. It provides all the symbols available in the +\href{http://lilypond.org/doc/v2.18/Documentation/notation/the-feta-font} +{Emmentaler} music font, which is used by the +\href{http://lilypond.org}{LilyPond} scorewriter +(Section~\ref{sec:lilypond}). \pkgname{Lilyglyphs} only works with +\XeLaTeX{} and \LuaLaTeX, and is incompatible with +\pkgname{leadsheets} and \pkgname{MusiXTeX}. Available glyphs and +corresponding commands are listed in Section 3 of the package +documentation. + +This is a very small example of what \pkgname{Lilyglyphs} provides: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{fontspec} +\usepackage{lilyglyphs} +\thispagestyle{empty} % no page number + +\begin{document} + +Lilyglyphs makes the music symbol font provided by LilyPond available +as text font and then uses it to define a number of symbols, some +\clefGInline\ of which \clefCInline\ can be used \clefFInline\ inline: + +clefs:~ \clefG\ \clefC\ \clefF\ ~time signatures:~ +\lilyTimeC\ \lilyTimeCHalf\ \lilyTimeSignature{7}{8}\ +~accidentals:~ \sharp\ \flat\ \natural\ \doublesharp\ \flatflat\ +~rests:~ \wholeNoteRest\ \halfNoteRest\ \crotchetRest\ +~notes:~ \wholeNote\ \halfNote\ \halfNoteDown\ \quarterNote\ +\quarterNoteDotted\ +~and much, much more. + +\end{document} +\end{verbatim} +\end{source} + +\score{lilyglyphs} + +% ----- + +\subsection{Using Music Fonts} + +The \XeLaTeX{} and Lua\LaTeX{} engines use Unicode input by default +and support OTF/TTF fonts. We can use these engines to print any +character provided by locally installed fonts; these can be listed +with the \cmd{fc-list} command, provided by the +\href{https://www.fontconfig.org/}{Fontconfig} software. + +Some fonts are especially useful for music. Specifically, +\href{https://www.smufl.org/fonts}{Bravura} is a free, +SMuFL-compliant music font that provides thousands of high-quality +music glyphs. Bravura is available in OpenType format as +\file{Bravura.otf} and \file{BravuraText.otf}; the first is used for +drawing music symbols in scores, the second for inserting music +symbols in text. + +Each glyph is mapped to a numerical code called \emph{code point}; +a comprehensive list of glyphs and the corresponding code points is +available at \url{https://www.smufl.org/version}. + +The following source shows how to use the glyphs provided by Bravura. +We can define new commands for commonly used glyphs, or directly use +the \ltx{char"XXXX} syntax to print Unicode characters specifying +their code point. The fonts are expected to be installed in +\path{/usr/share/fonts/}; if you install the fonts in a different +directory, you'll also have change the following source accordingly: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{fontspec} +\thispagestyle{empty} +\newfontfamily\brtxt{BravuraText.otf}[Path=/usr/share/fonts/] +\newfontfamily\brv{Bravura.otf}[Path=/usr/share/fonts/] + +\newcommand{\clefGi} {{\brtxt \char"E050}} +\newcommand{\clefCi} {{\brtxt \char"E05C}} +\newcommand{\clefFi} {{\brtxt \char"E062}} + +\newcommand{\clefG} {{\brv \char"E050}} +\newcommand{\clefC} {{\brv \char"E05C}} +\newcommand{\clefF} {{\brv \char"E062}} +\newcommand{\timeC} {{\brv \char"E08A}} +\newcommand{\timeCHalf} {{\brv \char"E08B}} +\renewcommand{\flat} {{\brv \char"E260}} +\renewcommand{\natural} {{\brv \char"E261}} +\renewcommand{\sharp} {{\brv \char"E262}} +\newcommand{\wholeNote} {{\brv \char"E1D2}} +\newcommand{\halfNote} {{\brv \char"E1D3}} +\newcommand{\halfNoteDown}{{\brv \char"E1D4}} +\newcommand{\quarterNote} {{\brv \char"E1D5}} + +\begin{document} + +The Bravura and BravuraText Music fonts provide thousands of music +symbols. BravuraText glyphs are specifically \clefGi\ designed +\clefFi\ to be used \clefCi\ inline: + +clefs:~ \clefG\ \clefC\ \clefF\ ~time signatures:~ +\timeC\ \timeCHalf\ ~accidentals:~ \sharp\ \flat\ \natural\ +~notes:~ \wholeNote\ \halfNote\ \halfNoteDown\ \quarterNote\ +~and much, much more. + +\end{document} +\end{verbatim} +\end{source} + +\score{bravura} + +% ----- + +\noteseparator + +% ----- + +\section{Song Lyrics} +\label{sec:songbooks} + +Several packages make it possible to typeset song lyrics, with varying +degrees of complexity. For instance, we may want to write lyrics only; +other useful features include chords above lyrics, guitar chords +diagrams, transposition, index generation, etc. + +% ----- + +\subsection{Package \pkg{guitar}} +\label{sec:pkgguitar} + +This is a very basic and simple to use package that provides a +\env{guitar} environment to add chords above lyrics. A minimal +example: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage{guitar} + +\begin{document} + +\begin{guitar} + \textbf{Imagine (John Lennon)} + + \emph{Intro, $\times$ 2} + % use tilde to add some space + [C] ~ [Cmaj7] ~ [F] ~ + % if chords overlap, add | at the end of the chord, like: + [C]Imagine there's [Cmaj7|]{no} [F]heaven + [C]It's easy if [Cmaj7|]{you} [F]try + [C]No hell [Cmaj7|]{below} [F]us + [C]Above us [Cmaj7|]{only} [F]sky +\end{guitar} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{guitar} + +% ----- + +\subsection{Package \pkg{gtrcrd}} + +This is another basic and simple to use package, with some +customisation options. Chords overlaps need manual adjustment. + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage{gtrcrd} + +\setlength{\crdheight}{2ex} % reduce spacing +\def\crdfont{\footnotesize \itshape \sffamily} % chord font +\setlength{\parindent}{0pt} + +\begin{document} + +\textbf{Imagine (John Lennon)} + +\emph{Intro, $\times$ 2} + +% if chords overlap, use \hspace: +\C {\hspace{3mm}} \C[maj7] {\hspace{10mm}} \F ~ + +\C Imagine there's \C[maj7] no {\hspace{5mm}} \F heaven + +\C It's easy if \C[maj7] you {\hspace{2mm}} \F try + +\C No hell \C[maj7] below \F us + +\C Above us \C[maj7] only {\hspace{2mm}} \F sky +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{gtrcrd} + +% ----- + +\subsection{Package \pkg{songs}} +\label{sec:pkgsongs} + +This is a very powerful package that provides many features: chords +above lyrics, guitar chords diagrams, transposition, index generation, +multiple co\-lumns, and more. It allows for the creation of complete +songbooks; its guitar chord diagrams capabilities will be explained in +Section~\ref{sec:songs_cd}. + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage[chorded]{songs} + +\begin{document} + +\renewcommand{\stitlefont}{\rm\large} +\renewcommand{\lyricfont}{\small} +\renewcommand{\printchord}{\it\small} + +\begin{songs}{} +\beginsong{Imagine}[by={John Lennon}] +\beginverse + \emph{Intro, $\times$ 2} + \[C] \[Cmaj7] \[F] + \[C]Imagine there's \[Cmaj7]no \[F]heaven + \[C]It's easy if \[Cmaj7]you \[F]try + \[C]No hell \[Cmaj7]below \[F]us + \[C]Above us \[Cmaj7]only \[F]sky +\endverse +\endsong +\end{songs} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{songs} + +% ----- + +\subsection{Package \pkg{musixguit}} + +This package is integrated with \pkg{musixtex} +(Section~\ref{sec:musixtex}), and is also capable of producing sheet +music and guitar chord diagrams. Its documentation is written in +German; if you can't read it don't worry, the provided examples are +easy to understand. Chords overlaps need manual adjustment. A minimal +example: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{musixguit} +\thispagestyle{empty} + +\begin{document} + +\textbf{Imagine (John Lennon)} + +\begin{song} + +\emph{Intro, $\times$ 2} + +\chord{C} ~ \chord{Cmaj7} {\hspace{8mm}} \chord{F} + +\chord{C}Imagine there's \chord{Cmaj7}no~~~ \chord{F}heaven + +\chord{C}It's easy if \chord{Cmaj7}you~~ \chord{F}try + +\chord{C}No hell \chord{Cmaj7}below \chord{F}us + +\chord{C}Above us \chord{Cmaj7}only~ \chord{F}sky + +\end{song} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{musixguit} + +% ----- + +\subsection{Package \pkg{leadsheets}} + +This package provides many features: music symbols, chords, MuseJazz +style, a \env{song} and a \env{verse} environment, transposition, a +\cmd{leadsheet} class, and templates. Overall, this package allows for +the creation of complete songbooks. A minimal example: + +% \medskip + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage[full]{leadsheets} +\thispagestyle{empty} + +\begin{document} + +\begin{song}{title={Imagine}, music={John Lennon}} +\begin{verse} + + \chord{C}Imagine there's \chord{Cmaj7}no \chord{F}heaven + + \chord{C}It's easy if \chord{Cmaj7}you \chord{F}try + + \chord{C}No hell \chord{Cmaj7}below \chord{F}us + + \chord{C}Above us \chord{Cmaj7}only \chord{F}sky + +\end{verse} +\end{song} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{leadsheets} + +% ----- + +\subsection{Package \pkg{songbook}} + +This is another powerful package that provides support for chords, +songs, overhead transparencies, and index generation. A minimal +example: + +% \medskip + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage[chordbk]{songbook} +\thispagestyle{empty} + +\begin{document} + +\textbf{Imagine (John Lennon)} + +% \medskip + +\emph{Intro, $\times$ 2} + +\Ch{C}~ \Ch{Cmaj7}~ \Ch{F}~ + + \Ch{C}{Imagine} there's \Ch{Cmaj7}{no} \Ch{F}heaven + + \Ch{C}{It's} easy if \Ch{Cmaj7}{you} \Ch{F}{try} + + \Ch{C}No hell \Ch{Cmaj7}{below} \Ch{F}us + + \Ch{C}{Above} us \Ch{Cmaj7}{only} \Ch{F}{sky} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{songbook} + +% ----- + +\subsection{Program: \href{https://www.vromans.org/projects/Chordii/} +{chordii}} + +Chordii is a free command-line program, released under the +\href{https://www.gnu.org/licenses/licenses.en.html}{GNU GPL}. It uses +a simple text notation to typeset songs in PostScript format, complete +with chords and guitar chord grid. + +This is the source of a song written in Chordii format: + +\begin{source} +\begin{verbatim} +{titles:left} +{title:Imagine} +{st:John Lennon} + +(Intro, x 2) +[C] [Cmaj7] [F] +[C]Imagine there's [Cmaj7]no [F]heaven +[C]It's easy if [Cmaj7]you [F]try +[C]No hell [Cmaj7]below [F]us +[C]Above us [Cmaj7]only [F]sky +\end{verbatim} +\end{source} + +% \medskip + +We typeset the score with these commands: + +\begin{screen} +$ \textbf{chordii -a imagine.cho > imagine.ps} +$ \textbf{ps2pdf imagine.ps} +$ _ +\end{screen} +% $ + +The \cmd{-a} switch means ``Automatic single space lines without +chords''. The resulting song is: + +\bigskip + +\scoreshort{chordii} + +\bigskip + +The chord grid at the bottom is automatically added by the program. + +% ----- + +\noteseparator + +% ----- + +\section{Guitar Chord Diagrams} +\label{sec:guitar} + +Guitar players may need to print \emph{guitar chords diagrams} and +\emph{guitar tablatures}; both can be made with \LaTeX{} packages and +external programs. As a matter of fact, these musical features are not +limited to the guitar; chord diagrams and tablatures apply to other +stringed instruments as well. + +Tablatures are a form of musical notation that is usually employed to +show how a \emph{melody} should be fingered on the fretboard. Since +tablatures are just a special form of music notation, we will deal +with them after the section about sheet music. For the moment, let's +see how to do guitar chord diagrams. + +% ----- + +\subsection{Package \pkg{gchords}} +\label{sec:gchords} + +This package makes it possible to print guitar chord diagrams using +the \ltx{chord} command that employs a simple syntax: + +\medskip + +\ltx{chord}{\emph{\{fret +number\}}}{\emph{\{fingering\}}}{\emph{\{chord name\}}} + +\begin{itemize} + + \item \emph{fret number} can be \texttt{\{t\}}, which means top + fret, or \texttt{\{t\}} followed by a digit that denotes the fret; + + \item \emph{fingering} is explained in the example below; + + \item \emph{chord name} is the given chord name. + +\end{itemize} + +The \ltx{chords} command prints a row of chords, each defined by a +\ltx{chord} command: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{gchords} +\thispagestyle{empty} + +\begin{document} + +\def\numfrets{4} + +\chords{ % print a row of chords +% fingers: n, x, o, p{n}, f{n} +% C chord: finger 3 pos. 3, finger 2 pos. 2, finger 1 pos. 1 +\chord{t}{n,f3p3,f2p2,n,f1p1,n}{C} +\chord{t}{n,n,p2,p2,p1,n}{Am} +\chord{t}{x,n,n,p2,p3,p1}{Dm} +\chord{t3}{n,p2,n,p1,n,n}{G7 (ugly)} +{\tiny % font size for string labels, t{X} +\chord{t}{t{E}n,t{A}n,t{D}n,t{G}n,t{B}n,t{e}n} +{std. tuning} } +} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{gchords} + +% ----- + +\subsection{Package \pkg{songs}} +\label{sec:songs_cd} + +We met this package in Section~\ref{sec:pkgsongs}. It provides an +easy way to print guitar chord diagrams (referred to as ``guitar +tablatures'' in the package). The \ltx{gtab} command defines chord +diagrams using a very simple syntax: + +\medskip + +\ltx{gtab}{\emph{\{chord name\}}} +{\emph{\{fret:strings:fingering\}}} + +\begin{itemize} + + \item \emph{chord name} is the given chord name; + + \item \emph{fret} is an optional fret number; + + \item \emph{strings} is a string of digits denoting the strings that + compose the chord; + + \item \emph{fingering} is an optional string of digits denoting the + fingers to use. + +\end{itemize} + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage[chorded]{songs} + +\begin{document} + +% \gtab{chord name}{fret:strings:fingering} +\gtab{C}{032010:032010} \gtab{Cmaj7}{032000:032000} +\gtab{F}{1:022100} + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{songs_g} + +% ----- + +\subsection{Package \pkg{guitarchordschemes}} + +This package enables the creation of large guitar chord diagrams. The +main command is \ltx{chordscheme}, and is quite self-explanatory: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{guitarchordschemes} +\thispagestyle{empty} + +\begin{document} + +\chordscheme[ +name = G (Sol), % chord name +position = 1, % first fret position +finger = {2/5:2} , % fret, string, finger +finger = {3/6:3} , % fret, string, finger +finger = {3/1:4} , % fret, string, finger +ring = {2,3,4} % open strings +] +% +\chordscheme[ +name = G (Sol) barre, +position = 3, +barre = 1/1-6, % fret, string range +finger = {2/3:2}, +finger = {3/5:3}, +finger = {3/4:4}, +] + +\end{document} +\end{verbatim} +\end{source} + +\scoreshort{gcschemes} + +% ----- + +\noteseparator + +% ----- + +\section{Sheet Music} +\label{sec:sheetmusic} + +In this section, we will learn how to produce sheet music in PDF +format for inclusion in \LaTeX{} documents. Sheet music can be +produced by \TeX{} itself, but we can use the output produced by one +of the several free and open source scorewriters. + +In the next few sections, we will briefly examine each option. Musical +notation languages will not be explained; sources are listed to give +practical examples and to assess the language complexity. + +% ----- + +\subsection{Packages \pkg{musixtex}, \pkg{m-tx}} +\label{sec:musixtex} + +In the beginning, \TeX{} could not typeset music, and everyone was +unhappy. Then the \pkg{mtex} (aka \pkgname{MuTeX}) package was +created, but it was limited and not very easy to use. Then +\pkgname{MuTeX} begat \pkgname{MusicTeX}, which begat \pkg{pmtex}; +then \pkgname{MusicTeX} begat \pkg{musixtex}, which begat \pkg{pmx}, +which begat \pkg{m-tx}. I hope I got the storyline right. Each package +was a simpler interface to its predecessors. + +In reverse order: \pkgname{M-Tx} is a preprocessor to \pkgname{PMX}, +which in turn is a preprocessor for \pkgname{MusiXTeX}, which does the +actual music typesetting via \TeX. It goes without saying that +\pkgname{M-Tx} is the simplest to use, while \pkgname{MusiXTeX} is the +most difficult to use but also the most powerful. Other packages +related to \pkgname{MusiXTeX} are the following: + +\begin{itemize} + + \item \pkg{autosp} generates note-spacing commands for + \pkgname{MusiXTeX} scores; + + \item \pkg{bagpipe} provides support for typesetting bagpipe music; + + \item \pkg{bizantinemusic} facilitates the writing of Byzantine + music; + + \item \pkg{figbas} provides mini fonts for figured bass notation; + + \item \pkg{gregoriotex} provides engraving of Gregorian Chant + (Section~\ref{sec:gregoriotex}); + + \item \pkg{lyluatex} provides commands to include LilyPond scores in + Lua\LaTeX{} documents (Section~\ref{sec:lyluatex}); + + \item \pkg{musixtnt} is an extension library that enables + transformations of the effect of notes commands; + + \item \pkg{pmxchords} produces chord information to go with pmx + output; + + \item \pkg{snote} provides shape notes for \pkgname{MusixTeX}; + + \item \pkg{texmuse} is a music typesetting system using \TeX{} + and Metafont. + +\end{itemize} + +\pkgname{MusiXTeX} is quite low-level, and the user must take care of +such details as beam slope and note spacing; several examples are +available +\href{https://ctan.org/tex-archive/macros/musixtex/doc/examples}{here}. +\pkgname{MusiXTeX} input can also be embedded in \LaTeX{} documents: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{musixtex} +\thispagestyle{empty} + +\begin{document} + +A short music excerpt in MusiX\TeX: + +\medskip + +\begin{music} + \smallmusicsize + \instrumentnumber{1} + \setstaffs1{1} + \generalmeter{\meterC} + \nobarnumbers + \startextract + % bar 1 + \Notes \qu c \en % C + \notes \ibu1d2\qb1d\tbu1\qb1e \en % beamed DE + \notes \ibu1g2\qb1f\qb1g% + \qb1{'a}\tbu1\qb1b \en % beamed FGAB + \bar % bar 2 + \Notes \ql{'c} \en % c + \notes \ibu1{'b}{-3}% + \qb1b\tbu1\qb1a \en % beamed BA + \notes \ibu1{g}{-3}% + \qb1g\qb1f\qb1e\tbu1\qb1d \en % beamed GFED + \bar % bar 3 + \notes \ibu1f0\qb1c\qb1g\qb1e\tbu1\qb1g% % beamed CGEG + \ibu1f0\qb1c\qb1g\qb1e\tbu1\qb1g \en % beamed CGEG + \bar % bar 4 + \Notes \qu c\qu e\qu c\qp \en % CEC + \endextract + +\end{music} + +End of the excerpt. +\end{document} +\end{verbatim} +\end{source} + +\score{sample-musixtex} + +\bigskip + +It looks a bit arcane, and I'll point you to the +\href{http://mirrors.ctan.org/macros/musixtex/doc/musixdoc.pdf} +{documentation} for explanations. + +\pkgname{M-Tx} employs a much simpler notation than +\pkgname{MusiXTeX}. This is a standalone music sample +(\file{sample-mtx.mtx}) that produces the same music as the above +\pkgname{MusiXTeX} score: + +\begin{source} +\begin{verbatim} +% music sample in M-Tx notation + +Title: Music sample in M-tx +Style: Solo +Meter: C +Width: 140mm + +c4 d8 e f g a b | c4 b8 a g f e d | c8 g+ e g c- g+ e g | c4- e c r | +\end{verbatim} +\end{source} + +We typeset the score with this command: + +\begin{screen} +$ \textbf{musixtex sample-mtx.mtx} +This is musixtex.lua version 0.17a. +==> This is M-Tx 0.62 (Music from TeXt) <08 February 2016> +==>> Input from file sample-mtx.mtx +... +sample-mtx.pdf generated by ps2pdf. +$ _ +\end{screen} +% $ + +which produces \file{sample-mtx.pdf}. In older versions of +\pkgname{M-Tx}, the command was \cmd{m-tx}, which has been retired and +replaced by \cmd{musixtex}. This is the resulting score: + +\bigskip + +\score{sample-mtx} + +\bigskip + +Music in \pkgname{M-Tx} format can be easily included in \LaTeX{} +documents. \pkgname{M-Tx} provides the \env{Score}, \env{excerpts}, +and \env{mus} environments to include complete pieces, short excerpts, +and inline short excerpts respectively. Let's see how to use +\cmd{excerpts} and \cmd{mus}; a few steps are required. + +First of all, the \LaTeX{} source that includes the \pkgname{M-Tx} +music files must not have a \file{.tex} extension; \file{.ltx} or +\file{.latex} are ok. Let's call our sample file +\file{sample-latexmtx.ltx}. + +Secondly, we need the \file{mtxlatex.sty} style file, which is not +installed by default but is found in the \pkgname{M-Tx} documentation +directory. In TeX Live, \file{mtxlatex.sty} is located in directory +\path{/usr/share/doc/texlive-doc/generic/m-tx}. This file must be +copied to the same directory as the source file; all included +\pkgname{M-Tx} files must be copied there too. + +We already met \file{sample-mtx.mtx}; the following is another short +excerpt called \file{scale.mtx}. It produces a 30mm wide scale: + +\begin{source} +\begin{verbatim} +Style: Solo +Meter: C +Size: 13pt +Width: 30mm + +c8 d e f g2 | +\end{verbatim} +\end{source} + +Finally, this is the main file \file{sample-latexmtx.ltx}: + +\begin{source} +\begin{verbatim} +\documentclass[12pt]{article} +\usepackage{mtxlatex} % usually not installed +\thispagestyle{empty} + +\mtxlatex + +\begin{document} + +This \LaTeX{} document includes music written in M-Tx. The \texttt{mus} +environment includes music inline: \begin{mus} \input{scale.tex} +\end{mus} , while the \texttt{excerpts} environment is used for longer +excerpts: + +\medskip + +\begin{excerpts} + \input{sample-mtx.tex} +\end{excerpts} + +\medskip + +End of document. + +\end{document} +\end{verbatim} +\end{source} + +We typeset the document with this command: + +\begin{screen} +$ \textbf{musixtex sample-mtx scale sample-latexmtx.ltx} +... +sample-latexmtx.pdf generated by ps2pdf. +$ _ +\end{screen} +% $ + +Please note that we omitted the \pkgname{M-Tx} file extensions, and +that the main file is the last in the command line. We obtain this +output: + +\bigskip + +\score{sample-latexmtx} + +\bigskip + +Please also note that the \pkgname{M-Tx} excerpts cannot be resized as +if they were included PDF files: their geometry is set in the +\pkgname{M-Tx} source! + +% ----- + +\subsection{Package \pkg{gregoriotex}} +\label{sec:gregoriotex} + +This package typesets Gregorian chant. Input is in GABC format, a +simple text notation inspired by the +\href{http://abcnotation.com/}{ABC notation} that we'll examine later +on. Conversion requires Lua\LaTeX. + +This is a sample GABC source, \file{kyrie.gabc}, taken from the +package documentation: + +\begin{source} +\begin{alltt} +name:Kyrie XVII; +%% +(c4)KY(f)ri(gfg)e(h.) *() +e(ixjvIH'GhvF'E)l\'e(ghg')i(g)son.(f.) +<i>bis</i>(::) +\end{alltt} +\end{source} + +We also need a \LaTeX{} source, \file{kyrie.tex}: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage[autocompile]{gregoriotex} + +\begin{document} + +\gregorioscore{kyrie} + +\end{document} +\end{verbatim} +\end{source} + +We typeset the score with this command: + +\begin{screen} +$ \textbf{lualatex kyrie.tex} +... +Output written on kyrie.pdf (1 page, 11290 bytes). +Transcript written on kyrie.log. +$ _ +\end{screen} +% $ + +\scoreshort{kyrie} + +% ----- + +\subsection{Program: \href{http://lilypond.org/}{LilyPond}} +\label{sec:lilypond} + +LilyPond is a free and multiplatform scorewriter, released under the +GNU GPL. From the LilyPond home page: + +\begin{quote} + +LilyPond is a music engraving program, devoted to producing the +highest-quality sheet music possible. It brings the aesthetics of +traditionally engraved music to computer printouts. LilyPond is free +software and part of the \href{http://gnu.org/}{GNU Project}. + +\end{quote} + +LilyPond uses a simple text notation for music input; output is PDF by +default. This is our usual music sample in LilyPond format, +\file{sample-lily\-pond.ly}: + +\begin{source} +\begin{verbatim} +% music sample in LilyPond notation + +\version "2.18.2" + +\paper{ + indent = 0 \mm +} + +\header { + title = "Music sample in LilyPond" + tagline = "" % no footer +} + +\relative c' { + \time 4/4 + \clef treble + c4 d8 e f8 g a b | c4 b8 a g8 f e d | + c8 g' e g c,8 g' e g | c,4 e c r \bar "|." +} +\end{verbatim} +\end{source} + +We typeset the document with this command: + +\begin{screen} +$ \textbf{lilypond sample-lilypond.ly} +GNU LilyPond 2.18.2 +Processing `sample-lilypond.ly' +Parsing... +Interpreting music... +Preprocessing graphical objects... +Finding the ideal number of pages... +Fitting music on 1 page... +Drawing systems... +Layout output to `sample-lilypond.ps'... +Converting to `./sample-lilypond.pdf'... +Success: compilation successfully completed +$ _ +\end{screen} +% $ + +\bigskip + +LilyPond is capable of typesetting many different kinds of music, and +it is among the most complete and powerful scorewriters available. If +you want to find out more, the documentation page is +\href{http://lilypond.org/manuals.html}{here}. + +% ----- + +\subsubsection{\cmd{lilypond-book}} + +LilyPond also provides the \cmd{lilypond-book} command that can be +used to easily embed LilyPond sources in special \LaTeX{} documents. +These should have a \cmd{.lytex} extension, like the following source +(\cmd{sample-lilybook.lytex}): + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} + +\begin{document} + +This is a LilyPond snippet \begin{lilypond} {c' e' g'} +\end{lilypond} embedded in the \LaTeX{} source. + +This is another LilyPond excerpt that uses the \texttt{lilypond} +environment: + +\medskip + +\begin{lilypond} + \score { + << + \relative c' { + \time 4/4 + \clef treble + c4 d8 e f8 g a b | c4 b8 a g8 f e d | + c8 g' e g c,8 g' e g | c,4 e c r \bar "|." + } + >> + } % end of score +\end{lilypond} + +\medskip + +End of document. + +\end{document} + +\end{verbatim} +\end{source} + +We typeset the score with these commands: + +\begin{screen} +$ \textbf{lilypond-book -f latex -o /tmp \textbackslash + --lily-output-dir=/tmp sample-lilybook.lytex} +lilypond-book (GNU LilyPond) 2.18.2 +... +Writing `/tmp/sample-lilybook.tex'... +$ \textbf{cd /tmp} +$ \textbf{pdflatex sample-lilybook.tex} +... +Output written on sample-lilybook.pdf (1 page, 60934 bytes). +Transcript written on sample-lilybook.log. +$ _ +\end{screen} +% $ + +\bigskip + +\score{sample-lilybook} + +% ----- + +\subsubsection{Package \pkg{lyluatex}} +\label{sec:lyluatex} + +This package may be missing in less recent releases of TeX Live, so +you might have to install it manually. \pkgname{Lyluatex} provides a +native Lua\LaTeX{} environment that offers the same functionality as +\cmd{lilypond-book}, even though the output is different. This source +is \file{sample-lyluatex.tex}: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{lyluatex} +\thispagestyle{empty} + +\begin{document} + +This is a LilyPond snippet \lilypond{c' e' g'} embedded in the text +using the \verb|\lilypond| command. + +This is another LilyPond excerpt that uses the \texttt{lilypond} +environment: + +\medskip + +\begin{lilypond} + \score { + << + \relative c' { + \time 4/4 + \clef treble + c4 d8 e f8 g a b | c4 b8 a g8 f e d | + c8 g' e g c,8 g' e g | c,4 e c r \bar "|." + } + >> + } % end of score +\end{lilypond} + +\medskip + +End of document. + +\end{document} +\end{verbatim} +\end{source} + +We typeset the score with this command: + +\begin{screen} +$ \textbf{lualatex --shell-escape sample-lyluatex.tex} +... +Output written on sample-lyluatex.pdf (1 page, 22334 bytes). + Transcript written on sample-lyluatex.log. +$ _ +\end{screen} +% $ + +\score{sample-lyluatex} + +% ----- + +\subsection{Program: \href{http://moinejf.free.fr}{abcm2ps}} + +\cmd{abcm2ps} is a free and multiplatform scorewriter, released under +the GNU GPL. + +This program is currently one of the best implementations of the +\href{http://abcnotation.com/}{ABC notation}, which describes itself +as: + +\begin{quote} + + \emph{the} text-based music notation system and the \emph{de + facto} standard for folk and traditional music. + +\end{quote} + +In fact, this notation is specifically designed to meet the needs of +traditional musicians; hundred of thousands (really!) of tunes in ABC +formats are available. ABC is a simple text notation, originally +designed for single-voice music but currently capable of producing +complex polyphonic scores. + +This is our usual music sample in ABC notation: + +\begin{source} +\begin{verbatim} +% music sample in ABC notation + +X: 1 +T: Music sample in ABC +M: C +L: 1/4 +K: C +% +C D/E/ F/G/A/B/|c B/A/ G/F/E/D/|C/G/E/G/ C/G/E/G/|CECz|] +\end{verbatim} +\end{source} + +We typeset the score with these commands: + +\begin{screen} +$ \textbf{abcm2ps -c -O= sample-abc.abc} +abcm2ps-8.14.1 (2018-11-15) +File sample-abc.abc +Output written on sample-abc.ps (1 page, 1 title, 20503 bytes) +$ \textbf{ps2pdf sample-abc.ps} +$ _ +\end{screen} +% $ + +% ----- + +\subsection{Program: \href{http://moinejf.free.fr}{abc2svg}} + +\cmd{abc2svg} is a free and multiplatform scorewriter, released under +the GNU GPL. It's basically \cmd{abcm2ps} rewritten in JavaScript. + +Although \cmd{abc2svg} can be integrated in a +\href{http://moinejf.free.fr/js/edit-1.xhtml}{web-based editor}, it's +a command-line program. It reads an ABC source file and turns it to +\file{xhtml}: + +\begin{screen} +$ \textbf{abc2svg file.abc > file.xhtml} +$ _ +\end{screen} + +The resulting \file{.xhtml} can then be loaded into any web browser +and printed to PDF. \href{https://www.google.com/chrome}{Google +Chrome} or \href{https://www.chromium.org/Home}{Chromium} are the +recommended browsers. + +We can run the whole procedure non-interactively, entirely in the +command line. This only works in GNU/Linux and macOS: + +\begin{screen} +$ \textbf{abc2svg tunes.abc > tunes.xhtml} +$ \textbf{chromium-browser --headless --print-to-pdf=tunes.pdf tunes.xhtml} +... many log messages ... +... Written to file tunes.pdf. +$ _ +\end{screen} + +% $ +However, in this case Chromium will add headers and footers to every +page. To remove them and obtain a clean PDF file, run the command: + +\begin{screen} +$ \textbf{pdfcrop --margins "0 -9 0 -9" --clip tunes.pdf} +PDFCROP 1.38, 2012/11/02 - Copyright (c) 2002-2012 by Heiko Oberdiek. +==> 79 pages written on `tunes-crop.pdf'. +$ _ +\end{screen} + +The same result can be obtained using \pkg{pdfpages} directly: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{pdfpages} + +\def\tunes{tunes.pdf} % PDF file to trim + +\begin{document} + +\includepdf[pages=-,pagecommand={},% +width=\paperwidth,trim={0 0.9cm 0 0.9cm},clip]{\tunes} + +\end{document} +\end{verbatim} +\end{source} + +% ----- + +\subsection{Program: \href{http://people.ds.cam.ac.uk/ph10/pmw.html}{PMW}} + +Philip's Music Writer (PMW) is a free and multiplatform scorewriter, +released under the GNU GPL. From the PMW home page: + +\begin{quote} + + \emph{Philip's Music Writer} (PMW) is a computer program for high + quality music typesetting. + +\end{quote} + +PMW uses a simple text notation for music input and produces output in +PostScript. + +This is our usual music sample in PMW format: + +\begin{source} +\begin{verbatim} +@ music sample in PMW + +Heading "|Music sample in PMW" +Key C +Time 4/4 + +[stave 1 treble 1] +c d- e-; f-g-a-b-; | c' b- a-; g-f-e-d-; | +c-g-e-g-; c-g-e-g-; |c e c r | +[endstave] +\end{verbatim} +\end{source} + +We typeset the score with these commands: + +\begin{screen} +$ \textbf{pmw -includefonts sample-pmw.pmw} +$ \textbf{ps2pdf sample-pmw.ps} +$ _ +\end{screen} +% $ + +% ----- + +\subsection{Program: \href{http://www.arkkra.com/}{MUP}} + +MUP is a free and multiplatform scorewriter, released under the GNU +GPL. From the MUP home page: + +\begin{quote} + + Mup takes a text file as input and produces very high quality + PostScript output for printed music. It can handle both regular + notation and tablature notation. It can also produce MIDI output. + +\end{quote} + +This is our usual music sample in MUP format: + +\begin{source} +\begin{verbatim} +// music sample in MUP notation + +header + title "Music sample in MUP" + +score + time=4/4 + +music + 1: 4c; 8d bm; e ebm; f bm; g; a; b ebm; + bar + 1: 4c+; 8b bm; a ebm; g bm; f; e; d ebm; + bar + 1: 8c bm; g; e; g ebm; c bm; g; e; g ebm; + bar + 1: 4c; e; c; r; + endbar +\end{verbatim} +\end{source} + +We typeset the score with these commands: + +\begin{screen} +$ \textbf{mup -F sample-mup.mup} +Mup - Music Publisher Version 6.6 +Copyright (c) 1995-2017 by Arkkra Enterprises. +Mup is free software. Use -l option to see license terms. +$ \textbf{ps2pdf sample-mup.ps} +$ _ +\end{screen} +% $ + +% ----- + +\subsection{Program: \href{http://musescore.org}{MuseScore}} +\label{sec:musescore} + +MuseScore is a free and multiplatform scorewriter, released under the +GNU GPL. Unlike the previous programs, it's a desktop application; +however, it can be conveniently used from the command line. + +MuseScore uses its own file formats (\file{.mscz}, \file{.mscx}) but +it can also import several other file formats; +\href{https://www.musicxml.com/}{MusicXML} is probably the most +important. + +We convert any supported file to PDF with this command: + +\begin{screen} +$ \textbf{musescore file.xml -o file.pdf} +initScoreFonts 0x30d33c0 +convert <file.xml> to <file.pdf> +setFirstInstrument: no instrument found for part 'P1' +$ _ +\end{screen} +% $ + +% ----- + +\subsection{Package \pkg{abc}} +\label{sec:pkgabc} + +This package enables the inclusion of music in ABC notation in +\LaTeX{} sources; it's similar to \cmd{lilypond-book} or +\pkg{lyluatex}, but targeting ABC. + +\pkgname{Abc} provides the \env{abc} environment and the +\ltx{abcinput} commands. The first embeds ABC music in the source, +while the second includes an external ABC file: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage[generate,ps2eps]{abc} +\thispagestyle{empty} + +\begin{document} + +This is an Irish reel: + +\begin{abc}[name=julia,program={abcm2ps -O=}] +X:63 +T: Julia Delaney's +M: C| +L: 1/8 +R: reel +K: Ddor +|: dcAG ~F2EF|~E2 DE FD D2|dcAG FGAA|Addc d2 fe :| + f2fe fagf |ecgc acgc |f2fe fagf|edcG Add2 :| +\end{abc} + +This is an Irish polka, slighly smaller: + +\abcinput[program={abcm2ps -O=},width=0.9\abcwidth] +{breeches} + +End of document. + +\end{document} +\end{verbatim} +\end{source} + +The \cmd{generate} option (default) indicates that the ABC music +should be generated by the external ABC typesetter. If the ABC music +is not modified and it has already been generated, we could specify +the \cmd{nogenerate} option. This is what we want to do when only the +text is changed. + +We typeset the source with this command: + +\begin{screen} +$ \textbf{pdflatex --shell-escape sample-abc.tex} +... +Output written on sample-abc.pdf (1 page, 30937 bytes). +Transcript written on sample-abc.log. +$ _ +\end{screen} + +\score{sample-abc} + +% ----- + +\noteseparator + +% ----- + +\section{Guitar Tablatures} +\label{sec:tablatures} + +Let's go back to guitar stuff. Tablature, as already explained, is a +form of musical notation for stringed instruments; making tablatures +is basically the same process as making sheet music. + +% ----- + +\subsection{Program: \href{http://lilypond.org/}{LilyPond}} +\label{sec:lilytab} + +In addition to sheet music, LilyPond can also easily typeset guitar +tablatures. A minimal example (\file{lilytab.ly}): + +\begin{source} +\begin{verbatim} +\version "2.18.2" +\header { tagline = "" } % no footer +\paper { left-margin = 0\cm } + +music = { + \time 3/4 + c4 d e f g a b a b c'2 r4 +} + +\score { + << + \new Staff { \clef "G_8" \music } % sheet music + \new TabStaff { \music } % tablature + >> +} +\end{verbatim} +\end{source} + +We typeset the score with this command: + +\begin{screen} +$ \textbf{lilypond lilytab.ly} +... +Converting to `./lilytab.pdf'... +Success: compilation successfully completed +$ _ +\end{screen} +% $ + +\scoreshort{lilytab} + +\bigskip + +As you can see, the very same music line can be typeset as sheet music +and as guitar tablature. Fretboard positions are automatically +generated by LilyPond. + +% ----- + +\subsection{Program: \href{https://wim.vree.org/svgParse/abc2xml.html} +{abc2xml.py}} +\label{sec:abc2xml} + +This Python program converts an ABC file to a +\href{https://www.musicxml.com/}{MusicXML} file containing tablature +information; this file can then be typeset with any MusicXML-enabled +application, like MuseScore. + +A minimal tablature example (\file{abctab.abc}): + +\begin{source} +\begin{verbatim} +X: 1 +M: 3/4 +L: 1/4 +K: C +% +V:1 +CDE | FGA | BBB | c2z |] +V:2 clef=tab octave=-1 +CDE | FGA | BBB | c2z |] +\end{verbatim} +\end{source} + +We typeset the score with these commands (error messages can be safely +ignored): + +\begin{screen} +$ \textbf{abc2xml.py -f abctab.abc > abctab.xml} +-- decoded from utf-8 +-- skipped header: (field X,1) +-- done in 0.02 secs +$ \textbf{musescore abctab.xml -o abctab.pdf} +Jack appears to be installed on this system, so we'll use it. +initScoreFonts 0x25ba100 +libpng warning: iCCP: known incorrect sRGB profile +convert <abctab.xml> to <abctab.pdf> +Error at line 18 col 16: no instrument found for part 'P1' +Error at line 138 col 16: no instrument found for part 'P2' +$ _ +\end{screen} +% $ + +\score{abctab} + +\bigskip + +As you can see, the very same music line can be typeset as sheet music +and as guitar tablature. Fretboard positions are automatically +generated by \cmd{abc2xml.py}. + +We can also use \cmd{lilypond} to typeset the ABC tablature. The +ancillary program \cmd{musicxml2ly} converts MusicXML files to +LilyPond format: + +\begin{screen} +$ \textbf{abc2xml.py -f abctab.abc > abctab.xml} +-- decoded from utf-8 +-- skipped header: (field X,1) +-- done in 0.02 secs +$ \textbf{musicxml2ly abctab.xml} +$ musicxml2ly: Reading MusicXML from abctab.xml ... +musicxml2ly: Converting to LilyPond expressions... +musicxml2ly: Converting to LilyPond expressions... +musicxml2ly: Output to `abctab.ly' +$ \textbf{lilypond abctab.ly} +GNU LilyPond 2.18.2 +Processing `abctab.ly' +... +Converting to `./abctab.pdf'... +Success: compilation successfully completed +$ _ +\end{screen} +% $ + +Regrettably, \cmd{musicxml2ly} is not as robust as MuseScore's +MusicXML import filter, and it may fail on complex music. + +% ----- + +\subsection{Package \pkg{guitartabs}} + +This package may be missing in less recent releases of TeX Live, so +you might have to install it manually. It provides a \cmd{guitartabs} +document class and a very simple syntax to denote strings, fret +positions, and note length: + +\begin{source} +\begin{verbatim} +\documentclass{guitartabs} +\thispagestyle{empty} + +\begin{document} + +\Large + +\begin{tabline}{4}{4}{4}{E,A,D,G,B,e} + % bar 1 + % note 1 of 3, string 5, fret 4, note length 1/4 + \notel{1}{3}{5}{3}{4} + % note 2 of 3, string 4, fret 0, note length 1/4 + \notel{2}{3}{4}{0}{4} + \notel{3}{3}{4}{2}{4} + % bar 2 + \nextbar + \notel{1}{3}{4}{3}{4} + \notel{2}{3}{3}{0}{4} + \notel{3}{3}{3}{2}{4} + % bar 3 + \nextbar + \notel{1}{3}{2}{0}{4} + \notel{2}{3}{3}{2}{4} + \notel{3}{3}{2}{0}{4} + % bar 4 + \nextbar + \notel{1}{3}{5}{3}{2} + % rests + \restquarter{2}{3} + \restquarter{3}{3} +\end{tabline} + +\end{document} +\end{verbatim} +\end{source} + +\score{guitartabs} + +If you don't need the note length indications at the bottom of the +tablature, use \ltx{note} instead of \ltx{notel}. + +% ----- + +% \subsection{Package \href{https://github.com/huljar/musixtab}{musixtab}} + +% TO BE WRITTEN + +% ----- + +\subsection{Using Guitar Pro Tablatures} + +A \emph{de facto} standard for guitar tablatures is the +\href{https://www.guitar-pro.com}{Guitar Pro} format, or more +precisely a set file formats: \file{.gpX} (where X is 3, 4, 5, 6), +\file{.gpx}, \file{.gtp}. Many sites offer free tablatures in one of +these formats. + +To print them, we can use +\href{http://www.tuxguitar.com.ar/}{TuxGuitar} or MuseScore. TuxGuitar +is a free and multiplatform tablature editor; it's a desktop +application that can export tablatures in PDF format. Regrettably, it +cannot work as a command-line program. + +To import GuitarPro tablatures into MuseScore and export them as PDF, +we can use the \cmd{-P} command line switch. It exports all parts to +the PDF file; then it's up to the user to find out the pages that +contain the tablature. + +% ----- + +\noteseparator + +% ----- + +\section{Putting It All Together} + +We have solved the first problem; now we know how to make music files +in several different ways. Now it's time to solve the second problem: +how to combine music files and \LaTeX. + +% ----- + +\subsection{Package \pkg{abc}, Revisited} + +We met this package in Section~\ref{sec:pkgabc}, where it was used to +include ABC music in a \LaTeX{} source. This package, however, is not +limited to ABC. User-defined environments can provide support for +virtually any external scorewriter; LilyPond support, however, is +slightly bugged. + +The following source defines the \env{mtx} and \env{pmw} environments. +For each, the definition specifies the external program to run, its +command line switches, and the file extension: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\thispagestyle{empty} +\usepackage[generate,ps2eps]{abc} + +% --- M-Tx support +\newenvironment{mtx}[1][] +{\renewcommand{\normalabcoutputfile}{out-mtx}% +\abc[program=musixtex,options={-g},extension=mtx,#1]} +{\endabc} +\newcommand{\mtxinput}[2][]{% +\abcinput[program=musixtex,options={-g},extension=mtx,#1]{#2}} + +% --- PMW support +\newenvironment{pmw}[1][] +{\renewcommand{\normalabcoutputfile}{out-pmw}% +\abc[program=pmw,options={-includefont},extension=pmw,#1]} +{\endabc} +\newcommand{\pmwinput}[2][]{% +\abcinput[program=pmw,options={-includefont},extension=pmw,#1]{#2}} + +\begin{document} + +This document includes music excerpts written in different formats. It +uses \texttt{abc.sty} and defines new environments. + +This is a short piece, typeset by M-Tx: + +\mtxinput{sample-mtx} + +The same piece, typeset by PMW: + +\pmwinput{sample-pmw} + +End of document. + +\end{document} +\end{verbatim} +\end{source} + +\score{sample-all} + +\bigskip + +A complete template that implements all environments is presented in +Section~\ref{sec:abcall}. + +% ----- + + +% ----- + +\subsection{Using \cmd{make}} + +Another way to make a \LaTeX{} document that includes music in +different formats is by using a developer's tool called \cmd{make}. +It's a program that takes care of what needs what, what needs to be +converted first, what should be done if you modify something, and so +on. \cmd{make} is normally used to compile programs. + +Let's make a practical example. We have a \LaTeX{} document, +\file{main.tex}, which includes three PDF files, \file{music1.pdf}, +\file{music2.pdf}, and \file{music3.pdf}: + +\begin{source} +\begin{verbatim} +\documentclass{article} +\usepackage{graphicx} +\thispagestyle{empty} + +\begin{document} + +This document includes three music excerpts: + +\includegraphics{music1} + +\includegraphics{music2} + +\includegraphics{music3} + +End of document. + +\end{document} +\end{verbatim} +\end{source} + +Let's suppose that the three PDF files are obtained from an +\pkgname{M-Tx} file, a LilyPond file, and an ABC file. We should +convert the PDF files manually, then typeset \file{main.tex}. It's not +a big deal, but what if you have dozens of music files, each of which +must be converted with different commands? This task would soon grow +tedious and difficult to manage. + +Here \cmd{make} comes to the rescue. It uses a text file, called +\file{Makefile}, which contains rules for building the document and +the PDF files that it includes. This is a simple \file{Makefile} that +can be used to compose (make!) \file{main.pdf}: + +\begin{source} +\begin{verbatim} +# Makefile for main.tex + +FIGURES = music1.pdf music2.pdf music3.pdf + +# The final document depends on main.tex and the figures +main.pdf: main.tex $(FIGURES) + pdflatex main.tex + +# music1.pdf depends on music1.mtx +# conversion commands follow +music1.pdf: music1.mtx + musixtex music1.mtx ; pdfcrop musix1.pdf ; \ + /bin/mv musix1-crop.pdf music1.pdf + +# music2.pdf depends on music2.ly +music2.pdf: music2.ly + lilypond music2.ly; pdfcrop musix2.pdf ; \ + /bin/mv musix2-crop.pdf music2.pdf + +# music3.pdf depends on music3.abc +music3.pdf: music3.abc + abcm2ps -c -O= music3.abc; ps2pdf music3.ps; \ + pdfcrop musix3.pdf ; \ + /bin/mv musix3-crop.pdf music3.pdf + +# end of Makefile +\end{verbatim} +\end{source} + +% $ + +Let's see what it does. First of all, as you might have guessed the +\cmd{\#} character starts a comment; the rest of the line is ignored. + +The line: + +\begin{verbatim} +FIGURES = music1.pdf music2.pdf music3.pdf +\end{verbatim} + +creates a \emph{variable}, that is a ``name'' (\cmd{FIGURES}) that +``contains'' the three file names \cmd{music1.pdf music2.pdf +music3.pdf}. This variable will be referred to later on. + +The lines: + +\begin{verbatim} +main.pdf: main.tex $(FIGURES) + pdflatex main.tex +\end{verbatim} +% $ + +declare that \cmd{main.pdf} is a \emph{target} that depends on +\file{main.tex} and on the three files denoted by the \cmd{FIGURES} +variable. The second line specifies the command that must be run to +make \file{main.pdf}. This line starts with a TAB character, not with +spaces: this is important! + +Then we have three sections, one for each music file. Each section +tells \cmd{make} what to do to compose the PDF figure. For instance, +the section: + +\begin{verbatim} +music1.pdf: music1.mtx + musixtex music1.mtx ; pdfcrop musix1.pdf ; \ + /bin/mv musix1-crop.pdf music1.pdf +\end{verbatim} + +states that \file{music1.pdf} is a target that depends on +\file{music1.mtx}; the following lines specify the commands to create +\file{music1.pdf}. Commands are separated by the \cmd{;} character, +while \cmd{\textbackslash} indicates that the command continues to the +next line. + +To make \file{main.pdf}, we simply run the command: + +\begin{screen} +$ \textbf{make} +... +$ _ +\end{screen} + +in the same directory where we saved \file{Makefile}. \cmd{make} will +make the three figures first, then \file{main.pdf} that depends on +them. + +If we modify one of the files, \cmd{make} will take care of +dependencies and rebuild the final target. For example, if we modify +\file{music2.ly}, \cmd{make} will rebuild \file{music2.pdf} first, then +\file{main.pdf} that depends on \file{music2.pdf}. + +In my opinion, this approach is the most flexible. This guide was +compiled using \cmd{make} and a pretty long \file{Makefile}. + +% ----- + +\noteseparator + +% ----- + +\section{The End} + +That's it, dear fellow musicians: I really hope that this guide will +be useful to you. Please help me improve this document: for any +suggestions, comments, or contributions, please feel free to contact +me by \href{mailto:guido.gonzato@gmail.com}{email}. I'd like to +receive feedback, especially if you use this document in education. + +This document is copyleft \copyleft{} Guido Gonzato, PhD, and released +under the \href{https://www.gnu.org/licenses/fdl.html}{GNU Free +Documentation Licence}. + +% ----- + +\noteseparator + +% ----- + +\newpage + +\appendix + +\section{List of Packages and Programs} + +This manual uses many \LaTeX{} packages and includes PDF output +produced by several programs, all of which are free and open source. +Commercial programs were intentionally left out. + +The page \url{https://www.ctan.org/topic/music} is an important +starting po\-int for those interested in combining \LaTeX{} and music. +It's a list of \LaTeX{} packages for typesetting music and related +stuff. The following is the complete list of packages and programs I +used to make this manual, in order of appearance. + +\begin{itemize} + + \item CTAN Music page. ``This topic contains packages for + typesetting music and related stuff.''\\ + \url{https://www.ctan.org/topic/music}. + + \item Package: musicography.\\ + \url{https://ctan.org/pkg/musicography} + + \item Package: leadsheets.\\ + \url{https://ctan.org/pkg/leadsheets} + + \item Package: lilyglyphs.\\ + \url{https://ctan.org/pkg/lilyglyphs} + + \item Font: Bravura.\\ + \url{https://www.smufl.org/fonts} + + \item Package: guitar.\\ + \url{https://ctan.org/pkg/guitar} + + \item Package: gtrcrd.\\ + \url{https://ctan.org/pkg/gtrcrd} + + \item Package: songs.\\ + \url{https://ctan.org/pkg/songs} + + \item Package: musixguit.\\ + \url{https://ctan.org/pkg/musixguit} + + \item Package: songbook.\\ + \url{https://ctan.org/pkg/songbook} + + \item Program: Chordii.\\ + \url{https://www.vromans.org/projects/Chordii} + + \item Package: gchords.\\ + \url{https://ctan.org/pkg/gchords} + + \item Package: guitarchordschemes.\\ + \url{https://ctan.org/pkg/guitarchordschemes} + + \item Package: guitartabs.\\ + \url{https://ctan.org/pkg/guitartabs} + + \item Page: MusiXTeX and Related Software. \\ + \url{https://icking-music-archive.org/software/htdocs/htdocs.html} + + \item Package: MusiXTeX.\\ + \url{https://ctan.org/pkg/musixtex} + + \item Package: M-Tx.\\ + \url{https://ctan.org/pkg/m-tx} + + \item Package: Gregoriotex.\\ + \url{https://ctan.org/pkg/gregoriotex}\\ + \url{http://gregorio-project.github.io/gregoriotex}\\ + \url{http://gregorio-project.github.io} + + \item Program: LilyPond.\\ + \url{http://lilypond.org} + + \item Package: Lyluatex.\\ + \url{https://ctan.org/pkg/lyluatex} + + \item Programs: \cmd{abcm2ps}, \cmd{and2svg}.\\ + \url{http://moinejf.free.fr} + + \item Program: PMW, Philip's Music Writer.\\ + \url{http://people.ds.cam.ac.uk/ph10/pmw.html} + + \item Program: MUP.\\ + \url{http://www.arkkra.com} + + \item Program: MuseScore.\\ + \url{http://musescore.org} + + \item Package: Abc.\\ + \url{https://ctan.org/pkg/abc} + + \item Program: abc2xml.ly.\\ + \url{https://wim.vree.org/svgParse/abc2xml.html} + +\end{itemize} + +% ----- + +\newpage + +\section{Examples} + +\subsection{A Complete \pkg{abc} Example} +\label{sec:abcall} + +This source defines environments for M-Tx, PMW, LilyPond, and MUP; it +also redefines the \cmd{abc} environment as \cmd{ABC}. This is +necessary for technical reasons. Lilypond sources must begin with a +double line \ltx{version "2.18.2"}; this is required to avoid a bug. + +\begin{source} +\begin{verbatim} +% typeset with: +% pdflatex -shell-escape sample-abc-all.tex + +\documentclass{article} +\thispagestyle{empty} +\usepackage[generate,ps2eps]{abc} + +% --- M-Tx support +\newenvironment{mtx}[1][] +{\renewcommand{\normalabcoutputfile}{out-mtx}% +\abc[program=musixtex,options={-g},extension=mtx,#1]} +{\endabc} +\newcommand{\mtxinput}[2][]{% +\abcinput[program=musixtex,options={-g},extension=mtx,#1]{#2}} + +% --- PMW support +\newenvironment{pmw}[1][] +{\renewcommand{\normalabcoutputfile}{out-pmw}% +\abc[program=pmw,options={-includefont},extension=pmw,#1]} +{\endabc} +\newcommand{\pmwinput}[2][]{% +\abcinput[program=pmw,options={-includefont},extension=pmw,#1]{#2}} + +% --- LilyPond support +% !!! BUG: the LilyPond source must begin with a \null command +\newenvironment{lily}[1][] +{\renewcommand{\normalabcoutputfile}{out-lily}% +\abc[program=lilypond,options={-d backend=eps},extension=ly,#1]} +{\endabc} +\newcommand{\lilyinput}[2][]{% +\abcinput[program=lilypond,options={--ps},extension=ly,#1]{#2}} + +% --- MUP support +\newenvironment{mup}[1][] +{\renewcommand{\normalabcoutputfile}{out-mup}% +\abc[program=mup,options={-F},extension=mup,#1]} +{\endabc} +\newcommand{\mupinput}[2][]{% +\abcinput[program=mup,options={-F},extension=mup,#1]{#2}} + +% --- ABC must be redefined +\newenvironment{ABC}[1][] +{\renewcommand{\normalabcoutputfile}{out-ABC}% +\abc[program=abcm2ps,options={-O=},extension=abc,#1]} +{\endabc} +\newcommand{\ABCinput}[2][]{% +\abcinput[program=abcm2ps,options={-O=},extension=abc,#1]{#2}} + +\begin{document} + +This document includes music excerpts written in several formats. It +uses \texttt{abc.sty} and defines new environments. + +This is a short piece, typeset by M-Tx: + +\begin{mtx} +Title: Music sample in M-Tx +Style: Solo +Meter: C +Width: 160mm + +c4 d8 e f g a b | c4 b8 a g f e d | c8 g+ e g c- g+ e g | c4- e c r | +\end{mtx} + +The same piece, typeset by LilyPond: + +\begin{lily} +% twice - it's required to avoid a bug +\version "2.18.2" +\version "2.18.2" + +\header { + title = "Music sample in LilyPond" + tagline = "" % no footer +} + +\relative c' { + \time 4/4 + \clef treble + c4 d8 e f8 g a b | c4 b8 a g8 f e d | + c8 g' e g c,8 g' e g | c,4 e c r \bar "|." +} +\end{lily} + +The same piece, typeset by PMW: + +\begin{pmw} +Heading "|Music sample in PMW" +Key C +Time 4/4 + +[stave 1 treble 1] +c d- e-; f-g-a-b-; | c' b- a-; g-f-e-d-; | +c-g-e-g-; c-g-e-g-; |c e c r | +[endstave] +\end{pmw} + +The same piece, typeset by MUP: + +\begin{mup} +// music sample in MUP notation + +header + title "Music sample in MUP" + +score + time=4/4 + +music + 1: 4c; 8d bm; e ebm; f bm; g; a; b ebm; + bar + 1: 4c+; 8b bm; a ebm; g bm; f; e; d ebm; + bar + 1: 8c bm; g; e; g ebm; c bm; g; e; g ebm; + bar + 1: 4c; e; c; r; + endbar +\end{mup} + +The same piece, typeset by abcm2ps: + +\begin{ABC} +X: 1 +T: Music sample in ABC +M: 4/4 +L: 1/4 +K: C +% +C D/E/ F/G/A/B/|c B/A/ G/F/E/D/|C/G/E/G/ C/G/E/G/|CECz|] +\end{ABC} + +\end{document} + +\end{verbatim} +\end{source} + +\score{sample-abc-all} + +% ----- + +\subsection{A Complete Songbook Example} +\label{sec:songbook} + +The following source is a minimal template for songbooks. It uses the +\pkg{gchords} and \pkg{guitar} packages (Sections~\ref{sec:gchords} +and \ref{sec:pkgguitar}). The resulting PDF has its own page numbers +(don't get confused!) and is included in this document with +\ltx{includepdf}. + +\begin{source} +\begin{verbatim} +\documentclass[11pt]{article} +\usepackage{graphicx} +\usepackage{gchords} +\usepackage{guitar} + +\begin{document} + +\title{A Minimal Songbook} +\author{Guido Gonzato} + +\maketitle + +\tableofcontents + +\bigskip +\hrule + +% ----- + +\section{For He's a Jolly Good Fellow} + +According to the 1998 Guinness World Records, this is the second most +recognized song in the English language. + +\def\numfrets{4} +\chords{ +\chord{t}{n,p3,p2,n,p1,n}{C} +\chord{t}{p3,p2,n,n,n,p3}{G} +\chord{t1}{n,p2,p2,p1,n,n}{F} +} + +\medskip + +\includegraphics[width=\textwidth]{fellow} + +% ----- + +\section{Happy Birthday To You} + +According to the 1998 Guinness World Records, it is the most +recognized song in the English language, followed by ``For He's a +Jolly Good Fellow''. + +\def\numfrets{4} +\chords{ +\chord{t1}{n,p2,p2,p1,n,n}{F} +\chord{t}{n,p3,p2,n,p1,n}{C} +\chord{t}{n,p3,p2,p3,p1,n}{C7} +\chord{t1}{n,n,p2,p2,p2,n}{B$\flat$} +} + +\medskip + +\includegraphics[width=\textwidth]{happyb} + +% ----- + +\section{Twinkle, Twinkle Little Star} + +This is a popular English lullaby. + +\def\numfrets{4} +\chords{ +\chord{t}{n,p3,p2,n,p1,n}{C} +\chord{t1}{n,p2,p2,p1,n,n}{F} +\chord{t}{x,n,n,p2,p3,p1}{Dm} +\chord{t}{p3,p2,n,n,n,p3}{G} +} + +\includegraphics[width=\textwidth]{twinkle} + +\medskip + +\begin{guitar} + +[C]Twinkle, twinkle, [F]little [C]star, +[Dm]How I [C]wonder [G]what you [C]are! +[C]Up a[Dm]bove the [C]world so [G]high, +[C]Like a [Dm]diamond [C]in the [G]sky. +Twinkle{\ldots} + +[C]When this blazing [F]sun is [C]gone, +[Dm]When he [C]nothing [G]shines u[C]pon, +[C]Then you [Dm]show your [C]little [G]light, +[C]Twinkle, [Dm]twinkle, [C]through the night. +Twinkle{\ldots} + +[C]Then the [F]traveller in the [C]dark +[Dm]Thanks you [C]for your [G]tiny [C]spark; +[C]He could [Dm]not see [C]where to [G]go, +[C]If you [Dm]did not [C]twinkle [G]so. +Twinkle{\ldots} + +[C]In the dark blue [F]sky you [C]keep, +And [Dm]often [C]through my [G]curtains [C]peep, +[C]For you [Dm]never [C]shut your [G]eye +[C]Till the [Dm]sun is [C]in the [G]sky. +Twinkle{\ldots} + +[C]As your bright and [F]tiny [C]spark +[Dm]Lights the [C]traveller [G]in the [C]dark, +[C]Though I [Dm]know not [C]what you [G]are, +[C]Twinkle, [Dm]twinkle, [C]little [G]star. +Twinkle{\ldots} + +\end{guitar} + +\end{document} +\end{verbatim} +\end{source} + +\includepdf[pages=-,pagecommand={}]{sample-songbook.pdf} + +% ----- + +\subsection{A sample \file{Makefile}} + +This is the \file{Makefile} that was used to typeset the previous +example. The \cmd{clean} target is used to clean up all temporary +files. + +\begin{source} +\begin{verbatim} +# Makefile for songbook.tex + +FIGURES = fellow.pdf happyb.pdf twinkle.pdf + +songbook: songbook.tex $(FIGURES) + pdflatex songbook.tex + +fellow.pdf: fellow.abc + abcm2ps -c -O= fellow.abc; \ + ps2pdf fellow.ps; \ + pdfcrop fellow.pdf; \ + /bin/mv -f fellow-crop.pdf fellow.pdf + +happyb.pdf: happyb.abc + abcm2ps -O= happyb.abc; \ + ps2pdf happyb.ps; \ + pdfcrop happyb.pdf; \ + /bin/mv -f happyb-crop.pdf happyb.pdf + +twinkle.pdf: twinkle.abc + abcm2ps -O= twinkle.abc; \ + ps2pdf twinkle.ps; \ + pdfcrop twinkle.pdf; \ + /bin/mv -f twinkle-crop.pdf twinkle.pdf + +clean: + /bin/rm -f .*~ *~ *aux *bak *lo? *to? *out *tmp *bbl *ps +\end{verbatim} +\end{source} + +\end{document} + +% --- end of file latex4musicians.tex |