% latex4musicians.tex -*- LaTeX -*- % % By Guido Gonzato, PhD % % Last updated: January 19, 2019 % \RequirePackage[l2tabu,orthodox]{nag} % LaTeX syntax check \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=red,% urlcolor=blue,% filecolor=blue,% breaklinks=true]% {hyperref} % URLs and links \urlstyle{same} % use the same font for links \usepackage{setspace} % for sources \usepackage{fancyvrb} % fancy verbatim \usepackage{color} % for included pages \pagecolor{white} % don't disrupt pdfpages \usepackage{pdfpages} % include external pages \usepackage[breakable]% {tcolorbox} % shaded boxes \usepackage{alltt} % for sources \usepackage{textcomp} % for upquote \usepackage{upquote} % fix ' in PDF output \usepackage{boxedminipage} % for LaTeX examples \include{params} % low-level formatting stuff \pagestyle{fancy} % fancy headers % ----- \begin{document} \title{\LaTeX{} for {\huge\twonotes{}}usicians} \author{Guido Gonzato, PhD} \date{Version \version\\ \today} \maketitle \begin{center} \includegraphics[width=\textwidth]{jingle.pdf} \end{center} \begin{abstract} This guide shows how to create \LaTeX{} documents that include several kinds of music elements, from very simple to quite 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 directly by \TeX{} and \LaTeX{} using packages, and also by external scorewriters. Major packages and programs are listed and briefly described, providing ready-to-use examples. \end{abstract} \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} that I'm still maintaining. Writing that tutorial, I included many PDF music snippets along with the corresponding ABC sources, and I was very satisfied with the result. (Hopefully, other people were satisfied, too.) Since then, I have become interested in other music notation languages. I have come across many excellent programs and many great packages I wasn't aware of; I have collected many music snippets and I have taken notes. I must say that I'm 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 scorewriters. 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 in the hope of doing something useful for other musicians, I have decided to write this guide that explains how to solve these problems in many ways. In particular, it shows how to create documents that include many types of music information, from very simple to quite 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} \item \hyperref[sec:multimedia]{multimedia files}: \begin{minipage}[c]{\linewidth} \href{run:jingle.midi}{\fbox{play me!}} \end{minipage} \item \hyperref[sec:sources]{notation sources}: \hspace{1em} \begin{boxedminipage}[c]{0.4\linewidth} \begin{alltt} \footnotesize X: 1 L: 1/4 K: C c G/G/ _AG|z !>!B!>!c z|] \end{alltt} \end{boxedminipage} \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 music output; then we will learn how to include the music (as PDF files, sound files, or notation sources) in \LaTeX{} documents. % ----- \subsection{Conventions} This document is meant to be consulted in its PDF version (online, if possible), rather than printed on paper. Hence, it uses many external links. Links are written in short form whenever possible; for instance, the \pkgname{abc} package will be referred to 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 light green background; the resulting PDF output, when applicable, has a light gray background. Command line sessions are shown in a frame; user commands are 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 strongly 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). Please note that on Debian-based GNU/Linux systems, and maybe other distributions, the default TeX Live packages may be older. I suppose that other \TeX{} 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. Windows users should install the excellent \href{http://www.msys2.org/}{MSYS2} platform. In most cases, typesetting is done with the common \cmd{pdflatex} command. Some packages, though, require the \XeLaTeX{} or \LuaLaTeX{} engines. 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 briefly describes. A few examples are provided to get you started and to whet your appetite, but in most cases they don't cover all available features. The package or program documentation is the primary source of information you should refer to. % Good luck. Some programmers write awsome programs, but clearly % don't know how to write good, useful, concise documentation. 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. Also, some features may be available in package releases that are newer than those included in TeX Live. In these cases, you will have to install the missing (or newer) 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. If you are installing a package that is newer than that in TeX Live and want \LaTeX{} to use it, add this line to your \file{.bashrc}: \begin{verbatim} export TEXINPUTS=$HOME/texmf/tex//: \end{verbatim} % $ Please note the double \cmd{/} at the end. This line makes \TeX{} search recursively in \file{\$HOME/texmf/tex/}, then it adds the current value of \cmd{TEXINPUTS} (if any) to the search path. % ----- \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} I suggest that you read the excellent \pkg{epslatex} guide that explains many details on alignment, size, rotation etc.\ of included graphics files. 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 very useful 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; moreover, MSYS2's Ghostscript package lacks the \cmd{bbox} device. However, if you install the official release of 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} \n" printf "This script uses 'gs' to crop a one-page pdf file.\n\n" exit 1 fi # GhostScript for Windows is installed in C:\Gs GS=/c/gs/gs9.26/bin/gswin64c.exe # GNU/Linux and others: # GS=/usr/bin/gs INPUT=$1 PDF=$(basename $1 .pdf) OUTPUT=$PDF-crop.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} % no page number \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} This package also provides the \ltx{writechord} command to typeset chords: \begin{source} \begin{verbatim} \documentclass[12pt]{article} \usepackage[minimal]{leadsheets} \useleadsheetslibraries{chords} \thispagestyle{empty} \begin{document} Let's typeset some chords: \writechord{Bb7(#9)} \writechord{Bbb6} \writechord{C#7(b9)} \writechord{C##13} \end{document} \end{verbatim} \end{source} \scoreshort{chords} % ----- \subsubsection{Package \pkg{lilyglyphs}} One of the most complete sources 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 \href{http://mirrors.ctan.org/macros/luatex/latex/lilyglyphs/% documentation/lilyglyphs.pdf}{documentation}. This is a very small example of what \pkgname{Lilyglyphs} provides: \begin{source} \begin{verbatim} \documentclass{article} \usepackage{fontspec} \usepackage{lilyglyphs} \thispagestyle{empty} \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. Unicode-encoded fonts provide \href{https://www.unicode.org/charts/PDF/U1D100.pdf}{music symbols}, which we can find for instance in \href{https://www.gnu.org/software/freefont/}{GNU FreeFont}. However, a font standard for music applications called \href{https://www.smufl.org}{SMuFL} has been developed. 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. Customisation options include alignment, spacing, font, and other low-level details. 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. Customisation options include chord location and name (Do-Re-Mi instead of C-D-E), font, transposition, and spacing. 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} % setchord font \setlength{\parindent}{0pt} % no indentation \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 (Section~\ref{sec:songs_cd}), transposition, index generation, multiple columns, and more. Overall, it allows for the creation of complete songbooks. % \enlargethispage{\baselineskip} \begin{source} \begin{verbatim} \documentclass{article} \thispagestyle{empty} \usepackage[chorded]{songs} \begin{document} \renewcommand{\lyricfont}{\small} \renewcommand{\printchord}{\it\small} \afterpreludeskip=-18pt \beforepostludeskip=-8pt \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. \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}} \label{sec:leadsheets} This package provides many features: music and 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. \begin{source} \begin{verbatim} \documentclass{article} \usepackage[full]{leadsheets} \thispagestyle{empty} \begin{document} \begin{song}{title={Imagine}, music={John Lennon}} \begin{verse} Intro, $\times$ 2\\ \chord{C}~ \chord{Cmaj7}~ \chord{F}~ % The ^ character is a shortcut for \chord \chord{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{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. \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} % ----- \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 music features are not limited to the guitar; chord diagrams and tablatures apply to other stringed instruments as well. Tablatures are a form of music 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. For an authoritative list of standard guitar chords diagrams, I suggest that you visit \href{http://lilypond.org/doc/v2.18/% Documentation/notation/predefined-fretboard-diagrams}{this useful page}. % ----- \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 fully customisable guitar chord diagrams and scales. The main command is \ltx{chordscheme}, and is quite self-explanatory: \begin{source} \begin{verbatim} \documentclass{article} \usepackage{guitarchordschemes} \thispagestyle{empty} \begin{document} % general parameters \setchordscheme{ rotate=-90, x-unit=2.5mm, % chord size, x y-unit=3mm, % chord size, y name-format=\bfseries, % chord name font finger-format=\bfseries% \footnotesize % fingering font } \newsavebox{\Gstd} \savebox{\Gstd}{ \chordscheme[ % define the chord 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 ]} \newsavebox{\Gbarre} \savebox{\Gbarre}{ \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} ]} \usebox{\Gstd}\usebox{\Gbarre} \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 typeset by \TeX{} itself, but we can also 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. Music notation languages will not be explained, for obvious space reasons. Minimal sources will be listed to give minimal working examples and to get acquainted with the notation complexity. % ----- \subsection{Which Notation Software?} I'm not going to suggest any particular music notation software. I do have my personal preferences; I find some notations easier than others; some programs have more features than others; and so on. Nevertheless, I think that all packages and programs described in the following sections have their advantages, and all of them can typeset beautiful scores. Unless you need specific features, choosing a typesetting software is mostly a matter of personal preference. Let's put it this way: the best program is the one that lets you obtain the results you need, with the least effort, in the least amount of time, and the most fun. All software described below is capable of typesetting complex Western music: multiple voices and staves, symbols, dynamics, lyrics, text annotations; sone of them can also do tablatures and more. % ----- \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 in \pkgname{MusiXTeX}; \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} From \pkg{musixtex} home page: \begin{quote} MusiXTEX provides a set of macros, based on the earlier MusicTEX, for typesetting music with \TeX. \end{quote} \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}. Notably, it works with plain \TeX. (Ever tried plain \TeX?) A minimal example (\file{sample-mtex.tex}): \begin{source} \begin{verbatim} % bare MusiXTeX example \input musixtex \nopagenumbers \setstaffs1{1} % a single stave \setclef1{\treble} % with a treble clef \generalmeter{\meterC} % common time \nobarnumbers % what it says \startextract % a short music piece % \qu = quarter note, stem up; % \ql = quarter note, stem down; % \Notes, \en = start and end of note line \Notes \qu c \qu d \qu e \qu f \en \bar \Notes \qu g \qu{'a} \ql b \ql c \en \endextract \end \end{verbatim} \end{source} We typeset the score with these commands: \begin{screen} $ \textbf{tex sample-mtex.tex} $ \textbf{dvips sample-mtex.dvi} $ \textbf{ps2pdf sample-mtex.ps} $ _ \end{screen} \scoreshort{sample-mtex} \pkgname{MusiXTeX} input can also be embedded in \LaTeX{} documents (\file{sam\-ple-m\-la\-tex.tex}): \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{document} \end{verbatim} \end{source} \score{sample-mlatex} \bigskip Admittedly 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. I suggest that you learn at least the basics of it; several useful packages are based on this syntax. \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: \bigtype 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.21. ==> This is M-Tx 0.63a (Music from TeXt) <8 April 2018> ==>> Input from file sample-mtx.mtx ... sample-mtx.pdf generated by ps2pdf. $ _ \end{screen} % $ \noindent which produces \file{sample-mtx.pdf}. In older versions of \pkgname{M-Tx}, the command was \cmd{m-tx}; it has now 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, \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} \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, in fact, 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.) bis(::) \end{alltt} \end{source} We also need an auxiliary \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 (\file{sample-abc.abc}): \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 (\file{sample-pmw.pmw}): \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 a free license. 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 (\file{sample-mup.mup}): \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 to 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. This is (\file{sample-abc.tex}): \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 music notation for stringed instruments; making tablatures is basically the same process as making sheet music. We can distinguish between \emph{automatic tablatures}, where fret positions are generated by the program, and \emph{manual tablatures}, where fret positions are specified by the user. % ----- \subsection{Program: \href{http://lilypond.org/}{LilyPond}} \label{sec:lilytab} In addition to sheet music, LilyPond can also easily typeset automatic 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 \bar "|." } \score { << \new Staff { \clef "G_8" \music } % sheet music \new TabStaff { \tabFullNotation \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 we 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 automatic 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 to 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 we 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{musixtex}} Starting from version 1.29, \pkgname{MusiXTeX} can also make manual tablatures for several stringed instruments. A minimal example, to be typeset with \cmd{musixtex} (\file{sample-musixtex-tab.tex}): \begin{source} \begin{verbatim} % bare MusiXTeX example \input musixtex \nopagenumbers This is a MusiXTeX tablature example: \setlines16 % six lines \setstaffs1{1} \setclefsymbol1{\tabclef} % and a TAB clef \nobarnumbers \let\extractline\leftline % left aligned \startextract \Notes \tab{5}{3} \tab{4}{0} \tab{4}{2} \en \bar \Notes \tab{4}{3} \tab{3}{0} \tab{3}{2} \en \bar \Notes \tab{2}{0} \tab{3}{2} \tab{2}{0} \en \bar \Notes \tab{2}{1} \qp \qp \en \endextract \end \end{verbatim} \end{source} \scoreshort{sample-musixtex-tab} % ----- \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 manually specify 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{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{Bits and Pieces} \subsection{Multimedia Files} \label{sec:multimedia} In addition to sheet music, our documents can also include sound files. To be more precise, we can click on a link to an external sound file that is referred to in the PDF document; the default player will be run. This feature is made possible by the \pkg{hyperref} package, which provides the \ltx{href} command: \begin{source} \begin{verbatim} \href{run:jingle.midi}{this midi file} \end{verbatim} \end{source} The first parameter opens the specified file with the default multimedia player; the second parameter creates a link to click on. For example, the above line lets the reader click on \href{run:jingle.midi}{this midi file} and listen to it. The operating system must know how to play the specified sound file. The link need not be just text; we may as well apply the link to included graphics. % ----- \subsection{Notation Source Files} \label{sec:sources} If we need to include notation source files, we could use a simple \cmd{verbatim} environment, or \cmd{alltt} (package \pkg{alltt}) if we also want to include \LaTeX{} commands in the source: \bigskip \noindent { \small \begin{boxedminipage}[c]{0.52\linewidth} \begin{verbatim} \textit{\% This is a comment!} \textbf{X:} 1 \textbf{L:} 1/4 \textbf{K:} C \textit{\% These are notes:} c G/G/ _AG|z !>!B!>!c z|] \end{verbatim} \end{boxedminipage} \hspace{2em} \begin{boxedminipage}[c]{0.4\linewidth} \begin{alltt} \textit{\% This is a comment!} \textbf{X:} 1 \textbf{L:} 1/4 \textbf{K:} C \textit{\% These are notes:} c G/G/ _AG|z !>!B!>!c z|] \end{alltt} \end{boxedminipage} } % \small \bigskip But if you want something fancier, like the sources included in this document, you could also use the \pkg{tcolorbox} and define a new environment like the following: \bigskip \begin{tcolorbox}[breakable,boxrule=0.2pt,% left=0pt,right=0pt,colback=green!7!white,arc=2pt] \begin{verbatim} \newenvironment{source} { % beg def \medskip \small \begin{margins}{-0.3cm}{-0.3cm} \begin{spacing}{0.9} \begin{tcolorbox}[breakable,boxrule=0.2pt,% left=0pt,right=0pt,colback=green!7!white,arc=2pt] \begin{alltt} } { % end def \end{alltt} \end{tcolorbox} \end{spacing} \end{margins} } \end{verbatim} \end{tcolorbox} % ----- \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. We have two possible approaches: keeping all music in the \LaTeX{} source, or keeping the music in external files. Both approaches have advantages and disadvantages. Basically, the first method is slower, because any change in the source may require recompilation of music excerpts. The second method requires a little more work, because we need to maintain an additional file that takes care of music conversion. % ----- \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. This line: \begin{source} \begin{verbatim} FIGURES = music1.pdf music2.pdf music3.pdf \end{verbatim} \end{source} \noindent 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. These lines: \begin{source} \begin{verbatim} main.pdf: main.tex $(FIGURES) pdflatex main.tex \end{verbatim} \end{source} % $ \noindent 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{source} \begin{verbatim} music1.pdf: music1.mtx musixtex music1.mtx ; pdfcrop musix1.pdf ; \ /bin/mv musix1-crop.pdf music1.pdf \end{verbatim} \end{source} \noindent 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} \noindent 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 % ----- \newpage \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. I would like to thank all the geniuses who wrote the packages and programs cited in this guide. Kudos and hats off, folks! This document is copyleft \copyleft{} Guido Gonzato, PhD, and released under the \href{https://www.gnu.org/licenses/fdl.html}{GNU Free Documentation Licence}. \medskip \begin{center} \includegraphics{guidopiper.jpeg} \end{center} Ciao! \texttt{=8-)} % ----- \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, v. 2018-05.21.\\ \url{https://ctan.org/pkg/musicography} \item Package: leadsheets, v. 0.5b\\ \url{https://ctan.org/pkg/leadsheets} \item Package: lilyglyphs, v. 0.2.3\\ \url{https://ctan.org/pkg/lilyglyphs} \item Font: Bravura, v.1.272\\ \url{https://www.smufl.org/fonts} \item Package: guitar, v. 1.6\\ \url{https://ctan.org/pkg/guitar} \item Package: gtrcrd, v. 1.1\\ \url{https://ctan.org/pkg/gtrcrd} \item Package: songs, v. 3.0\\ \url{https://ctan.org/pkg/songs} \item Package: musixguit, v. 1.2.2\\ \url{https://ctan.org/pkg/musixguit} \item Package: songbook, v. 4.5\\ \url{https://ctan.org/pkg/songbook} \item Program: Chordii, v. 4.3\\ \url{https://www.vromans.org/projects/Chordii} \item Package: gchords, v. 1.20\\ \url{https://ctan.org/pkg/gchords} \item Package: guitarchordschemes, v. 0.7\\ \url{https://ctan.org/pkg/guitarchordschemes} \item Package: guitartabs, v. 2018-05-01\\ \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, v. 1.29\\ \url{https://ctan.org/pkg/musixtex} \item Package: M-Tx, v. 0.63a\\ \url{https://ctan.org/pkg/m-tx} \item Package: Gregoriotex, v. 5.1.1\\ \url{https://ctan.org/pkg/gregoriotex}\\ \url{http://gregorio-project.github.io/gregoriotex}\\ \url{http://gregorio-project.github.io} \item Program: LilyPond, v. 1.18.2\\ \url{http://lilypond.org} \item Package: Lyluatex, v. 1.0b\\ \url{https://ctan.org/pkg/lyluatex} \item Programs: \cmd{abcm2ps} v. 8.14.2, \cmd{and2svg} v. 1.19.0\\ \url{http://moinejf.free.fr} \item Program: PMW, Philip's Music Writer, v. 4.30\\ \url{http://people.ds.cam.ac.uk/ph10/pmw.html} \item Program: MUP v. 6.6\\ \url{http://www.arkkra.com} \item Program: MuseScore v. 3.0\\ \url{http://musescore.org} \item Package: Abc v. 2.0b\\ \url{https://ctan.org/pkg/abc} \item Program: abc2xml.ly v. 218\\ \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: \bigtype 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} \date{\today} \maketitle \tableofcontents % ----- \section{For He's a Jolly Good Fellow} % Typically sung to congratulate somebody. \smallchords \def\numfrets{4} \begin{minipage}[c]{\linewidth} % use less space \chords{ \chord{t}{n,p3,p2,n,p1,n}{C} \chord{t}{p3,p2,n,n,n,p3}{G} \chord{t}{n,p3,p2,p3,p1,n}{C7} \chord{t1}{n,p2,p2,p1,n,n}{F} } \end{minipage} \medskip \includegraphics[width=\textwidth]{fellow} \bigskip \begin{guitar} For [C]he's a jolly good fellow, For [G]he's a jolly good [C]fellow, For [C7]he's a jolly good [F]fellow, Which [C]nobody [G]can [C]deny. \end{guitar} % ----- \section{Happy Birthday To You} % Sung to remind somebody they're growing old. \def\numfrets{4} \begin{minipage}[c]{\linewidth} \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}{Bb} } \end{minipage} \medskip \includegraphics[width=\textwidth]{happyb} \bigskip \begin{guitar} Happy [F]birthday to [C]you, Happy [C7]birthday to [F]you, Happy birthday dear [Bb]Guido, Happy [F]birthday [C]to [F]you! \end{guitar} % ----- \section{Warm Kitty} % No need to introduce this lullaby! \def\numfrets{4} \begin{minipage}[c]{\linewidth} \chords{ \chord{t}{n,n,p2,p2,p2,n}{A} \chord{t}{n,p2,p2,p1,n,n}{E} \chord{t}{n,p2,p2,p1,p3,n}{E7} } \end{minipage} \medskip \includegraphics[width=\textwidth]{warm} \bigskip \begin{guitar} [A]Soft kitty, [E]warm kitty [A]Little ball of [E]fur [E7]~ [A]Happy kitty, [E]sleepy kitty [A]Purr, [E]purr, [A]purr \end{guitar} \end{document} \end{verbatim} \end{source} \newpage \pagecolor{pdfbg} \includepdf[pages=-,pagecommand={}]{sample-songbook.pdf} \pagecolor{white} % ----- \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 sample-songbook FIGURES = fellow.pdf happyb.pdf warm.pdf sample-songbook: sample-songbook.tex $(FIGURES) pdflatex sample-songbook.tex; \ pdflatex sample-songbook.tex; \ pdflatex sample-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 warm.pdf: warm.abc abcm2ps -O= warm.abc; \ ps2pdf warm.ps; pdfcrop warm.pdf; \ /bin/mv -f warm-crop.pdf warm.pdf clean: /bin/rm -f .*~ *~ *aux *bak *lo? *to? *out *tmp *bbl *ps \end{verbatim} \end{source} % $ % ----- \subsection{Verses and Guitar Chords Diagrams} Combining verses and guitar chord diagrams can be done in several ways. I think that the following example shows two of the easiest methods. Please refer to Section~\ref{sec:pkgguitar} and Section~\ref{sec:gchords} for further details. \begin{source} \begin{verbatim} \documentclass{article} \usepackage{guitar} \usepackage{gchords} \thispagestyle{empty} \newcommand{\C}{\hspace{-0.8em}\chord{t}{n,p3,p2,n,p1,n}{C}} \newcommand{\CmajVII}{\hspace{-0.8em}\chord{t}{n,p3,p2,n,n,n}{Cmaj7}} \newcommand{\F}{\hspace{-0.8em}\chord{t1}{n,p2,p2,p1,n,n}{F}} \def\chordsize{1.5mm} \def\numfrets{3} \def\namefont{\it} \begin{document} \noindent We can typeset verses and guitar chord grids in a \texttt{guitar} environment: \bigskip \begin{minipage}[c]{\linewidth} % to avoid indentation \begin{guitar} \textbf{Imagine (John Lennon)} \emph{Intro, $\times$ 2} [\C] \hspace{2em} [\CmajVII] \hspace{2em} [\F] \hspace{2em} [\C]Imagine there's [\CmajVII|]{no} ~ [\F]heaven [\C]It's easy if [\CmajVII|]{you} ~ [\F]try \end{guitar} \end{minipage} \noindent {\ldots}and so on. But we could just use the \verb|\upchord| command, provided by \texttt{gchords}: \begin{verse} \upchord{\C}Imagine there's \upchord{\CmajVII}no \qquad \upchord{\F}heaven \upchord{\C}It's easy if \upchord{\CmajVII}you \qquad \upchord{\F}try \end{verse} \end{document} \end{verbatim} \end{source} \score{verses-chords} % ----- \end{document} %% --- end of file latex4musicians.tex