. /////////////////////////////////////////////////////////////////////////////
. This is the primary source of the PMW Manual. It is an xfpt document that is
. converted into DocBook XML for subsequent conversion into PostScript and PDF
. formats. The markup used herein is "standard" xfpt markup.
. /////////////////////////////////////////////////////////////////////////////
.include stdflags
.include stdmacs
. /////////////////////////////////////////////////////////////////////////////
. These definitions set some parameters and save some typing. Remember that
. the <bookinfo> element must also be updated for each new edition.
. /////////////////////////////////////////////////////////////////////////////
.set version "4.51"
. Zero-width space
.set B "​"
. Right-pointing hand
.set R "☞"
. Three ampersands
.set A3 "&&&"
.set sharp "<emphasis role=""PMW-Music/8"">zz~~v%|v</emphasis>"
.set flat "<emphasis role=""PMW-Music/9"">zz~v'v</emphasis>"
. Bracket top, middle, bottom, 12 point
.set BT12 "<emphasis role=""Times-Roman/12/0"">⎤</emphasis>"
.set BM12 "<emphasis role=""Times-Roman/12/0"">⎥</emphasis>"
.set BB12 "<emphasis role=""Times-Roman/12/0"">⎦</emphasis>"
. Bracket top, middle, bottom, 15 point
.set BT15 "<emphasis role=""Times-Roman/15/0"">⎤</emphasis>"
.set BM15 "<emphasis role=""Times-Roman/15/0"">⎥</emphasis>"
.set BB15 "<emphasis role=""Times-Roman/15/0"">⎦</emphasis>"
. Zero-width space, 15 point, to create a 15-point deep line
.set D15 "<emphasis role=""Times-Roman/15/0"">​</emphasis>"
.flag &! !& "<emphasis role=""smallfont"">" "</emphasis>"
.flag &{ }& "<emphasis role=""PMW-Music/10"">" "</emphasis>"
.flag &{( )}& "<emphasis role=""PMW-Music/14"">" "</emphasis>"
.flag &{{ }}& "<emphasis role=""PMW-Music/8"">" "</emphasis>"
.flag &{{{ }}}& "<emphasis role=""PMW-Music/6"">" "</emphasis>"
.flag &{- -}& "<emphasis role=""PMW-Alpha/11"">" "</emphasis>"
.flag &{+ +}& "<emphasis role=""PMW-Alpha/16"">" "</emphasis>"
. --- For music illustrations ---
. .music <filename> <depth> <movement> <align>
.
.macro music
.literal layout
&<mediaobject>&&<imageobject $=3+role="$3"+>&
&<imagedata fileref="postscript/$1" format="eps" scale="85" &&&
$=2+depth="$2"+ $=4+align="$4"+>&
&</imagedata>&&</imageobject>&&</mediaobject>&
.literal off
.endmacro
. --- For aspic figures ---
. .figure <filename>
.
.macro figure
.literal layout
&<mediaobject>&&<imageobject role="30">&
&<imagedata fileref="postscript/$1" format="eps" scale="90">&
&</imagedata>&&</imageobject>&&</mediaobject>&
.literal off
.endmacro
. --- Generate a full width rule by means of an empty table ---
.macro rule
.literal xml
<?sdop table_indent="0"?>
.literal off
.itable top 0 0 1 450 left
.endtable
.literal xml
<?sdop table_indent="12"?>
.literal off
.endmacro
. --- Fiddle with the leading for some of the tables ---
.macro leadoff
.literal xml
<?sdop extra_leading="0"?>
.literal off
.endmacro
.macro leadon 3
.literal xml
<?sdop extra_leading="$1"?>
.literal off
.endmacro
. --- Fiddle with subsection inclusion in printed TOC ---
.macro tocsubsecton
.literal xml
<?sdop toc_printed_sections="yes,yes,yes,no"?>
.literal off
.endmacro
.macro tocsubsectoff
.literal xml
<?sdop toc_printed_sections="yes,yes,no"?>
.literal off
.endmacro
. /////////////////////////////////////////////////////////////////////////////
. This outputs the standard DocBook boilerplate.
. /////////////////////////////////////////////////////////////////////////////
.docbook
. /////////////////////////////////////////////////////////////////////////////
. These literal XML lines are processing instructions for SDoP. They adjust
. the contents of the page footers, request PDF TOC entries for index change-
. of-letter headings, arrange for [ ] * and an opening quote to be skipped when
. sorting the index, set a table indent to match the default literal indent,
. and allow table cells to overflow without warning if there is no overprinting.
. /////////////////////////////////////////////////////////////////////////////
.literal xml
<?sdop
foot_right_recto="&chaptertitle; (&chapternumber;)"
foot_right_verso="&chaptertitle; (&chapternumber;)"
index_headings_pdf_toc="yes"
index_sort_omit="[]*‘"
table_indent="12"
table_warn_overflow="overprint"
toc_chapter_blanks="yes,no"
?>
.literal off
. /////////////////////////////////////////////////////////////////////////////
. This generate the outermost <book> element that wraps the entire document.
. /////////////////////////////////////////////////////////////////////////////
.book
. ////////////////////////////////////////////////////////////////////////////
. The <bookinfo> element is provided as raw XML.
. ////////////////////////////////////////////////////////////////////////////
.literal xml
<bookinfo>
<title>Philip's Music Writer (PMW)</title>
<subtitle>A Music Typesetting Program</subtitle>
<titleabbrev>PMW</titleabbrev>
<date>06 January 2021</date>
<author><firstname>Philip</firstname><surname>Hazel</surname></author>
<authorinitials>PH</authorinitials>
<address>Cambridge, England</address>
<revhistory><revision>
<revnumber>4.51</revnumber>
<date>06 January 2021</date>
<authorinitials>PH</authorinitials>
</revision></revhistory>
<copyright><year>2021</year><holder>Philip Hazel</holder></copyright>
</bookinfo>
.literal off
. /////////////////////////////////////////////////////////////////////////////
. Set up some "see" and "see also" index entries
. /////////////////////////////////////////////////////////////////////////////
. Note that it's the *first* argument that is the existing index entry. For
. example, the first one generates "character strings, see strings".
.index-see "diminuendo" "decrescendo"
.index-see "flags" "tails"
.index-see "hairpins" "wedges"
.index-see "irregular note groups" "triplets"
.index-see "irregular note groups" "unequal rhythmic groups"
.index-see "many bars rest" "multiple rest bars"
.index-see "movement" "new movement"
.index-see "slurs" "phrasing marks"
.index-see "stave" "staff"
.index-see "strings" "character strings"
.index-see "underlay" "lyrics"
.index-see "underlay" "vocal underlay"
.index-seealso "&'individual clef names'&" "clefs"
.index-seealso "strings" "text"
.index-seealso "text" "strings"
.index-seealso "underlay" "overlay"
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "Introduction"
&'Philip's Music Writer'& (PMW) is a computer program for typesetting music. It
is not a music processor or a sequencer. Its sole objective is the production
of high quality printed sheet music. PMW operates by reading an input file
containing an encoded description of the music; such a file can be constructed
using any text editor or wordprocessor. Although a textual input method may not
be considered as `user-friendly' as pointing and dragging on the screen, it can
be a much faster way of inputting music, once the format of the input file
has been learned. In addition, the usual facilities of a text editor, such as
cutting and pasting, can be used to speed up entry, and PMW is also able to
provide text-based features such as string repetition, macros, and included
files.
The output of PMW is a PostScript file. This can be previewed on screen using
&'GhostScript'& or similar software. If you have a printer that understands
PostScript, PMW output can be printed directly; otherwise, conversion software
such as &'GhostScript'& is required. &'GhostScript'& can also be used to
convert PostScript files into Portable Document Format (PDF) files. PMW can
be requested to produce its output as encapsulated PostScript (see the &%-eps%&
option). This is useful if the music is an illustration that will subsequently
be included in another document.
This edition of the manual describes PMW version &version;. Version 4.00 was
the first version for Linux and other Unix-like environments. Earlier versions
were called &'Philip's Music Scribe'&, and ran on Acorn's RISC OS operating
system in the 1990s. From version 4.10 onwards, PMW interprets text strings as
UTF-8 encoded Unicode, giving access to all the available characters in the
standard PostScript text fonts. Access to non-ASCII characters is also
available using escape sequences. Section &<<SUBSECTbackcompat>>& discusses the
issues of backwards compatibility with previously-existing PMW input files.
As well as PostScript output, PMW can also write a MIDI file that can be
played through the computer's sound system by an application such as
&'Timidity'&. MIDI output is not very sophisticated, and is intended for
`proof-hearing' purposes rather than for performance.
PMW comes with a PostScript font called PMW-Music. This contains all the
music shapes (notes, rests, accidentals, bar lines, clefs, etc.) that PMW
requires. I acknowledge with gratitude the help of Richard Hallas, who created
the original versions of some of the characters in this font and improved many
others. The half sharp and half flat characters were contributed by Hosam Adeeb
Nashed. Richard also contributed a second font called PMW-Alpha. It contains
additional characters that may be useful when printing music (see chapter
&<<CHAPpmwalpha>>&).
The PMW input encoding is designed to be easy for a musician to remember. It
makes use of as many familiar music notations as possible within the
limitations of the computer's character set. Normally it is input by a human,
using any available word processor or text editor. However, PMW input could
also be be the output of some other computer program that captures (or
generates) music.
This introduction ends with a short summary of the musical and other
terminology used in this manual. The following two chapters describe how PMW
should be installed and operated. Chapters &<<CHAPfirstintro>>& and
&<<CHAPlastintro>>& are an introduction to the PMW input encoding. They cover
most of the more common requirements, with examples, in an introductory manner.
The bulk of the manual (from chapter &<<CHAPreference>>& onwards) is reference
material; the information in earlier chapters is repeated, with additional
specialist information. Finally, there are chapters giving details of text
fonts, the PMW music fonts, summaries of the syntax of input files, and an
index. Many cross-references are given in a shortened form using a pointing
hand symbol, for example, &R; &<<SECTsetdefop>>&. These cross-references are
clickable when this PDF is being displayed by software that supports the
facility.
.section "Terminology"
.index "terminology"
.index "default" "definition of term"
The word `default' occurs frequently in this manual. It means some value or
option setting that is used when the user does not supply any alternative. For
example, if no key signature is given for a piece, the default that is used is
C major.
The word `directive' is used as the name for instructions in the input file
that tell PMW what to do. There are directives that control the overall form of
the piece, and others that operate within individual staves.
The word `argument' refers to a data value that is provided on the command line
for running PMW, or is coded as part of a directive. For example, the directive
to set the page length has to be followed by one number; this is its argument
(the usage is taken from mathematics and computer programming).
The word `parameter' refers to a data value that controls the format of the
typeset music. For example, there is a parameter whose value is the width of
lines of music. All parameters have default values, but these can usually be
changed by an appropriate directive.
Some formal music terminology is also used; it is summarized here for the
benefit of readers who may not be fully familiar with it. I use the British
names for notes: breve, semibreve, minim, crotchet, quaver, semiquaver, etc.
A &'beam'& is a thick line that is used to join together a number of quavers or
shorter notes, instead of each note having its own separate flags.
A &'brace'& is a curly sign that is used to join together two staves that are
to be played on a single instrument, for example the two staves of keyboard
music.
A &'bracket'& is another sign used for joining staves together. It is like a
large square bracket and is used to join together staves of music for different
instruments, for example, the four staves needed for a string quartet.
A &'caesura'& is a pause mark that appears between notes; it is normally
printed as two short sloping lines through the top line of the stave.
A &'fermata'& is the pause mark that is placed over or under notes, consisting
of a semicircle with a dot at its centre.
A &'flag'& is the name used for the additional marks added to the stem of a
note to indicate that it is shorter than a crotchet. A quaver has one flag, a
semiquaver has two, and so on.
&'Overlay'& is the word used to describe text that is printed above a stave in
a vocal part. Usually, words are printed below the stave, and are called
&'underlay'& (see below), but occasionally alternative words are printed above.
A &'stave'& is a single set of horizontal lines on which notes are printed. The
normal stave contains five lines, but other numbers of lines are sometimes
used, for example, a single line for percussion parts. In this document, the
word `stave' is used as the singular of `staves'. However, the program itself
accepts `staff' as a synonym of `stave' under all circumstances.
The &'stem'& of a note is the vertical line that is drawn either upwards or
downwards from the notehead, for all notes shorter than a semibreve.
A &'system'& is a single line of music, comprising one or more staves, and
usually joined at the left-hand side in some way. For example, the systems of a
string quartet each contain four staves.
&'Underlay'& is the word used to describe text that is printed under a stave in
a vocal part, that is, the words that are to be sung. The less formal term
`lyrics' is often used for this in the context of popular songs.
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "Installing PMW"
.index-from I01 "installing PMW"
.index "Windows, running PMW under"
.index "MacOS X, running PMW under"
.index "Cygwin environment"
PMW is developed on a Linux system, but as it is a straightforward C program
without any kind of fancy interface, it should run without problems in any
Unix-like environment. This includes the Cygwin environment under Microsoft
Windows. The author of PMW has no Windows experience, but Neil Killeen, a PMW
user, has kindly provided notes on running PMW under Windows. These may be
found in the PMW distribution tarball in the file &_doc/Cygwin.txt_&. There are
also some contributed notes on running under MacOS X in the file
&_doc/MacOS.txt_&.
The reader is assumed to be familiar with using shell commands in Unix-like
environments. PMW is installed from source in the same way as many other
applications. First, download the tarball into a suitable directory. There are
currently two URLs that point to the web site:
.display
&url(http://quercite.dx.am/pmw.html)
&url(http://people.ds.cam.ac.uk/ph10/pmw.html)
.endd
You should end up with a file such as &_pmw-&version;.tar.gz_&. Uncompress the
file with &'gunzip'& and then unpack the archive:
.display
&`gunzip pmw-&version;.tar.gz`&
&`tar -xf pmw-&version;.tar`&
.endd
This creates a directory called &_pmw-&version;_&, containing a number of files
and directories. Of interest for later are the &_doc_& directory, which
contains documentation, and the &_contrib_& directory, which contains files
that have been contributed by PMW users in the hope they may prove useful to
others. Each of these contributed files has comments at the top, explaining
what its contents are. To build and install PMW, make the source directory
current, and then issue the usual &(configure)& and &(make)& commands:
.display
&`cd pmw-&version;`&
&`./configure`&
&`make`&
&`make check`&
&`make install`&
.endd
.index "default" "installation directory"
You may need to be &'root'& to run the installation command. By default, this
installs into the &_/usr/local_& directory. If you want to install PMW
somewhere else, you can specify a different `prefix' when configuring. For
example:
.code
./configure --prefix=/usr/local/pmw
.endd
The files that are installed in the prefix directory are as follows:
.ilist
&_bin/pmw_& is the PMW command.
.next
&_man/man1/pmw.1_& is a short `man' page that describes the command options for
PMW.
.next
&_share/pmw/PSheader_& is the PostScript header file for PMW output.
.next
&_share/pmw/psfonts/PMW-Music.pfa_& is the main PostScript music font. As of
release 4.03 it is a Type 1 PostScript font &-- hence the &_.pfa_& extension.
.next
&_share/pmw/psfonts/PMW-Alpha_& is an auxiliary music font. This is a Type 3
PostScript font (so no extension).
.next
&_share/pmw/fontmetrics/_& is a directory that contains font metric files
giving character widths and kerning information for the standard set of
PostScript fonts (such as &'Times-Roman'&) and the PMW music fonts. There are
also two files with &`.utr`& extensions; these contain translations from
Unicode code points to the default code points in the PostScript &'Symbol'&
font and the &'PMS-Music'& font.
.endlist
As well as the usual &(configure)& options, there is one that is specific to
PMW: &`--enable-b2pf`&. This causes PMW to be built with support for using the
B2PF library, which converts Unicode text strings from their base to their
`presentation' forms, a facility that is useful for scripts such as Arabic.
This option requires the B2PF library to be installed. See section
&<<SUBSECTb2pffont>>& for details of how to use this facility.
Once you have installed PMW, you can use the &(pmw)& command to generate
PostScript from input files, as described in chapter &<<CHAPrunningpmw>>&
below. However, before you can print pages or view the output on the screen,
you need to arrange for the PostScript music fonts to be available for your
printer or viewer. You can either cause the fonts to be included in every
output file, or configure your printer or viewer so that it knows where to find
them. Exactly what you have to do varies between systems. I hope the following
instructions will give enough hints to cover most cases.
.section "Including the music fonts in the output file"
.index "fonts" "including in the output"
.index "music font, including in the output"
If you use the &%-incPMWfont%& option on the &(pmw)& command line, or put it
in your &_.pmwrc_& file, PMW includes the music fonts in every output file that
needs them. This means that the output files are freestanding PostScript files
that should be printable or viewable without any special action. However, the
output files are larger by about 30&--40K for each of the two fonts. If you do
not mind this overhead, this is the easiest approach to take.
.section "Viewing PMW output on the screen"
.index "viewing music on screen"
.index &'GhostScript'&
.index "&(evince)& document viewer"
The &'GhostScript'& application can be used to view PMW output on screen,
either from a PostScript file written by PMW, or from a PDF after conversion by
the &(ps2pdf)& command. The &(gs)& command is very basic; a more friendly
interface is provided by front-end `wrapper' applications with names such as
&(ghostview)&, &(gview)&, or &(gv)&. Another possibility is to use the
general-purpose document viewer called &(evince)&, which can display PostScript
or PDF files and has the added advantage of showing thumbnails of all the
pages.
You can check your chosen viewer by displaying the expected output from the PMW
test files. There are six such files in the &_testdist/outfiles_& directory of
the PMW distribution. For example, assuming you have the &(gv)& command
installed:
.code
gv testdist/outfiles/Test01.ps
.endd
This is a page of a Mozart mass. The test files were all processed using PMW's
&%-incPMWfont%& command line option, so the output for each contains a copy of
the relevant PMW music fonts.
If you do not use the &%-incPMWfont%& command line option when processing your
own input files, &'GhostScript'& needs to be told where the PostScript music
fonts are before it can display a PMW output file or convert it into a PDF. One
easy way of doing this is to set the &`GS_FONTPATH`& environment variable, for
example:
.code
export GS_FONTPATH=/usr/local/share/pmw/psfonts
.endd
Setting this variable also works for &(evince)& because it makes use of
&'GhostScript'& when displaying a PostScript file. However, setting GS_FONTPATH
may not work when you try to print the music because the setting may not be
carried over into the printing environment. An alternative is to install
symbolic links from a suitable font directory to PMW's &_psfonts_& directory.
This should then also work for printing. You can find out which directories
&'GhostScript'& searches for its fonts by running the following command:
.code
gs -h
.endd
For example, if &_/usr/share/fonts/gsfonts_& is in the `search path' given by
the above command, you might use these commands:
.code
ln -s /usr/local/share/pmw/psfonts/PMW-Alpha \
/usr/share/fonts/gsfonts/PMW-Alpha
ln -s /usr/local/share/pmw/psfonts/PMW-Music.pfa \
/usr/share/fonts/gsfonts/PMW-Music.pfa
.endd
In addition, for some older versions of &'GhostScript'&, you might also need to
add this line to the file called &_Fontmap.GS_& that is found in the
&'GhostScript'& font directory:
.code
/PMW-Music (PMW-Music.pfa) ;
.endd
This tells &'GhostScript'& that the font called `PMW-Music' is to be found in
the file called &_PMW-Music.pfa_&. Newer versions of &'GhostScript'& do not
seem to need this, so first of all, try without.
Note that the &(gv)& command has a useful option called &%-watch%&; it causes
the file to be re-displayed whenever it changes. If you set this and leave
&(gv)& running, you can edit the input and reprocess it with PMW, and &(gv)&
will notice the updated output file and automatically re-display the page it
was previously displaying. This option can be made the default in a &_.gv_&
initialization file. If you are using &(evince)& this action happens
automatically.
.section "Problems with displaying staves and bar lines"
.index "staves" "incorrectly displayed"
.index "bar lines" "incorrectly displayed"
By default, staves and bar lines are output using characters from PMW's music
font. Some PostScript interpreters do not display these correctly on the
screen, and sometimes there are also printing problems. To help with these
issues, the way PMW works can be modified by command line options (see chapter
&<<CHAPrunningpmw>>&). If your output does not show staves or bar lines
correctly, experiment with these options to see if they can resolve the issue.
Note that default option settings can be put in your &_.pmwrc_& file.
.subsection "Missing staves"
.index "screen display" "missing staves"
.index "staves" "missing"
Staves are normally output using two characters that are 100 points and 10
points wide, respectively, at the default magnification. Some PostScript
interpreters cannot handle characters as wide as 100 points, and either display
nothing, or give errors. The &%-nowidechars%& option suppresses the use of the
wide characters.
.subsection "Gaps in staves"
.index "screen display" "gaps in staves"
Sometimes PMW output is displayed with gaps in the staves, even when
&%-nowidechars%& is used to suppress the use of wide stave characters. This is
sometimes just a problem with a screen display; the same file often prints
correctly. If the option &%-drawstavelines%& is used, staves are output as
PostScript drawing commands instead of as characters. This option overrides
&%-nowidechars%&.
.subsection "Gaps in bar lines"
.index "screen display" "gaps in bar lines"
Sometimes PMW output is displayed with gaps in bar lines that extend over
several staves. This is sometimes just a problem with a screen display; the
same file often prints correctly. If the option &%-drawbarlines%& is used,
bar lines are output as PostScript drawing commands instead of as characters.
.section "Antialiasing and the screen display"
.index "antialiasing"
When it is interpreting PostScript for display on the screen, &'GhostScript'&
can be run with or without antialiasing, which is a technique for making text
look better by adding pixels in various shades of grey round the edges of
characters, to fool the eye into seeing less jagged outlines. Before the
PMW-Music font was converted to a Type 1 font, this could give problems with
some of the straight-edged shapes. With the Type 1 font, there should be no
problem with antialiasing. However, the PMW-Alpha font is still a Type 3 font;
if you make use of PMW-Alpha, the screen display of some characters may be odd.
Fortunately, this problem applies only to screen display. Printers have a much
higher pixel resolution, and antialiasing is not needed even when it is
possible (which it is not on black-and-white printers).
.section "PDF files"
.index "PDF files"
You can use a command such as &(ps2pdf)&, which comes with &'GhostScript'&, to
turn a PostScript output file from PMW into a PDF file. If you are using
release 8 or later of &'AFPL GhostScript'&, characters from the PMW-Music font
are included as outlines, which means that the PDF can be displayed nicely at
any size on the screen. Earlier releases of &'GhostScript'& include the music
characters as bitmaps, which does not give such a good display. Characters from
the PMW-Alpha font are still included as bitmaps, because it is a Type 3
PostScript font.
.section "Printing PMW output on a non-PostScript printer"
.index "non-PostScript printer"
If you do not have a PostScript printer, or one that can interpret PostScript
directly, you have to use an application such as &'GhostScript'& to interpret
the output of PMW and convert it for your printer. In many Unix-like systems
the CUPS printing system is set up to do this automatically, so if you are
using CUPS it may `just work'.
.section "Printing PMW output on a PostScript printer"
.index "PostScript printer"
Unless you use the &%-incPMWfont%& command line option, the PostScript output
that PMW generates is not totally freestanding. It expects the PMW PostScript
music font to be loaded into the printer in advance. If this has not been done,
an error will occur.
If you have full control of a PostScript printer, you can load the Music
font(s) into it once, and then send any number of music files to be printed. To
do this, you need to know the printer's password. Then you must make a copy of
the PMW music fonts with the password included, for sending to the printer. The
fonts are distributed in the &_psfonts_& directory in the PMW distribution.
Near the top of each font file you will find these lines:
.code
%%BeginExitServer: 000000
%%serverdict begin 000000 exitserver
%%EndExitServer
.endd
.index "default" "password, PostScript printer"
The value 000000 is the default password in new PostScript printers. If
you haven't changed it, all you need to do is to remove the two percent signs
(which are PostScript comment characters) at the start of the second line, so
that it reads as follows:
.code
serverdict begin 000000 exitserver
.endd
Then if you `print' this file, the font will be permanently loaded into the
printer, until it is powered off. &*Note:*& you must not make this change on a
copy of the font that is to be used by &'GhostScript'&, because &'GhostScript'&
does not cope with such lines.
When a font is loaded into a PostScript printer, it may generate a warning
message. This is perfectly normal and can be ignored. The message is usually
something like this:
.code
%%[ exitserver: permanent state may be changed ]%%
.endd
If you do not have full control over the printer, or do not want to load the
fonts permanently, you should always use the &%-incPMWfont%& option on the PMW
command line, or put it in your &_.pmwrc_& file, so that the music fonts are
included in the PMW output. Alternatively, if you are using the CUPS printing
system, which uses &'GhostScript'& to interpret PostScript for printing,
ensuring that the music fonts are known to &'GhostScript'& may be sufficient.
.section "Uninstalling PMW"
.index "uninstalling PMW"
If you want to uninstall PMW, you can use the command:
.code
make uninstall
.endd
This removes the files that were installed. It does not remove directories.
.index-to I01
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "Running PMW" CHAPrunningpmw
.index-from I02 "command line interface"
.index "default" "output destination"
The PMW command has the following form:
.display
&`pmw`& [&'options'&] [&'input file'&]
.endd
The items in square brackets are optional. If no file name is given, input is
read from the standard input and by default the output is written to the
standard output. When a file name is given, the default output file name is the
input file with the extension &_.ps_& replacing any existing extension, or
being added if there is no extension. The default output destination can be
overridden in all cases by using the &%-o%& option. Error messages and
verification output are written to the standard error file, which can be
re-directed in the usual way. Here are some examples of PMW commands:
.code
pmw sonata 2>errors
pmw -p 3-4 mozartscore
pmw -format A5 -a5ona4 -pamphlet myscore
pmw -s 3 -o quartet.ps quartet.pmw
pmw -f viola -o quartet.ps -midi /tmp/quartet.mid quartet.pmw
.endd
.index "command line options"
.index "options" "command line"
The command line options are as follows:
.vlist
.vitem &%-a4ona3%&
There are several directives that control the size of the page images PMW
produces (&R; &<<SECTpapersizes>>&). In the common case, this size is identical
to the size of paper that is being used, in which case one image fits exactly
onto one piece of paper.
.index "two-up printing"
However, PMW also supports &'two-up'& printing, in which two page images are
printed next to each other on a larger piece of paper. This option specifies
that the images are A4-sized, but are to be output two-up, assuming A3 paper.
.vitem &%-a5ona4%&
The pages are A5-sized; print them two-up, assuming A4 paper.
.vitem &%-a4sideways%&
The paper is A4, but the printer feeds it sideways, so rotate the page images
before printing.
.vitem "&%-c%& <&'number'&>"
Set the number of copies to be printed as <&'number'&>. This number is honoured
by PostScript printers. It may not be honoured by other programs that interpret
PostScript.
.vitem &%-drawbarlines%&
.index "bar lines" "drawing"
Bar lines are normally output using characters from the music font. This option
causes them to be output using PostScript drawing commands. It may produce
better output in environments where some PostScript interpreters leave little
gaps in bar lines that extend over more than one stave. &%-dbl%& is a synonym
for &%-drawbarlines%&.
.vitem &%-drawstavelines%&
.index "stave lines" "drawing"
.index "stave lines" "thickness"
Staves are normally output using characters from the music font. This option
causes them to be output as individual lines, using PostScript drawing commands.
It may produce better output in environments where some PostScript interpreters
leave gaps in staves. The default thickness of drawn stave lines is 0.3 points,
scaled according to the relative stave size and any overall magnification. You
can change this by giving a number after the option. The units are tenths of a
point, so specifying, for example
.code
-drawstavelines 4
.endd
draws stave lines whose thickness is 0.4 points. A value of zero disables the
drawing of stave lines. &%-dsl%& is a synonym for &%-drawstavelines%&; a
non-zero value for this option overrides &%-nowidechars%&.
.vitem &%-duplex%&
Set the `duplex' option in the generated PostScript output. This should be
honoured by PostScript printers that can print on both sides of the paper (see
also &%-tumble%&).
.vitem &%-eps%&
.index "PostScript" "encapsulated"
.index "encapsulated PostScript (EPS)"
Write the output as encapsulated PostScript. This is useful if the music is an
illustration that will subsequently be included in another document. See
section &<<SECTpsinc>>& for details of how this option affects the processing
of included PostScript files. For one-off illustrations, combining &%-eps%&
with &%-incPMWfont%& is useful, so that the PMW-Music font is automatically
included. For a document with many musical illustrations, including the font
in each one is undesirable; it is better to make it available in some other
way.
One PMW user reported problems with EPS files when other special fonts were
also required. The solution was to pass all the fonts and the EPS file into the
open-source Scribus desktop publishing program, convert to Bézier
curves, then re-export as EPS. This removes font references, and produces a
file that can easily be embedded in any DTP program.
.vitem "&%-errormaximum%& <&'number'&>"
.index "errors" "maximum number of"
This option sets the maximum number of errors that may occur before PMW gives
up. The default is 40. This facility is provided mainly so that a test of
errors can generate a large number of them. &%-em%& is an abbreviation for
&%-errormaximum%&.
.vitem "&%-F%& <&'directory list'&>"
Search the directories in the colon-separated list for &_fontmetrics_& files,
before searching the default directory that was set up when PMW was built. This
option is useful when you want to make use of a non-standard font in text
strings without having to copy its fontmetrics file into the default directory.
Relative file names are taken as relative to the current directory, not to the
PMW input file's directory.
.vitem "&%-f%& <&'name'&>"
.index "format option"
This option specifies a format name, which is useful when the input file is set
up to generate output in several different formats. The format name can be
tested by the &%*if%& directive and used to vary the output. For example, a
piece might be arranged for either flutes or recorders. The user chooses words
to describe each different format, and specifies the appropriate one here. See
chapter &<<CHAPlastintro>>& for details of how to set up the input so as to
output different headings and so forth when different stave selections or
formats are requested.
.vitem "&%-H%& <&'file'&>"
Use the given file as the PostScript header file, instead of the default that
was set up when PMW was built. If a relative file name is given, it is taken as
relative to the current directory, not to the PMW input file's directory. This
option is unlikely to be of general use, but is helpful when testing new
versions of the header file. See section &<<SECTpsinc>>& for details of how
included PostScript files are processed.
.vitem "&%-help%& or &%--help%&"
Output a list of command line options, then stop. No file is read.
.vitem &%-includefont%&
This is an obsolete synonym for &%-incPMWfont%& and is now deprecated.
.vitem "&%-incPMWfont%& or &%incpmwfont%& or &%-ipf%&"
This option causes PMW to include the PMW-Music font within the PostScript
output that it generates. If the PMW-Alpha font is used, that is also included.
If you use this option, there is no need to install the font(s) for
&'GhostScript'& (or any other display program), nor do you need to download
them separately to a PostScript printer. However, it does mean that each PMW
output file is bigger by about 40K for PMW-Music and 31K for PMW-Alpha. Note
that this option applies only to PMW's music fonts. See the &%textfont%&
directive (&R; &<<SUBSECTtextfont>>&) for a way of including other fonts in the
output.
.vitem &%-manualfeed%&
Set the `manualfeed' option in the generated PostScript. Most PostScript
printers interpret this to mean that the paper should be taken from an
alternate input tray or slot. Some also require the user to push a button
before each page is printed.
.vitem "&%-midi%& <&'file'&>"
.index "MIDI" "command line option"
This option specifies that MIDI output should be written to the given file.
This is in addition to the PostScript output. Only a single movement can be
output as MIDI; when the input file contains multiple movements, the
&%-midimovement%& option (synonym &%-mm%&) can be used to select which one this
is. The stave selection specified by &%-s%& applies, and the bars that are
output can be selected by &%-midibars%& (synonym &%-mb%&). The page selection
option does not apply to MIDI output. See section &<<SECTmidi>>& for more about
MIDI output.
.vitem "&%-midibars%& <&'start'&>&%-%&<&'end'&>"
Limit the bars that are written to a MIDI file to the specified range (&%-mb%&
is a synonym). If this option is not given, the entire movement is included in
the MIDI output. The page selection option does not apply to MIDI output. If
the end bar number is omitted, but the hyphen is present, output continues to
the end of the movement. If just one number is given, just one bar is output.
.vitem "&%-midimovement%& <&'number'&>"
This option specifies which movement is to be output as MIDI (&%-mm%& is a
synonym). Only one movement can be output in this manner. The default is the
first movement in the file.
.vitem "&%-MF%& <&'directory list'&>"
Search the directories in the colon-separated list for the PostScript music
font files, before searching the default directory that was set up when PMW was
built. This option is mainly of use when testing PMW and new versions of the
fonts.
.vitem "&%-MP%& <&'file'&>"
Use the given file as the &_MIDIperc_& file, instead of the default that was
set up when PMW was built. If a relative file name is given, it is taken as
relative to the current directory, not to the PMW input file's directory. This
file contains translations between names and MIDI `pitches' for untuned
percussion voices. Apart from comment lines (starting with #) and empty lines,
each line in the file must begin with three digits, followed by a space, and
the instrument name, without any trailing spaces. For example:
.code
035 acoustic bass drum
036 bass drum 1
037 side stick
038 acoustic snare
.endd
.vitem "&%-MV%& <&'file'&>"
Use the given file as the &_MIDIvoices_& file, instead of the default that was
set up when PMW was built. If a relative file name is given, it is taken as
relative to the current directory, not to the PMW input file's directory. This
file contains translations between names and MIDI voice numbers. Apart from
comment lines (starting with #) and empty lines, each line in the file must
begin with three digits, followed by a space, and then the instrument name,
without any trailing spaces. The same number may appear more than once. For
example:
.code
001 piano
001 acoustic grand piano
002 hard piano
002 bright acoustic piano
003 studio piano
003 electric grand piano
.endd
.vitem &%-norc%&
If this option is used, it must be the very first option that follows the
&(pmw)& command name. It causes PMW not to read the user's &_.pmwrc_& file (&R;
&<<SECTsetdefop>>&).
.vitem &%-norepeats%&
When generating a MIDI output file, do not repeat repeated sections of the
music (&%-nr%& is a synonym).
.vitem &%-nowidechars%&
This option stops PMW from using wide stave characters when printing staves. It
is provided because it seems that some PostScript interpreters cannot deal
correctly with characters whose width is 100 points at the default
magnification (compared with 10 points for the narrow versions). A 310-point
5-line stave is normally printed using the string FFFC. (The code numbers of
wide and narrow 5-line stave characters in the music font correspond to F and C
in text fonts.) With &%-nowidechars%&, the same stave is printed as
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC. &%-nw%& is an abbreviation for
&%-nowidechars%&. The &%-drawstavelines%& option overrides this option.
.vitem "&%-o%& <&'file'&>"
Write the PostScript output to the given file, or, if a single hyphen is given
as the file name, to the standard output.
.vitem "&%-p%& <&'list'&>"
Output only the specified pages. These can be individual page numbers, or pairs
of numbers separated by a hyphen, to specify a range. Use commas to separate
items in the list.
.code
pmw -p 4,6,7-10,13
.endd
This specifies that pages 4, 6, 7 to 10, and 13 are to be output. The page
selection does not apply to MIDI output; use &%midibars%& and &%midimovement%&
instead.
.vitem &%-pamphlet%&
.index "pages in pamphlet order"
The &%-pamphlet%& page ordering option is useful when a two-up page output
format is selected by &%-a4ona3%& or &%-a5ona4%&. In pamphlet mode, the piece
is notionally extended with blank pages, if necessary, so that the number of
the last page is a multiple of four. Page 1 is then paired with the last page,
page 2 with the second last page, and so on. The odd-numbered page of the pair
is always output on the right (except when right-to-left printing is enabled
(&R; &<<SUBSECTrighttoleft>>&), but that is unusual). The resulting pages, if
printed two-sided, can be stacked together and folded in the middle to form a
`pamphlet'.
If the first page of the piece has a number greater than 1, earlier pages are
output as blanks, as are any internal missing pages &-- these can be created by
using page increments other than one, or by explicitly skipping pages.
Outputting all pages at once on a single-sided printer is useful for producing
master copies for reproduction elsewhere. If you want to produce a final
two-sided copy directly, use &%-pamphlet%& with &%-printside%& 1 to output all
the first sides, and then use &%-printside%& 2 to output the second sides for
printing on the backs of the same sheets. On a duplex (two-sided) printer, you
may need to set the &%-tumble%& option to get all the pages the right way up.
When selecting individual pages to output with the pamphlet option, you should
select only one member of each pair. The partner page is automatically added to
each selected page, so selecting both pages will result in two copies being
output. For normal two-up printing, PMW centres the page images in the half
pages in which they appear, but in pamphlet mode they are abutted together in
the middle. This means that, when the sheetsize is smaller than half the paper
size, any marks printed outside the sheetsize (crop marks, for example) are
visible.
.vitem "&%-printadjust%& <&'x'&> <&'y'&>"
.index "image position adjustment"
Experience has revealed that not all printing methods position the image in
exactly the same position on the page. These two values specify a movement of
the image on the page, in printers' points (1/72 of an inch). The movement is
relative to the normal reading orientation of the page images (which may be
rotated on the paper). The first value is left-to-right, and the second is up
and down. Positive values move the image to the right and upwards,
respectively, and negative values move it in the opposite directions.
.vitem "&%-printgutter%& <&'x'&>"
This option specifies a distance by which righthand (recto) page images are
moved to the right, and lefthand (verso) page images are moved to the left,
thus creating a `gutter' for binding when the images are printed doublesided.
The &%-printgutter%& setting applies only when pages are being printed 1-up.
It is ignored for any of the 2-up printing styles.
.vitem "&%-printscale%& <&'n'&>"
Scale the output page images by <&'n'&>. This differs from the PMW
&%magnification%& heading directive (&R; &<<SECTmagnification>>&) in that it
affects the size of each page, whereas &%magnification%& applies only to the
contents of the page.
.vitem "&%-printside%& <&'n'&>"
.index "page side selection"
Output only odd or only even pages; <&'n'&> must either be 1 or 2. The side
selection options make it easy to print on both sides of pages by feeding them
through the printer twice, without having to set up an explicit page selection
each time. When pamphlet mode is selected, it is the lower of the two page
numbers that is tested. When a 2-up non-pamphlet mode is selected, this option
is disabled, and all selected pages are always output.
.vitem &%-reverse%&
Output the pages in reverse order. The default order is in ascending sequence
of page number if no pages are explicitly selected; otherwise the order is as
selected by the user. Reverse order is precisely the opposite of this. It is
useful for printers that stack face-up, and also in some two-sided printing
operations.
.vitem "&%-s%& <&'list'&>"
Output only the specified staves. These can be individual stave numbers, or
pairs of numbers separated by a hyphen, to specify a range. Use commas to
separate items in the list.
.code
pmw mozart -s 1,3-5,9-12
.endd
Setting values here is how you select one or more individual parts to be
printed from a score. For example, in a work for choir and orchestra, to create
a vocal score by printing only the voice parts, one might specify &`11-14`& if
the vocal parts were on staves 11&--14. More often, just a single number is
given, in order to print out an individual instrumental part. See chapter
&<<CHAPlastintro>>& for details of how to set up the input so as to output
different headings and so forth for different stave selections.
.vitem "&%-t%& <&'number'&>"
.index "transposition" "command line option"
Specify a transposition, in semitones. A positive number specifies upwards
transposition, and a negative one downwards transposition. A transposition of
zero may also be entered; this is not the same as no transposition at all. For
more details about transposition, see section &<<SECTtransposition>>&.
.vitem &%-tumble%&
When &%-duplex%& is set, &%-tumble%& sets the PostScript option for `tumbled'
duplex printing.
.vitem "&%-V%& or &%--version%&"
Output the PMW version number to the standard output, then stop. No file is
read.
.vitem &%-v%&
Output verification information about the typesetting to the standard error
file (&R; &<<SECTinfo>>&).
.endlist
.section "Debugging options"
.index "options" "debugging"
The following options are of interest only to a PMW maintainer. They are listed
here for completeness, but no details are included.
.vlist
.vitem &%-debug%&
Write general debugging information to the standard error file.
.vitem "&%-dsb%& <&'m'&>,<&'s'&>,<&'b'&>"
Write internal debugging data for the contents of bar <&'b'&> (an absolute bar
number) on stave <&'s'&> in movement <&'m'&> to the standard error file. If
only one number is given, it is taken as a bar number in stave 1 of the first
movement; if only two numbers are given, they are taken as a stave and bar
number in the first movement.
.vitem "&%-dtp%& <&'n'&>"
During formatting, write internal positioning data for bar <&'n'&> (an absolute
bar number) in any movement (there is usually only one when debugging at this
level) to the standard error file. Sometimes a bar may be formatted more than
once; there will be output each time. If the number is given as -1, positioning
data is output for all bars.
.endlist
.index-to I02
.section "Setting default command-line options" SECTsetdefop
.index "options" "command-line, default"
.index "default" "command-line options"
There is a simple facility for specifying options that you always want to be
set. When PMW starts up, it looks in the user's home directory for a file
called &_.pmwrc_&. If this file exists, its contents are read and used to
modify the PMW command line. White space (spaces, tabs, or newlines) in the
file are used to separate items. Each item is added to the command line, before
the given arguments. Thus, for example, if you always want to make use of the
&%-nowidechars%& option, all you need to do is to create a &_.pmwrc_& file that
contains:
.code
-nowidechars
.endd
The effect of this is the same as if you type &`-nowidechars`& immediately
after &`pmw`& every time you run it. If you insert an option that requires
data, the data item must also be given in the &_.pmwrc_& file, otherwise
an error occurs. For example, if you always want to create MIDI output and
write it to a fixed file name, the file might contain:
.code
-midi /usr/tmp/pmw.midi
.endd
Note that PMW does not allow options to be repeated, so if an option is present
in the &_.pmwrc_& file, it cannot also be given on the command line. There is
no way to override individual options that are set in the &_.pmwrc_& file.
However, if the first option on the command line is &%-norc%&, the &_.pmwrc_&
file is not used.
.section "Information about the piece" SECTinfo
.index "information about the piece"
.index "range of notes on a stave"
.index "staves" "range of notes on"
.index "tessitura"
To understand all of this section, you need to be familiar with the way PMW
handles pitches and dimensions. It is placed here because it follows on from
the command line options, but it is best skipped on a first reading. Here is an
example of the information that is output when &%-v%& is selected:
.code
Data store used = 76K (stave data 37K)
MOVEMENT 1
Stave 1: 51 bars; range E' to A'' average A'
Stave 2: 51 bars; range $B to D'' average E'
Stave 3: 51 bars; range E' to F'' average $B'
Stave 4: 51 bars; range F` to D' average D
PAGE LAYOUT
Page 1 bars: 1-4 5-8 (3) 9-12
Space left on page = 131 Overrun = 61
Page 2 bars: 13-17 18-22 23-25 (10) 26-28
Space left on page = 5
Page 3 bars: 29-31 32-34 35-38
Space left on page = 159 Overrun = 33
Page 4 bars: 39-42 (15) 43-46 47-48 49-51
Space left on page = 5
.endd
For each movement in the piece, PMW displays a bar count for each stave, the
pitch range of notes on the stave, and the average pitch. The count includes
only properly counted bars; if there are any uncounted bars, they are shown in
parentheses with a plus sign. For example, if a piece starts with an uncounted,
incomplete bar, the bar count might be shown as `24(+1)'.
The pitches are specified at octave zero, that is, starting at the C below
middle C. The average pitch of a vocal part is some kind of measure of the
tessitura. If there is more than one movement in a piece, the overall pitch
ranges and average pitches for each stave are given at the end.
The `page layout' section shows how PMW has laid out the music on the pages.
In the example above, three systems have been put on page 1, containing bars
1&--4, 5&--8, and 9&--12, respectively. If any system is too short to be
stretched out to the full line length (or if stretching was not requested) an
asterisk is printed after it. After the range of bars for each system, the
amount of horizontal overrun is given in parentheses, provided it is less than
30 points. The overrun is the distance by which the linelength would be
exceeded if another bar were added to the system.
The first line in the example above means that bars 5&--9 were three points too
long for the linelength, which is why the second system was ended after bar 8.
This information can be useful when you are trying to alter the way the bars
are allocated to systems (see also the &%layout%& heading directive (&R;
&<<SUBSECTlayout>>&).
`Space left on page' is the amount of vertical space left on the page. It is
the amount by which stave or system spacings can be increased without causing
the bottom system to be moved over to the next page. `Overrun' is the amount of
extra space that is needed to fit another system onto the page. It is the
amount by which stave or system spacings would have to be reduced in order for
the first system of the next page to be brought back onto the bottom of this
page. It is not shown if the value is greater than 100 or if the page break was
forced.
.section "PMW input errors"
.index "input errors"
.index "errors" "in input"
When PMW detects an error in the input file, it writes a message to the
standard error file. In most cases it carries on processing the input file, so
that as many errors as possible are detected in the run. As is the case in many
programming languages, certain kinds of error can cause it to get confused and
give misleading subsequent messages. If you do not understand all the error
messages, fix those that you do, and try again. It is very easy to make simple
typographic errors that leave a bar with the wrong number of notes in it. An
example of the message that PMW outputs is as follows:
.code
* Incorrect length for bar 1, stave 1 - too long by 1 quaver
* File "K495.pmw", near line 17:
rrf'-g |
<
.endd
In this case a minus sign (indicating a quaver) has been omitted after the note
&`g`&, which is therefore taken as a crotchet. The input line in which the
error was detected is shown, and the character `<' is output underneath the
position where the error was detected. In this example, PMW has just reached
the bar line. The line number is given using the phrase `near line &'n'&'
because sometimes PMW has read on to the next line before detecting the error.
Most errors cause PMW to stop processing before it writes anything to the main
output. However, there are a few errors that do not stop the output from being
written. An example is the detection of a bar that is too wide for the page;
PMW diagnoses this, and then squashes it to fit. The messages for all these
errors start with the word `warning'.
.section "Return codes"
.index "return codes"
PMW returns zero after a successful run, 1 if there have been warnings but no
actual errors, 2 if any errors were detected but processing continued, and 3 if
there was a serious error that caused processing to be abandoned.
.section "PostScript inclusions" "SECTpsinc"
.index "PostScript" "inclusions"
.index "including PostScript"
The output of PMW starts with an included PostScript header file. There are
also some directives (for example, &%psheading%&) that allow you to include
custom PostScript code, either as a literal string or from a file, at various
points in the output. These features are not normally required, but are
provided for those who are familiar with PostScript and who want to do things
that PMW cannot normally do.
.index "PostScript" "encapsulated"
.index "encapsulated PostScript (EPS)"
All PostScript files that are included by PMW are treated in the same way. If
the file is itself an encapsulated PostScript (EPS) file, additional code is
output to save the PostScript environment before the inclusion, and to restore
it afterwards. This does not happen for non-EPS files or literal string
inclusions. When including a file, lines that start with &`%EPS`& followed by a
space are included, with the first five characters removed, only when the
PMW output is itself an encapsulated PostScript file (see the &%-eps%& option
above). For non-EPS output, such lines are omitted. Any other line that starts
with a single percent sign is omitted, as are blank lines. However, lines that
start with two percent characters are copied to the output.
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "Getting started with PMW encoding" CHAPfirstintro
In this and the next chapter we cover the basic facilities of the way PMW input
is encoded, omitting some of the more exotic features in order to keep the
explanations simple. Full information is given in the reference section of this
manual, which starts at chapter &<<CHAPreference>>&.
We start with the first six bars of the British National Anthem. It is
suggested that you try out this example as you read this section. First, use
your favourite text editor to create a file containing this text:
.code
heading "|National Anthem"
breakbarlines
underlaysize 9.5
notespacing *1.1
key G
time 3/4
[stave 1 treble 1 text underlay]
"God save our gra-cious Queen,"
g g a | f. g- a |
"Long live our no-ble Queen,"
b b c' | b. a- g |
"God save the Queen."
a g f | G. |
[endstave]
[stave 2 bass 0]
g` b` c | d. e- f | g e c | d. #d- e | c d d | G`. |
[endstave]
.endd
You may use any name you like for the file, and put it in any convenient
directory. Let's suppose it's called &_natanth_&. Process the file with PMW by
running this command:
.code
pmw -incPMWfont natanth
.endd
Assuming you have not made any typing mistakes, there will be no output on the
screen, but a new file called &_natanth.ps_& will have been created. You can
view this on screen by running:
.code
gv natanth.ps
.endd
(or by using another PostScript viewer such as &(evince)&). The result should
look like this:
.music music01 88 0,-18 centre
If you have made a mistake, one or more error messages will be written to the
standard error file, and should therefore appear on your screen. The messages
should be self-explanatory. Correct the error(s), and try again. If you did not
make any typing mistakes, you might like now to deliberately introduce one or
two, to gain familiarity with error handling. Omitting one of the vertical bar
characters is a common mistake, leading to an overlong musical bar.
We will now explain what the different parts of this input file mean to PMW.
The data is in two parts: first there is heading information, such as the
printed heading and key and time signatures for the piece, and then the music
for each stave is given separately. The heading in this example contains six
&'heading directives'&. They have been put on separate lines for readability,
but this is not a requirement; you can have several directives on one line if
you like.
.code
heading "|National Anthem"
.endd
.index "| (vertical bar) in strings"
The first directive provides a text heading for the piece. The text itself must
be supplied inside double quote marks. Heading lines normally consist of a left
part, a centred part, and a right part. The division between these is marked by
a vertical bar character in the text. This example prints nothing at the left
(because there is nothing before the vertical bar), and nothing at the right
(because there isn't a second vertical bar). In other words, the entire title
is centred.
.code
breakbarlines
.endd
.index "&%breakbarlines%&"
The second directive causes PMW to make a break in the bar lines after each
stave. Without this, the bar lines would be drawn continuously from the top of
the first stave to the bottom of the second. It is conventional not to have bar
lines between staves when there is vocal underlay (lyrics), as they can get in
the way of the words. In orchestral scores you may want to have bar line breaks
between different groups of instruments, and this can be achieved by listing
the stave numbers after which you want the breaks:
.code
breakbarlines 4, 8, 12
.endd
This breaks the bar lines after staves 4, 8, and 12.
.code
underlaysize 9.5
.endd
The third directive sets the font size for the underlay text (the sung words).
Font sizes are given in &'points'&, the traditional measure of type size used
by printers.
.index "default" "text size"
.index "text" "default size"
The default size for all text in PMW is 10 points; choosing a slightly smaller
size for underlay is often helpful in fitting in the words.
&*Note*&: The music above and in all the following examples in this manual is
shown at 0.85 times its normal size, so the type sizes you see here are smaller
than they will be if you print the example yourself.
.code
notespacing *1.1
.endd
The fourth directive is an instruction to PMW to increase its normal horizontal
note spacing by a factor of 1.1 (the asterisk is being used as a multiplication
symbol). The standard note spacing is suitable for instrumental music. When
vocal underlay is involved, it often improves the layout if the spacing is
increased by a factor of between 1.1 and 1.2.
PMW automatically increases the space between two notes in a bar if this is
necessary to avoid two underlaid syllables colliding, but if this happens a
lot, the spacing of the notes can look very strange. It is best to set the note
spacing sufficiently wide that most of the layout is determined by the music,
with only the occasional adjustment for the words.
.code
key G
.endd
The fifth directive sets the key signature. If no key signature is given, C
major is assumed. Minor keys are given by adding the letter `m', for example,
&`Am`&. Sharp and flat key signatures are given using the standard accidental
notation in PMW. A sharp is represented by the character &`#`&, which is easily
remembered. Unfortunately, there are no keys on the computer keyboard that
resemble flats or naturals, so instead the two keys that are next to &`#`& on
some keyboards were chosen: &`
gemini - kennedy.gemi.dev
& for a flat (think `Dollar' for `Down') and
&`%`& for a natural. For example, the key signatures C sharp minor and G flat
major are coded as &`C#m`& and &`G
gemini - kennedy.gemi.dev
& respectively.
.code
time 3/4
.endd
The sixth directive sets the time signature. If no time signature is given, 4/4
is assumed. As well as the usual numeric time signatures, the letters &`C`& and
&`A`& can be given, signifying `common' and `alla breve' time. These are
printed as &{{^}}& and &{{_}}& respectively.
The heading ends and the stave data begins with the first line that starts with
a square bracket:
.code
[stave 1 treble 1 text underlay]
.endd
You will notice that a bit further down there is a line containing just
&`[endstave]`&. This marks the end of the data for the first stave. Each
stave's data is always contained between &%[stave]%& and &%[endstave]%&.
The data itself consists of a mixture of encoded music, words, bar lines, and
so on, and also &'stave directives'&. To make it clear what is what, the stave
directives are enclosed in square brackets, and they are shown in brackets
whenever they are mentioned in this manual. Several stave directives can appear
in succession within a single pair of brackets.
The number following the word `stave' in the &%[stave]%& directive gives the
number of the stave. The top stave of a system is numbered 1, the next one down
is numbered 2, and so on. PMW can handle up to 63 staves in a system. Usually,
a clef-setting directive comes next, as in both staves of this example, where
the first stave uses the treble clef and the second stave the bass clef. The
number that follows the clef name sets the &'current octave'& for the notes of
the stave. PMW octaves run from C up to B, and octave number 1 starts at middle
C. It is usual, therefore, to set the current octave to 1 when using the treble
clef, and to 0 when using the bass clef, as has been done here.
The remaining stave directive, &`text`& &`underlay`&, sets the default type for
any text strings in the first stave. PMW supports several different kinds of
text, as we shall see later, and one of them can be set as the default for a
stave. Instances of strings of other types then have to be marked as such. When
a stave has vocal underlay in it, it is usual to set the default as above,
because by far the majority of the text will be underlay.
So at last we come to the music and words of the first stave:
.code
"God save our gra-cious Queen,"
g g a | f. g- a |
"Long live our no-ble Queen,"
b b c' | b. a- g |
"God save the Queen."
a g f | G. |
.endd
.index "underlay"
The vocal underlay is given as several text strings, each preceding the
notes to which it relates. You can split up underlay into strings that are as
long or as short as you like. PMW automatically distributes the syllables to
the notes that follow. Single hyphens are used to separate the different
syllables of the words, as in `gra-cious' and `no-ble', but PMW supplies as
many printed hyphens as necessary to fill the space between them when they are
printed. Text strings are not restricted to just the characters on the computer
keyboard; see section &<<SUBSECTescaped>>& for details of how to access other
characters.
The music itself is divided up into bars by the vertical bar character. PMW
checks that the contents of a bar agree with the time signature, and complains
if there are too many or too few notes (though it is possible to turn this
check off).
.index "notes" "pitch"
.index "pitch of note"
The notes are encoded using their familiar letter names. Because we
set the current octave to be octave 1, the letter &`g`& in the first bar
represents the G above middle C. The only note on this stave that does not lie
in octave 1 is the last note of the third bar, the C above middle C. It is
encoded as &`c'`& because each quote that follows a note letter raises the
note by one octave.
.index "length" "of notes"
The duration of a note is primarily determined by whether a capital (upper
case) letter or small (lower case) letter is used. A lower case letter stands
for a crotchet, and an upper case one is used for a minim, as in the last bar
of this stave. Further characters are used to adjust the duration: a minus sign
(hyphen) after a lower case letter turns the crotchet into a quaver, the hyphen
being mnemonically like the flag used to distinguish a printed quaver from a
crotchet.
.index "notes" "dotted"
A dotted note is coded by adding a full stop, as in the second, fourth, and
last bars.
Turn now to the second stave:
.code
g` b` c | d. e- f | g e c | d. #d- e | c d d | G`. |
.endd
We see two new features. The first two notes, and the last one, are below the
current octave for this stave, which was set as octave 0 (one below middle C).
To lower a note by one octave, a grave accent is used, because it is a symbol
which is the `opposite' of an ordinary quote. In bar four there is a note with
an accidental. Accidentals are entered before note letters because they print
before notes. The characters used for accidentals were described above when
discussing key signatures, but to remind you:
.itable none 0 0 2 12 left 100 left
.row &`#`& "is used for a sharp"
.row &`
gemini - kennedy.gemi.dev
& "is used for a flat"
.row &`%`& "is used for a natural"
.endtable
Should you need double sharps or double flats, just type the character twice.
PMW also has some basic support for half accidentals (&R;
&<<SUBSECThalfaccs>>&). The spacing used in this example was chosen to make it
easy to read. PMW does not require spaces to appear between notes or before bar
lines, so the first two bars of the first stave could equally well appear like
this:
.code
gga|f.g-a|
.endd
However, spaces must not be used between any of the characters that make up the
encoding for one note. For example, &`#`&&~&`c`& would not be recognized
because of the space between the &`#`& and the &`c`&. Normally, you should put
in spaces where it helps you to see the various items in a bar. Wherever one
space is allowed, you may put as many as you like. You may also start a new
line in the input at most places where a space is allowed, for example, between
notes, or between text strings and notes. Most people try not to have a line
break in the middle of the notes of a bar, as this makes the file easier to
read.
.index "@ (comment) character"
.index "annotating input"
When you start entering longer pieces, you may find it helpful to annotate the
input file to make it easier to find your way around it. PMW recognizes the
character &`@`& as a `comment character' &-- anything on an input line that
follows &`@`& is completely ignored. So, for example, you could have a line
such as:
.code
@ This is the pedal part
.endd
at the start of a stave. It is also a good idea to put a bar number in the
input at the end of each input line, like this:
.code
g g a | f. g- a | @2
b b c' | b. a- g | @4
a g f | G. | @6
.endd
We have now covered everything in the National Anthem example. In the next
chapter we will introduce other features of the PMW encoding, but without
showing the complete file every time. It particular, the &%[stave]%& and
&%[endstave]%& directives will normally be omitted. However, before doing that
we introduce a general feature that can be used to simplify and customise PMW
input files.
.section "Simple macros" SECTmacro
.index "macros" "definition"
.index "macros" "insertion"
A &'macro'& is a concept found in computer programming languages and in some
kinds of wordprocessing systems. The idea is very simple: whenever there is a
sequence of input characters that are going to be repeated several times in a
document, the sequence is given a name. Referring to the name later in the
input calls up the required characters. There are several advantages in using a
macro for a repeated character sequence. Not only does it save typing, but it
also guarantees that the same input string is used every time, thus ensuring
consistency. In addition, if a change needs to be made to the string, it only
has to be done once.
Simple macros are introduced here because they are frequently used for text
strings that are repeated in a piece &-- typically strings such as &'mf'&,
&'ff'&, etc. Consider the following input line:
.code
.endd
.index "&%*if%&"
.index "&%*else%&"
.index "&%*fi%&"
Because they are preprocessing directives, each &%*if%&, &%*else%&, or &%*fi%&
must appear on a line by itself. In the example above, &%*if%& tests to see
whether a full score is being printed, and if so, sets the magnification to
0.9. Otherwise it sets it to 1.3. PMW considers that a score is being printed
if no staves are selected by the &%-s%& command line option. The &%*if%&
directive can also test for individual stave selections, and this is the way to
print appropriate headings:
.code
if stave 1
heading "Violin I"
fi
if stave 2
heading "Violin II"
fi
if stave 3
heading "Viola"
fi
if stave 4
heading "Violoncello"
fi
.endd
The `stave' test succeeds if the given stave, and only the given stave, is
selected, but it is possible to give a list or range of staves (and to use the
plural `staves'):
.code
if staves 1-2
heading "Violins"
fi
.endd
.index "format option"
Finally, the &%*if%& directive can be used to test for an arbitrary &'format
name'& defined by the user. You specify the format using the &%-f%& option in
the PMW command line. It can be any word that you like. For example, if you
wanted to print out the string parts from a score, instead of explicitly
specifying the stave numbers each time, you could specify `strings' as the
format, and use input such as:
.code
if strings
selectstaves 4-9
fi
.endd
The &%selectstaves%& directive has the same effect as selecting staves by the
&%-s%& command line option, provided it precedes any tests on the stave
selection. This facility can be put to many other uses for varying the format
of the output.
It is not necessary to indent the directives that appear between &%*if%& and
&%*fi%&, but it helps make the input more readable. These conditional
preprocessing directives can be used anywhere in a PMW file, not just in the
heading portion. Here is an example that shows how to print rest bars in a
score, but cue bars in a part:
.code
[stave 6 "Trumpet" treble 1]
[20] R! |
if score
[2] R! |
else
"(flute)"/a [cue] g'f'e' | [cue] C'. |
fi
.endd
The &%[cue]%& directive specifies that the remaining notes in the bar are to
be printed at the cue note size.
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "PMW reference description" CHAPreference
The preceding chapters describe the basic features of the PMW music encoding in
an introductory manner, in an order suitable for this purpose. Using only the
material therein, you should be able to typeset a wide variety of music.
However, there are many special-purpose features that have not yet been
covered. The remainder of this document is written in the form of a reference
manual. It contains a complete description of PMW input files, repeating in
more detail some of what has gone before.
.index "reference syntax"
.index "syntax for reference section"
When describing the syntax of directives, use is often made of one or more
italic words in angle brackets, for example:
.display
&`tripletfont`& <&'fontsize'&> <&'name'&>
.endd
What this means is that the bracketed italic words must be replaced by some
specific instance of what they describe (in this case, values for the font size
and the font name) when the directive is used. This is an example of the use
of &%tripletfont%&:
.code
tripletfont 8 italic
.endd
Frequently, when the required value is a single number, &'n'& or some other
single letter is used. In the example above, <&'fontsize'&> was replaced by a
single number; however, more complicated ways of specifying the size of a font
are possible (&R; &<<SECTfontsize>>&).
The following sections describe the format of PMW input files, and then discuss
a number of general features, with references to particular directives.
Complete descriptions of the directives themselves are not given here; they may
be found in &'Heading directives'& and &'Stave directives'& (chapters
&<<CHAPheaddir>>& and &<<CHAPstavedirectives>>&). The chapter in between,
&'Stave data'& (chapter &<<CHAPstavedata>>&), contains the specification of all
items other than directives that may appear as part of a stave's data.
.section "Format of PMW files" SECTfileformat
.index "input file format"
.index "file format"
.index "format of input file"
A file containing input for PMW is an ordinary text file that can be
constructed using any available text editor or wordprocessor. The input is in
free format. Outside quoted strings, there is only one circumstance in which
the use of white space is necessary, and that is
.index "space character"
to delimit an item when there would otherwise be ambiguity, for example, when a
word is followed by another word. However, spaces are allowed between items,
and can be profitably used to increase the readability of the file. Other than
in quoted strings, a sequence of spaces is equivalent to one space.
.index "@ (comment) character"
.index "comment character"
.index "annotating input"
The character &`@`& is a comment character; if it appears outside a quoted
string, the rest of the input line is ignored. This provides a way of
annotating PMW input files. The first line of a file is very often something
like this:
.code
@ Created by Christopher Columbus, October 1492
.endd
.subsection "Line breaks"
.index "line breaks"
Line breaks in a PMW input file are equivalent to spaces, except in these
circumstances:
.ilist
When a line contains a comment (see above), all characters from the
introductory &`@`& character to the end of the line are ignored.
.next
Line breaks are not permitted within the options that follow a note between two
backslash characters, whereas other white space is allowed.
.next
Line breaks are not permitted within the arguments of a macro call (&R;
&<<SECTdefine>>&), nor within the argument of a string repetition (&R;
&<<SUBSECTstringrepetition>>&).
.next
Preprocessing directives (&R; &<<SECTpreprocess>>&) always take up a complete
line of their own, and may not continue onto subsequent lines.
.next
When a directive takes a number of numerical arguments, these can be separated
by commas and/or white space. However, if the list of numbers continues onto
the next line, the final one on the first line must be followed by a comma, to
indicate that another number follows.
.endlist
.subsection "Ignoring line breaks" SUBSECTconcatenation
.index "line breaks" "ignoring"
.index "line concatenation"
.index "concatenating input lines"
.index "lines" "concatenating"
.index "&A3; (line concatenator)"
The restrictions on line breaks just described may occasionally cause a very
long line to be required. For example, a macro that generates a number of bars
may have quite a long replacement string. To aid readability in such cases, a
feature is provided for joining two or more input lines into one long line. If
an input line ends with three ampersands (&`&A3;`&), the ampersands and the
newline are removed, and the next line is concatenated, before any other
processing. For example,
.display
&`*define &A3;`&
&`cresc &A3;`&
&`"Crescendo"/b`&
.endd
is converted into the single line
.code
define cresc "Crescendo"/b
.endd
before being processed.
.subsection "Macro insertion and repetition"
.index "&& (insert) character"
.index "insert character"
.index "macros" "insertion"
In addition to its use in line concatenation, the character &`&&`& is an insert
character that is recognized at any point in the file. It must be followed
either by an asterisk and a number, or by the name of a previously-defined
macro. The former syntax is used for repeating a sequence of characters (&R;
&<<SUBSECTstringrepetition>>&). If a macro name follows, the macro's contents
are inserted at that point &-- for details, see the description of the
&%*define%& preprocessing directive in section &<<SECTdefine>>&. If a literal
&`&&`& character is actually required in the input, it must be entered as
&`&&&&`&.
.subsection "Case sensitivity"
.index "case-sensitivity"
PMW is case-sensitive. That is, it distinguishes between capital (upper case)
and small (lower case) letters. The only places where case does not matter are:
.ilist
In the names of directives (&`KEY`& is equivalent to &`key`&);
.next
In the names of key signatures (&`E$M`& is equivalent to &`e$m`&);
.next
In the `common' and `cut' (alla breve) time signatures (&`C`& and &`A`& are
equivalent to &`c`& and &`a`&);
.next
In format words used to specify alternative forms of output;
.next
In words following the &%*if%& preprocessing directive.
.endlist
.subsection "Heading information"
.index "file heading"
.index "heading" "for PMW file"
A PMW file starts off with a number of items collectively known as the
&'heading'&. These provide information that applies to the whole piece of
music, for example, one or more title lines, and they may also change the
values of parameters such as the line length that control the final layout on
the page.
.index "title pages"
If the title lines fill up a lot of the page, there may be insufficient
room for the first system of music, which is therefore printed on the next
page. This gives a way of producing a title page followed by pages of music,
all from a single input file. The heading is terminated by the first unquoted
opening square bracket in the file, and may be completely empty.
.subsection "Stave information"
Following the heading there is information for each stave, in this form:
.index "&%[stave]%&"
.display
&`[stave `&<&'n'&> <&'additional data'&>&`]`&
<&'notes and other stave items'&>
&`[endstave]`&
.endd
A description of the &%[stave]%& directive is given in section
&<<SUBSECTstave>>&.
.index "maximum number of staves"
There may be up to 63 normal staves, numbered from 1 to 63, defined in
increasing numerical order. Data may also be supplied for a stave numbered 0,
which must be first and which has special properties (&R; &<<SECTstave0>>&).
The normal staves are output in numerical order down the page. If a stave
numbered &'n'& is present, all the staves with numbers lower than &'n'&
.index "missing staves"
.index "staves" "missing"
are automatically supplied as empty staves if they do not appear in the input.
For example, if only staves 2 and 4 are given, empty staves 1 and 3 are
manufactured.
.index "concert posters"
.index "posters"
A PMW input file need not contain any stave data at all; in this circumstance
the only output will be the headings and footings, on a single page. This is a
slightly eccentric way of printing concert posters. As the heading section is
also optional, it follows that a completely empty file is also valid; its
output is one blank page.
.subsection "Multiple movements" SUBSECTmovement
.index "movement" "specifying"
.index "&%[newmovement]%&"
A PMW file may contain more than one movement, that is, the piece may be split
up into several independent sections, each with its own title. It is worth
doing this if there is some possibility of not having to start a new page for
each movement, which is sometimes the case when instrumental parts are being
printed. If you know that each movement will always start on a new page, it is
usually best to keep each movement in a separate file. (See the &%*include%&
preprocessing directive (&R; &<<SUBSECTinclude>>&) for a way of including a
common heading when processing each file.)
The term `movement' is something of a misnomer. All it means to PMW is that
another piece of music is to follow, possibly on the same page as the previous
one. A `movement' may be as short as a few bars of a musical example.
.index "&%[newmovement]%&"
The start of a new movement is indicated by the &%[newmovement]%& stave
directive, which must appear following the information for a stave. After this
there may appear a new set of heading items, followed by the staves for the new
movement. The general format of a complete PMW input file is therefore as
follows:
.display
&'Heading information'&
&'First stave of first movement'&
&'Second stave of first movement'&
…
&'Last stave of first movement'&
&`[newmovement]`&
&'Supplementary heading information'&
&'First stave of second movement'&
&'Second stave of second movement'&
…
etc.
.endd
.index "new page for movement"
.index "movement" "new page"
PMW starts a new page at the beginning of a new movement, unless there is
enough room on the current page for the headings and the first system, or, if
the first system contains only one stave, two systems. This can be overridden
by options on the &%[newmovement]%& directive (&R; &<<SUBSECTnewmovement>>&).
.index "movement" "non-persistent parameters"
In general, most parameters that can be set by heading directives persist from
movement to movement, but &%doublenotes%&, &%halvenotes%&, &%key%&, &%layout%&,
&%notime%&, &%startbracketbar%&, &%startnotime%&, &%suspend%&, &%time%&,
&%transpose%&, and &%unfinished%& apply only to the movement for which they are
specified. &%Notespacing%& persists in one of its forms, but not the other.
.index "&%notespacing%&"
.code
notespacing 33 30 24 18 14 12 10 10
.endd
In this example, &%notespacing%& sets absolute note spacings at the start of a
movement. Such spacings are reset as the defaults at the start of subsequent
movements.
.code
notespacing *1.2
.endd
In this example, &%notespacing%& is used to multiply the current note spacings
by the given factor. Such a change does not persist into the next movement. Of
the parameters whose values persist, most may be changed by heading directives
at the start of the new movement.
.index "movement" "first "
.index "directives" "first movement only"
However, the following directives may appear at the start of the first movement
only: &%landscape%&, &%magnification%&, &%maxvertjustify%&, &%musicfont%&,
&%nokerning%&, &%page%&, &%pagelength%&, &%pssetup%&, &%righttoleft%&,
&%sheetdepth%&, &%sheetsize%&, &%sheetwidth%&, &%stretchrule%&, and
&%textfont%&.
. These directives are in the code, but we don't document them any more.
. &%oldbeambreak%&, &%oldrestlevel%&, &%oldstemlength%&,
.section "Input preprocessing" SECTpreprocess
.index "directives" "preprocessing"
.index "preprocessing directives"
Each input line, possibly after concatenation, is &'preprocessed'& before being
interpreted as encoded music. Preprocessing may modify the input by inserting
an external file or by changing the input line in some way. Preprocessing
directives are special directives that are interpreted during preprocessing.
They may occur at any point in an input file; in the heading, in the middle of
a stave's data, or between staves. A preprocessing directive must be at the
start of a line, preceded by an asterisk (spaces before the asterisk are
permitted). It takes up the rest of the line; it may not continue onto the next
line. Very long preprocessing directives can be input on multiple lines by
making use of the input concatenation feature (&R; &<<SUBSECTconcatenation>>&).
.subsection "*Comment"
.index "&%*comment%&"
This directive causes the remainder of the input line to be written to the PMW
verification output (the standard error stream). It may be useful for
outputting reminders to the user.
.subsection "*Define" SECTdefine
.index "macros" "definition"
.index "macros" "name length"
.index "strings" "macro-defined"
.index "&%*define%&"
The &%*define%& directive is used to define &'macros'&. A macro is a name for
a string of characters; usually the name is much shorter and easier to type
than the string it represents. The format of &%*define%& for a simple macro is:
.display
&`*define`& <&'name'&> <&'rest of line'&>
.endd
The rest of the input line, starting from the first non-space after the name,
up to but not including the newline, is remembered and associated with
&'name'&, which must consist of a sequence of letters and digits and be no
longer than 256 characters. It may start with a letter or a digit, so names
such as &`8va`& can be used,
.index "macros" "form of names"
and upper and lower case letters are considered different in macro names. The
rest of the line may consist of no characters at all, in which case &'name'& is
associated with an empty string.
.index "comment on &%*define%&"
If there is a comment character @ on the input line, outside double quote
marks, it terminates the string that is being defined. That is, a comment is
permitted on a &%*define%& directive, provided there are either no quotes, or
only matched pairs of quotes, before the start of the comment. If you use
macros to generate partial strings, with unmatched quotes in the defining
lines, the use of the @ character should be avoided.
.subsection "Macro calls"
.index "&& (insert) character"
When an input line is preprocessed, the character &`&&`& is used as a flag
character to trigger the substitution of text wherever it appears (except when
it follows the @ comment character). There are three cases:
.ilist
The sequence &`&&`&&'name'& in the input is replaced by the remembered text of
the macro called &'name'&, which must have been previously defined.
.next
The sequence &`&&*`& followed by a number and a parenthesized argument is a
string repetition, details of which are given below (&R;
&<<SUBSECTstringrepetition>>&).
.next
If a real ampersand character is required in the input, it must be entered as
&`&&&&`&.
.endlist
Any other character following &`&&`& causes an error message to be output. The
ampersand is then ignored.
.index "semicolon" "after macro name"
.index "; (semicolon)" "after macro name"
To avoid ambiguity, a semicolon character can optionally be used to terminate
the name in a simple macro substitution, for example, if the immediately
following character is a letter or a digit. The semicolon is removed from the
text when the substitution takes place. If an actual semicolon is required in
the input following such a substitution, two semicolons must be entered. If an
undefined name is encountered following &`&&`&, PMW issues an error message,
and substitutes an empty string. It is possible to test whether or not a name
has been defined (&R; &<<SUBSECTconditional>>&). An example of the use of a
simple macro is given in section &<<SECTmacro>>&.
.subsection "Macros with arguments" SUBSECTmacarg
.index "macros" "arguments"
.index "arguments for macros"
There are times when it is useful to be able to vary the text that is inserted
by a macro. The word &'argument'& is used in mathematics and computer
programming to describe values that are passed to functions and macros on each
call, and that term is adopted here. The argument values for a macro call are
passed in a pair of parentheses that immediately follow the macro name without
intervening white space. A semicolon that follows the closing parenthesis is
not treated specially and is interpreted as the next input item.
The use of arguments is best explained by an example. Suppose a piece of music
has many `hanging ties', that is, ties that extend to the right of a note but
end in mid-air rather than on the next note. The input to achieve this for the
note &`g'`& could be:
.code
[slur/rr15] g' [es]
.endd
To shorten this input, a macro with an argument can be defined as follows:
.code
define hang() [slur/rr15] &&1 [es]
.endd
The parentheses after the macro name tell PMW that this macro has one or more
arguments, and the characters &`&&&&1`& in the replacement text indicate the
place where the first argument is to be inserted. This macro can be used for
many different notes, for example:
.code
&hang(g') &hang(B++) &hang(e'-)
.endd
In each case, the text that forms the argument is substituted into the
replacement text where &`&&&&1`& appears. The argument is supplied
immediately after the macro name, enclosed in parentheses.
&*Note*&: When a macro is defined without parentheses, as in the previous
section, an opening parenthesis following the name in a macro call is not
treated as introducing arguments.
.index "macros" "maximum number of arguments"
Up to 20 arguments may be used. The example macro above could be extended
to make use of a second argument as follows:
.code
define hang() [slur/rr15&&2] &&1 [es]
.endd
Now it is possible to use a second argument to specify that the tie is to be
below the note, for example:
.code
&hang(g,/b)
.endd
.index "comma" "in macro argument"
.index ", (comma)" "in macro argument"
As this example shows, arguments are separated from each other by commas. All
the characters between the parentheses and commas form part of the argument;
if, for example, there is a space after the opening parenthesis or after a
comma, it forms part of the next argument. Arguments may contain no characters;
this is not an error. An argument can be inserted many times in the replacement
text.
.index "semicolon" "in macro argument"
.index "; (semicolon)" "in macro argument"
If the following character is a digit, the argument number must be
followed by a semicolon as a terminator. This means that if the following
character is a semicolon, two semicolons are required. There are also times
when it is necessary to include commas and parentheses as part of an argument.
The following rules make this possible:
.ilist
No special action is necessary if an argument contains matched parentheses.
Within them, commas are not recognized as terminating an argument, and an
internal closing parenthesis does not terminate the macro call. For example:
.code
&hang((fac'))
.endd
.next
To include an unmatched opening or closing parenthesis or a comma that is not
within nested parentheses, the character &`&&`& is used as an escape character.
For example, if a note with a bracketted (parenthesized) accidental is used
with the &`hang`& macro, the input is:
.code
&hang(#&)c')
.endd
Without the &`&&`& preceding it, the accidental's closing parenthesis would be
interpreted as terminating the argument list.
.next
If an argument contains matched double quote characters, commas and parentheses
(matched or unmatched) within the quotes are not treated specially. An
unmatched double quote character can be included by escaping it with &`&&`&.
.endlist
In fact, the appearance of &`&&`& before a non-alphanumeric character anywhere
in a macro argument always causes the next character to be taken literally,
whatever it is. To include an &`&&`& character itself within the text of an
argument, it must be specified as &`&&&&`&. Macro arguments may contain
references to other macros, to any arbitrary depth. An &`&&`& followed by an
alphanumeric character in an argument is interpreted as a nested macro
reference. It is also possible to have macro substitutions in the definition of
another macro.
.index "macros" "argument defaults"
If a macro that is defined with argument substitutions is called without
arguments, or with an insufficient number, nothing is substituted for those
that are not supplied, unless defaults have been provided as an argument list
in the macro definition. Each default argument must be no longer than 256
characters (arguments in macro calls can be longer). If a macro is defined or
called with more arguments that are referenced in its replacement string, the
additional arguments, either explicit or defaulted, are ignored. Here is an
example of the use of default arguments:
.code
define hang(g',/a) [slur/rr15&&2] &&1 [es]
.endd
When the macro is called, empty and missing arguments are replaced by the
defaults.
.itable none 0 0 3 80 left 60 left 200 left
.row &`&&hang()`& "behaves as" &`&&hang(g',/a)`&
.row &`&&hang`& "behaves as" &`&&hang(g',/a)`&
.row &`&&hang(B)`& "behaves as" &`&&hang(B,/a)`&
.row &`&&hang(,/b)`& "behaves as" &`&&hang(g',/b)`&
.endtable
The rules for the default argument list are the same as for argument lists when
calling macros, except that, if &`&&`& is required to escape a character, it
must be written twice. This is necessary because macro definition lines are
themselves subject to scanning for macro substitution before they are
interpreted. For example:
.code
define hang(#&&)g') [slur/rr15] &&1 [es]
.endd
It follows that, if an &`&&`& character is actually required in a default
argument, &`&&&&&&&&`& must be entered.
.subsection "String repetition" SUBSECTstringrepetition
.index "string repetition"
.index "repetition" "of input string"
A single bar may be repeated by starting it with a number in square brackets
(&R; &<<SECTrepeatbars>>&) and there is an input shortcut facility for
repeating individual notes (&R; &<<SUBSECTshortcuts>>&). There is also a way of
repeating an arbitrary string of input characters during preprocessing. This is
coded as an ampersand followed by an asterisk, a number, and then a single
argument in parentheses, in the same format as a macro argument. This example
generates the same sequence of bars three times in succession:
.code
&*3(abc|def|[2]R!|)
.endd
This example repeats a group of semiquavers four times, breaking the beam after
each group:
.code
&*4(g=a=b=c'=;)
.endd
An error occurs if more than one argument is given. This construction may be
nested and may contain ordinary macro calls. Like a macro call, the entire
argument must be on a single input line; if it is very long, line
concatenation (&R; &<<SUBSECTconcatenation>>&) can be used to spread it over
multiple lines in the input file.
.subsection "*Include" SUBSECTinclude
.index "&%*include%&"
.index "included files"
.index "files, including"
This directive can be used to include one file within another. For example, the
same standard heading file could be used with a number of different pieces or
movements that require the same style. The name of the included file is given
in quotes:
.code
include "std-setup"
.endd
If the name does not start with a slash, it is interpreted relative to the
directory containing the current input file, unless the current input is the
standard input, in which case a non-absolute path name is taken relative to the
current directory. Included files may be nested. That is, an included file may
contain further &%*include%& directives.
.subsection "Conditional preprocessing directives" SUBSECTconditional
.index "conditional directives"
.index "directives" "conditional"
.index "&%*if%&"
.index "&%*fi%&"
.index "&%*else%&"
The conditional preprocessing directives are &%*if%&, &%*else%&, and &%*fi%&.
Their purpose is to arrange for certain sections of the input file to be
included or omitted under certain circumstances. The &%*if%& directive is
followed by a condition, which consists of a word, possibly followed by more
data. It the condition is true, subsequent lines of the input, up to &%*else%&
or &%*fi%&, are processed. If the condition is not true, these lines are
skipped. When &%*else%& is used to terminate the block of lines after &%*if%&,
the lines between it and a subsequent &%*fi%& are obeyed or skipped depending
on whether the first block of lines was skipped or obeyed. An example will make
this clearer:
.code
if score
magnification 0.9
else
magnification 1.2
fi
.endd
Each &%*if%& must have a matching &%*fi%&, but there need not be an &%*else%&
between them. It is permitted to nest conditional directives, that is, a
complete sequence of &%*if%& → &%*fi%& may occur within another. This
provides a way of testing that a number of conditions are all true. The word
`or' can be used in a condition to test whether either one of two (or more)
conditions is true:
.code
if staves 1-3 or stave 7
if violin or viola
.endd
If a condition is preceded by the word `not', the sense of the condition is
negated:
.code
if not score
magnification 1.2
fi
.endd
We now describe the various conditions that can be tested using &%*if%&.
.ilist
If the word that follows &%*if%& or &%*if not%& is `score', the condition
is true only if no stave selection option is specified on the PMW command
line, and the &%selectstave%& directive has not been used earlier in the file.
.next
If the word is `part' then the condition is true if and only if a stave
selection option is given on the command line, or via the &%selectstave%&
directive earlier in the file.
.next
If the word is `stave' (or `staff' or `staves'), it must be followed by a list
of staves. In this case, the condition is true if the listed staves, &'and no
others'&, are selected. The intended use is for varying the headings of the
piece when different combinations of staves are selected for printing.
.next
If the word is `undef', it must be followed by a name, and the condition is
true only if the given name has not yet been defined as a macro using the
&%*define%& directive.
.next
If the word is `format', the condition is true if the &%-f%& command line
option has been used to specify a named format, and false otherwise.
.next
.index "format option"
If the word following &%*if%& is not one of the above, the condition is false,
unless the &%-f%& command line option was used to specify the same word that
follows &%*if%& or &%*if not%& as a format name. The comparison of the words is
done in a case-independent manner.
.endlist
Here are some examples of the use of the conditional preprocessing directives:
.code flow
.endd
There is also a &%[copyzero]%& stave directive, which takes a dimension as an
argument, and adjusts the vertical level of any stave zero material in the
current bar when stave zero is printed at the level of the current stave:
.code
[copyzero 4]
.endd
This example raises the stave zero material in the current bar by 4 points. It
is not necessary for there to be an instance of the &%copyzero%& heading
directive specifying the current stave for &%[copyzero]%& to take effect. In
the default case, &%[copyzero]%& takes effect whenever the stave in which it
appears is the top stave of a system.
When first and second time bar marks are specified in stave zero, and there
is a need to adjust their height for certain staves, it should be noted that
the marks are drawn when the bar in which their end point is determined is
processed. Consequently, it is that bar in which &%[copyzero]%& should appear.
.section "Temporarily suspending staves" SECTsuspend
.index "suspending staves"
.index "staves" "suspending"
When a part is silent for a long period of time, it is conventional in full
scores to suppress its stave from the relevant systems. The term `suspended' is
used to describe a stave that is not currently being printed. PMW does not
suspend staves automatically, so you have to use the &%[suspend]%& directive in
to tell it when to do so (&R; &<<SUBSECTsuspend>>&). Resumption of printing is
automatic, but there is also a &%[resume]%& directive for forcing it to happen
at a particular bar.
Staves can be suspended only if they contain no notes or text items, though
other items such as time and key signature changes may be present. It is
conventional to print all the staves in the first system of a piece, even if
some of them contain only rest bars. However, there is a heading directive
called &%suspend%& that makes it possible to suspend individual staves right
from the start (&R; &<<SUBSECTheadsuspend>>&).
When a single part is being printed, suspension normally has no effect, because
multiple rest bars are packed up into a single bar with a count printed above,
and so systems containing only rest bars do not occur. However if &`S!`& is
used for rest bars instead of &`R!`&, it prevents the amalgamation of adjacent
bars and may lead to suspendable systems, which are undesirable in single
parts. In these cases, therefore, any &%[suspend]%& directives that are present
for use when printing the full score should be skipped (using the &%*if%&
preprocessing directive) when printing the part.
.index "empty bars, omitting"
.index "&'ossia'& passages"
Normally, a stave that is not suspended will be printed right across the
system, with rest bars as appropriate. However, a stave can be tagged with the
&%[omitempty]%& directive (&R; &<<SUBSECTomitempty>>&), in which case
completely empty bars are not printed at all. This can be useful for printing
&'ossia'& passages. A completely empty bar has no data at all specified for it;
a bar containing a rest is not a completely empty bar.
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "Drawing facilities" CHAPdraw
.index-from I03 "drawing facility"
.index "&%draw%&"
.index "&%[draw]%&"
.index "crop marks"
PMW contains a facility for drawing simple shapes, defined by the user,
positioned relative to notes, bar lines, headings, stave names, or gaps in
slurs and slur-like lines. This makes it possible to print music notation
that is not provided explicitly by PMW. For example, the facility can be used
to draw piano pedal marks, boxes round notes, vertical brackets between
notes, and to print unusual marks above or below the stave. It can be used
with headings or footings to rule lines across the page or to print crop marks.
A simple programming language is used to describe drawings. Readers unfamiliar
with computer programming may find this chapter hard going and may prefer to
skip it on a first reading. Before describing the facility in detail, we
consider a short example. Suppose there is a requirement to draw a solid black
triangle, with its point upwards, 4 points below the stave. The first thing to
do is to define this shape. This is done using the &%draw%& heading directive
as follows:
.code
draw triangle
3 -4 moveto @ move to apex
-3 -6 rlineto @ line to bottom left
6 0 rlineto @ horizontal line to bottom right
-3 6 rlineto @ line back to apex
fill @ fill it in (solid triangle)
enddraw
.endd
This example of &%draw%& defines a drawing called `triangle'. The lines between
&%draw%& and &%enddraw%& are drawing instructions in a form that is described
below. Whenever the triangle shape is wanted, the stave directive &%[draw
triangle]%& is given before the relevant note.
.code
c'f [draw triangle] g a | c'-b'- [draw triangle] a'-g'- fg |
.endd
.music "music19" 40 4,-14
If many triangles are required, it would be a good idea to use &%*define%& to
set up a macro for &%[draw triangle]%& to save typing. The `language' used to
describe drawings is based on the notion of a &'stack'&. This will be familiar
to you if you have any experience of the computer programming languages Forth
or PostScript. For those readers who are not familiar with stacks, we now
explain how they work.
.section "Stack-based operations"
.index "drawing facility" "stack description"
A stack is a means of storing items of data such that the last item that is
put on the stack is the first item to be taken off it. An analogy is often
drawn with the storage arrangements for trays in self-service restaurants,
where a pile of trays is on a spring-loaded support. Trays are added to the
stack on the top, thereby pushing it down; when a new tray is required, it is
taken from the top of the stack, and the remainder of the trays `pop up'.
PMW's drawing stack contains numbers and references to text strings rather than
trays. (Discussion of strings is postponed till section
&<<SECTtextindrawing>>&.) When PMW is obeying a set of drawing instructions, if
it encounters a number in its input, the number is `pushed' onto the top of the
stack. Consider the following fragment of a drawing program:
.code
3 2 add
.endd
In this example, the first item is the number 3, so the effect of reading it is
to put the stack into this state:
.figure fig01
The second item is also a number, so after it is read, the stack is as follows:
.figure fig02
The third item in this fragment is the word `add'. This is not a number &-- it
is an &'operator'&. The operators used in PMW drawings are based on those found
in the PostScript language. When an operator is encountered, it causes PMW to
perform an operation on the numbers that are already on the stack. In the case
of the &%add%& operator, the two topmost numbers are `popped' off the stack,
added together, and the result is pushed back onto the stack. So in this case,
after `add' has been obeyed, the stack is like this:
.figure fig03
.index "stack underflow"
.index "underflow of stack"
If an operator is encountered that requires more numbers on the stack than
there are present, &'stack underflow'& is said to occur. PMW generates an error
message and abandons the drawing. The stack mechanism is very simple, and
operates quickly. However, it does make it possible to write very obscure code
that is hard to understand. Use PMW's comment facility to help you keep track
of what is going on.
PMW does not clear the drawing stack between one invocation of &%[draw]%& and
the next. This provides one way of passing data between two drawing function
calls, and there is no problem if the related drawing functions are called in
the same bar of the same stave, because they will be always obeyed in the order
in which they appear in the input. However, you must not rely on the order in
which PMW processes bars and staves, other than that bar &'n'& will be
processed before bar &'n'&+1 on any particular stave, but not necessarily
immediately before it (a bar on another stave may intervene). Apart from this,
the order of processing, and therefore the order of obeying &%[draw]%&
directives on several staves, is not defined, and may change between releases
of PMW. Therefore, if you need to pass data between drawing functions in
different bars, and use this facility on more than one stave, the stack cannot
be used safely. &'User variables'& (&R; &<<SECTuservar>>&) must be used
instead.
.section "Drawings with arguments"
Whenever a drawing function is called, either by the &%[draw]%& directive or as
part of some other directive (for example, &%heading%&), its name may be
preceded by a list of numbers or text strings (&R; &<<SECTtextindrawing>>&),
separated by spaces. These are pushed onto the drawing stack immediately before
the function is obeyed, and therefore act as arguments for the function.
.code
heading draw 44 logo
[draw 3 -5.6 thing]
[linegap/draw 8.2 blip]
[slurgap/draw "A"/c annotate]
.endd
There is no explicit facility for default values, but these can be provided by
using a macro with arguments to call the drawing function (&R;
&<<SUBSECTmacarg>>&).
.section "Arithmetic operators"
.index "drawing facility" "arithmetic operators"
.index "arithmetic operators for &%draw%&"
The following arithmetic operators are provided for use in drawing
descriptions:
.ilist
&%add%&: Add the two top numbers on the stack, leaving the result on the stack.
.next
&%div%&: Divide the second topmost number on the stack by the number on the top
of the stack, leaving the result on the stack.
.next
&%mul%&: Multiply the two top numbers on the stack, leaving the result on the
stack.
.next
&%neg%&: Negate the topmost number on the stack, leaving the result on the
stack.
.next
&%sub%&: Subtract the topmost number on the stack from the second topmost
number, leaving the result on the stack.
.endlist
Evaluation of the expression ((3+4) × 5 + 6)/7 could be coded as
follows:
.code
3 4 add 5 mul 6 add 7 div
.endd
.section "Truth values"
.index "drawing facility" "true values"
The operators &%false%& and &%true%& push the values 0 and 1 onto the stack,
respectively. These are the same values that are returned by the comparison
operators, and can be tested by the conditional operators.
.section "Comparison operators"
.index "drawing facility" "comparison operators"
.index "comparison operators for &%draw%&"
The following operators operate on the top two values on the stack and leave
their result on the stack. The values must be numbers &-- if they are not, the
result is undefined. Otherwise the result is 1 for &'true'& and 0 for
&'false'&.
.itable none 0 0 2 20 left 300 left
.row &%eq%& "test equality"
.row &%ne%& "test inequality"
.row &%ge%& "test first greater than or equal to second"
.row &%gt%& "test first greater than second"
.row &%le%& "test first less than or equal to second"
.row &%lt%& "test first less than second"
.endtable
For example:
.code
10 10 eq
.endd
leaves the value 1 (&'true'&) on the stack, and
.code
25 4 lt
.endd
yields 0 (&'false'&). The conditional operators can be used to test these
values.
.section "Bitwise and logical operators"
.index "drawing facility" "logical operators"
.index "drawing facility" "bitwise operators"
.index "logical operators for &%draw%&"
.index "bitwise operators for &%draw%&"
The following operators perform bitwise operations on the integer parts of the
top two values on the stack. The result always has a zero fractional part.
.itable none 0 0 2 30 left 300 left
.row &%and%& "bitwise and"
.row &%or%& "bitwise or"
.row &%xor%& "bitwise exclusive or"
.endtable
The &%not%& operator performs bitwise negation on the top number on the stack.
These bitwise operators act as logical operators when applied to the results of
the comparison operators.
.code
5 6 ne 13 7 gt and
.endd
This example leaves 1 (&'true'&) on the stack, because 5 is not equal to 6 and
13 is greater than 7.
.section "Stack manipulation operators"
.index "drawing facility" "stack manipulation"
There are several operators that can be used to manipulate items on
the stack.
.ilist
&%copy%&: Remove the top item, which must be a number, then duplicate the
sequence of that number of items. For example, if the stack contained the
numbers 13, 23, and 53, after &%2 copy%& it would contain 13, 23, 53, 23, 53.
.next
&%dup%&: Duplicate the item on the top of the stack. This has the same effect
as &%copy%& with an argument of 1.
.next
&%exch%&: Exchange the two top items on the stack.
.next
&%pop%&: Remove the topmost item on the stack, and discard it.
.next
&%roll%&: This operator performs a circular shift of items on the stack. When
it is encountered, there must be three or more items on the stack. The topmost
item on the stack is a count of the number of positions by which items are to
be shifted. The second topmost item is the number of items involved, and there
must be at least this many additional items on the stack. PMW first removes the
two control numbers from the stack. Then it shifts the given number of items by
the given amount. If the amount of shift is positive, each shift consists of
removing an item from the top of the stack, and inserting it below the last
item involved in this operation. This is an `upwards' roll of the stack. If the
amount of shift is negative, each shift consists of removing the lowest item
involved in the operation, and pushing it onto the top of the stack. This is a
`downwards' roll of the stack.
.endlist
Here is an example of the use of &%roll%&.
.code
33 45 67 91 3 1 roll
.endd
When &%roll%& is obeyed, the three items 45, 67, 91 are rolled upwards
one place and the result is:
.figure fig04
.section "Coordinate systems"
.index "drawing facility" "coordinate systems"
.index "drawing facility" "coordinate origin"
The coordinate system used in PMW drawings is a traditional X-Y system, with
all distances specified in points. The initial position of the origin of the
coordinates depends on the item with which the drawing is associated. PMW
drawings can be associated with four kinds of item:
.ilist
A drawing can be associated with a note (or chord) on a stave, or with the end
of a bar if no notes follow the &%[draw]%& directive. The vertical position of
the origin is on the bottom line of the stave if the stave has 3 or more
lines. For staves with zero, one, or two lines, the vertical position of the
drawing origin is where the bottom line of a 5-line stave would be. The
horizontal position of the origin is either at the left-hand edge of the
associated note, or at the bar line if there is no following note. The
left-hand edge of a note or chord with a downwards pointing stem is the edge of
the stem. This applies even when a chord has some noteheads moved to the other
side of the stem. For breves and semibreves the behaviour is as if there were a
stem. Noteheads are 6 points wide, so the horizontal coordinate of the centre
of a note is 3. That is where the 3s in the triangle example come from.
.next
A drawing can be associated with a heading or footing. The origin of the
coordinate system is at the left-hand side, at the level of the next heading or
footing line. See the &%heading%& directive (&R; &<<SUBSECTheading>>&) for more
details.
.next
A drawing can be associated with a gap in a line that is defined by the
&%[line]%& directive, or with a slur. The origin of the coordinate system is in
the middle of the gap. For details see the &%[linegap]%& (&R;
&<<SUBSECTlinegap>>&) and &%[slurgap]%& (&R; &<<SUBSECTslurgap>>&) directives.
.next
A drawing can be associated with the text that is printed at the start of a
stave. The origin of the coordinate system is at the left-hand side, at the
level of the bottom line of the stave. For details, see the &%[stave]%&
directive (&R; &<<SUBSECTstave>>&).
.endlist
.section "Moving the origin"
.index "drawing facility" "moving the origin"
There is an operator called &%translate%& that moves the origin of the
coordinate system to the point specified by the two numbers on the top of the
stack, relative to the old origin.
.section "Graphic operators"
.index "drawing facility" "graphic operators"
.index "graphic operators for &%draw%&"
PMW follows the PostScript model in the way drawn marks on the page are
specified. There are operators that set up a description of a &'path'& on the
page, and this outline is then either filled in completely, using the &%fill%&
operator, or a line of given thickness is drawn along the path, using the
&%setlinewidth%& and &%stroke%& operators. A path normally consists of several
segments, which may be lines or curves. There can be gaps in the path. A single
path can consist of a number of disconnected segments.
A path definition must always start with a &%moveto%& operation, in order to
establish an initial current point. Thereafter, a mixture of moving and drawing
operators may be specified. Distances are, as always, expressed in points. They
are subject to the overall magnification in the same way as other dimensions.
They are not, however, subject to the relative magnification of individual
staves, but there is a variable that contains the magnification of the current
stave (when the drawing is associated with a stave), so that adjustments can be
made explicitly when required.
Whenever a pair of coordinates is required to be on the stack, it is always the
x-coordinate that must be pushed first, and the y-coordinate second. The
graphic operators are as follows:
.ilist
&%currentgray%&: Push onto the stack the current value of the gray setting &--
see &%setgray%& below.
.next
&%currentlinewidth%&: Push onto the stack the current value of the line width
setting &-- see &%setlinewidth%& below.
.next
&%currentpoint%&: Push the coordinates of the current point onto the stack. The
x-coordinate is pushed first.
.next
&%curveto%&: This operator draws a Bézier curve. There must be six
numbers on the stack when it is called; they are treated as three pairs of
coordinates. The final pair are the end point of the curve, which starts from
the existing current point. The two other pairs of coordinates give the
Bézier curve control points. If you are not familiar with Bézier
curves, you will need to discover a bit about them before you can fully
understand this operator. They are described in many books on computer
graphics. Very roughly, the curve starts out from its starting point towards
the first control point, and ends up at the finishing point coming from the
direction of the second control point. The greater the distance of the control
points from the end points, the more the curve goes towards the control points
before turning back to the end point. It does not, however, pass through the
control points.
.next
&%fill%&: This operator causes the interior of the previously defined path to
be completely filled in. The default is to fill in black, but this can be
changed by the &%setgray%& operator. After filling, the path is deleted, and a
new one can then be started.
.next
&%fillretain%&: This command behaves like &%fill%&, except that the path is
retained and can be used again. See &%setgray%& below for an example.
.next
&%lineto%&: The path is extended by a line segment from the current point to
the absolute position given by the two top items on the stack.
.next
&%moveto%&: If there is no current path, this must be the first graphic operator
encountered. It establishes the initial current point. Otherwise, the path is
extended by a move (invisible) segment from the current point to the absolute
position given by the two top items on the stack.
.next
&%rcurveto%&: This operator acts like &%curveto%&, except that the three pairs
of coordinates are taken as relative to the existing current point.
.next
&%rlineto%&: This operator acts like &%lineto%&, except that the coordinates
are taken as relative to the existing current point.
.next
&%rmoveto%&: This operator acts like &%moveto%&, except that the coordinates
are taken as relative to the existing current point.
.next
&%setgray%&: This operator is used to specify a gray shade for drawn items
resulting from the use of &%stroke%& or &%fill%&. It does not apply to text.
A single number between 0 (black) and 1 (white) is taken from the stack. For
example:
.code
0.5 setgray
.endd
Filling a path is analagous to using opaque paint, so &%setgray%& can be used
to fill an area with white and thereby `rub out' any previous marks on the
page. For example, to blank out an area with white and draw a black line round
its edge one could define the path and then use:
.code
1 setgray fillretain 0 setgray stroke
.endd
If you do something like this on a stave of music, you should invoke the
drawing with &%[overdraw]%& rather than &%[draw]%& because that ensures that it
is output after everything else on the stave.
.next
&%setlinewidth%&: A single number is required on the stack to specify the width
of lines to be drawn by the &%stroke%& operator. The default line width is 0.5
points. The value persists from one call of &%[draw]%& to the next.
.next
&%show%&: This operator prints a text string (&R; &<<SECTtextindrawing>>&).
.next
&%stroke%&: This operator causes a line to be drawn along the previously
defined path, omitting any segments that were defined with &%moveto%& or
&%rmoveto%&. Afterwards, the path is deleted, and a new one can be defined.
.endlist
.section "System variables"
.index "drawing facility" "system variables"
.index "variables for &%draw%&"
In order to set up drawings that are positioned relative to the following note
or chord (for example, to draw a box around it) it is necessary to have access
to some data about it. There are a number of &'system variables'& that provide
this, as well as other variable data values. When encountered in a drawing
description, the name of a variable has the effect of pushing the relevant data
value onto the stack. The system variables that relate to notes should be used
only when the drawing function is called immediately before a note, and those
that relate to staves and systems should not be used in drawings that are
called as headings or footings.
.ilist
&%accleft%&: This variable contains distance from the left-hand edge of the
leftmost notehead to the left-hand edge of the accidental that is furthest to
the left, as a positive number. If there are no accidentals, the value is zero.
.next
&%barnumber%&: When used in a bar, this variable contains the bar number. Note
that if the bar is uncounted, its number includes a decimal fraction (&R;
&<<SECTident>>&). If this variable is used in a drawing that is obeyed at the
start of a system, it contains the number of the first bar in the system. If
used in headings or footings, it contains zero.
.next
&%gaptype%&: This variable contains +1 or -1 when a drawing function is being
obeyed as part of a &%[linegap]%& directive; the value is positive for a line
above the stave, and negative for a line below the stave. Otherwise the
variable contains zero.
.next
&%headbottom%&: This variable contains the y-coordinate of the bottom of the
notehead; if the drawing function precedes a chord, this refers to the lowest
notehead.
.next
&%headleft%&: For a chord with a downwards stem in which there is a notehead on
the `wrong' side of the stem, this variable contains the width of this notehead
as a positive number; otherwise its value is zero.
.next
&%headright%&: This variable contains the width of the notehead, except that,
for a chord with an upwards pointing stem in which there is a notehead on the
`wrong' side of the stem, the value is twice the notehead width.
.next
&%headtop%&: This variable contains the y-coordinate of the top of the
notehead; if the drawing function precedes a chord, this refers to the highest
notehead.
.next
&%leftbarx%&: This variable contains the x-coordinate of the previous bar line,
except in the first bar of a system, in which case it is the x-coordinate of a
point slightly to the left of the first note in the bar.
.next
&%linebottom%&: This variable contains the value 2 (scaled to the stave size)
if the bottom of the lowest notehead is on a stave (or ledger) line (that is,
the notehead itself is positioned in a space); otherwise its value is zero.
.next
&%linegapx%& and &%linegapy%&: When a drawing is being obeyed as part of the
&%[linegap]%& directive, these variables contain the coordinates of the start
of the next part of the line. Otherwise they contain zero.
.next
&%linelength%&: This variable contains the current line length, as set by the
&%linelength%& heading directive, but scaled to the current magnification. For
example, with a magnification of 2 and the default pagelength of 480, the value
in &%linelength%& is 240.
.next
&%linetop%&: This variable contains the value 2 (scaled to the stave size) if
the top of the highest notehead is on a stave (or ledger) line (that is, the
notehead itself is positioned in a space); otherwise its value is zero.
.next
&%magnification%&: This variable contains the value of the overall
magnification. If used on a stave, it does not include the relative
magnification (see &%stavesize%& below).
.next
&%origin%&: This variable is equivalent to &%originx%&. It is provided for
compatibility with previous versions of PMW when only the x-coordinate origin
was available. It should not be used in new input files.
.next
&%originx%& and &%originy%&: These variables are for use when more than one
note position is participating in a drawing. They contain the &'absolute'&
x-coordinate and y-coordinate of the local coordinate system's origin,
respectively. This makes it possible to leave absolute coordinate values in
user variables or on the stack at the end of a call to &%[draw]%&. A subsequent
&%[draw]%& program can relate these values to its own local coordinate system
by its own use of &%originx%& and/or &%originy%&. An example of this is given
below (&R; &<<SECTexinterdraw>>&).
.next
&%pagelength%&: This variable contains the current page length, as set by the
&%pagelength%& heading directive, but scaled to the current magnification. For
example, with a magnification of 2 and the default page length of 720, the
value in &%pagelength%& is 360.
.next
&%pagenumber%&: This variable contains the current page number.
.next
&%stavesize%&: This variable contains the relative magnification for the
current stave, as specified by the &%stavesize%& heading directive.
.next
&%stavespace%&: This variable contains the stave spacing for the current stave,
that is, the vertical distance between this stave and the next one.
.next
&%stavestart%&: This variable contains the x-coordinate of the left-hand end of
the current system, relative to the current origin.
.next
&%stembottom%&: This variable contains the y-coordinate of the bottom of the
stem of the note or chord. If there is no stem, or if the stem points upwards,
this is the same value as &%headbottom%&.
.next
&%stemtop%&: This variable contains the y-coordinate of the top of the stem of
the note or chord. If there is no stem, or if the stem points downwards, this
is the same value as &%headtop%&.
.next
&%systemdepth%&: This variable contains the distance from the bottom of the top
stave of the current system to the bottom of the bottom stave.
.next
&%topleft%&: This variable contains the coordinates of the position at which
PMW starts writing on a page, relative to the current origin. This is normally
one inch down from the top of the paper, and indented according to the sheet
width and line length. This variable can be used with &%translate%& to move the
origin to a fixed point
.index "crop marks"
on the page in order to draw such things as crop marks.
.endlist
.section "User variables" SECTuservar
.index "drawing facility" "user variables"
.index "user variables in drawings"
.index "variables for &%draw%&"
Up to 20 user variables are available for use in drawing functions. These
variables are &'global'& in that they are shared between all drawing functions.
When you want to pass values from one drawing function call to another, using a
variable is often more convenient than leaving data on the stack. The names of
the variables are chosen by the user, but they must not be the same as any of
the built-in variables or operators. Once a variable has been defined, its
value is retrieved by quoting its name; this causes the value to be copied onto
the stack. To set a value into a variable, the following construction is used:
.display
&`/`&<&'name'&> <&'value'&> &`def`&
.endd
The appearance of &`/`& indicates that the name of the variable is required,
rather than its value. For example, to put the value 10 into a variable called
&`abc`&:
.code
/abc 10 def
.endd
The value that is set in a variable may be changed as often as necessary. A
variable's name must appear in a definition (preceded by a slash) earlier in
the input than its first use as a reference. If a variable is set in one
drawing function and used in another, the definition of the one in which it is
set must come first in the PMW input file. This is not always possible. For
example, when the defining function calls the other function, the called
function must come first. In such a case, a dummy drawing function that is
defined but never obeyed can be used for the sole purpose of defining user
variable names.
.section "Text strings in drawings" SECTtextindrawing
.index "drawing facility" "text strings"
Text strings can be printed from within the drawing mechanism. The appearance
of a string in quotes inside a drawing definition or as an argument to a
drawing function causes an item representing the string to be pushed onto the
stack. Such an item can be copied or moved around the stack in the normal way,
but can be processed only by special string operators. The most important of
these is the &%show%& operator, which causes the string to be printed at the
current point:
.code
draw string
0 -12 moveto "text" show
enddraw
.endd
The default font is roman, but the string may contain font changes and other
escape sequences, just like any other string. It may be followed by one or more
of the following options:
.itable none 0 0 2 60 left 300 left
.row &`/box`& "enclose the string in a rectangular box"
.row &`/c`& "centre the string at the current point"
.row &`/d`&<&'n'&> "move the string down by <&'n'&> points"
.row &`/e`& "align the end of the string with the current point"
.row &`/l`&<&'n'&> "move the string left by <&'n'&> points"
.row &`/r`&<&'n'&> "move the string right by <&'n'&> points"
.row &`/ring`& "enclose the string in a ring (circular if a short string)"
.row &`/rot`&<&'n'&> "rotate the string by <&'n'&> degrees (&R; &<<SECTtextitems>>&)"
.row &`/s`&<&'n'&> "print the string at size <&'n'&> (&R; &<<SUBSECTtextsizes>>&)"
.row &`/u`&<&'n'&> "move the string up by <&'n'&> points"
.endtable
The &`/u`&, &`/d`&, &`/l`&, and &`/r`& options are not particularly useful on
strings that are part of drawing definitions, because you can position such
strings with &%moveto%& or &%rmoveto%&. However, when a string is an argument
to a drawing it is sometimes helpful to be able to modify the position that is
defined within the drawing. These moving options are ignored when the string is
used by some operator other than &%show%& (for example, &%stringwidth%&).
When the string is centred or end-aligned, the printing of the string does not
change the current point; in the default, left-aligned case, the current point
is moved to the end of the string. A path may be begun before printing a string
and continued afterwards. As an example of the use of the text facility,
consider music printed in the sixteenth and seventeenth century style where,
instead of using ties that cross bar lines, augmentation dots without notes are
printed on the far side of the bar lines.
.code
draw dot
0 headbottom 2 linebottom sub add moveto "\mf\?" show
enddraw
define bd() [notes off draw dot] &&1-; [notes on]
time 2/4
[stave 1 treble 1]
ra | &bd(a) b-g |
.endd
.music "music34" 32 8,-18
In this example, the macro &%bd%& (`bar dot') is defined, in order to shorten
the input for each dot. Its argument is the note pitch for which a dot is
required. The `tied' note is not actually printed because of the use of
&%[notes off]%& but its pitch is available to the drawing function, which uses
it to print a dot character from the music font at the appropriate level on the
stave (a question mark in the music font corresponds to the horizontal dot
character). The input could be shortened even further by including the previous
note and the bar line inside the macro expansion.
.section "String operators"
.index "drawing facility" "string operators"
As well as &%show%&, there are three other operators that act on strings.
.ilist
The &%cvs%& operator converts a number to a string, typically so that it can be
printed. There must be two arguments on the stack: the number to be converted,
and an empty string that provides a place to store the converted number. The
string may be followed by any of the usual string options. When &%cvs%& is
obeyed, the two arguments are removed from the stack and a string containing a
representation of the number is pushed back. For example, to print the current
barnumber at text size 2, centred at the current position:
.code
barnumber ""/c/s2 cvs show
.endd
.next
.index "drawing facility" "string width"
The &%stringwidth%& operator replaces a string on the stack with the horizontal
and vertical distances by which the current point would move if the string were
printed. Note that the second value is &'not'& the height of the string, and in
most cases is zero. There is an example of the use of &%stringwidth%& in the
section on looping operators below (&R; &<<SECTloopop>>&).
.next
.index "drawing facility" "font size"
The &%fontsize%& operator replaces a string on the stack with the font size
associated with it.
.endlist
.section "Drawing subroutines"
.index "drawing facility" "subroutines"
One drawing can be called as a subroutine from within another by means of the
&%draw%& operator. The drawing stack and the current graphics state (current
position and current path) are passed over to the called drawing. For example,
to draw two crosses below the stave on either side of a note's position:
.code
draw cross
-4 0 rmoveto 8 0 rlineto
-4 -4 rmoveto 0 8 rlineto
stroke
enddraw
draw crosses
-4 -6 moveto draw cross
10 -6 moveto draw cross
enddraw
[stave 1 treble 1] [draw crosses] gabc' |
.endd
.music "music35" 32 4,-16
The subroutine must be defined before the definition of any drawings in which
it is called. Subroutines cannot be called recursively, that is, a drawing
cannot call itself, and a multi-drawing recursive loop is not possible because
a drawing must be defined before it is called.
.section "Blocks"
.index "drawing facility" "blocks"
A &'block'& is a portion of a drawing's coding enclosed in curly brackets. It
is used by the conditional and looping operators. When a block is encountered
during drawing, its contents are not obeyed immediately. Instead, a reference
to them is placed on the stack, for use by a subsequent operator. Blocks can be
nested inside each other.
.section "Conditional operators"
.index "drawing facility" "conditional operators"
The operator &%if%& is used to obey a portion of the drawing conditionally. It
uses the top two items on the stack. The first must be a number, and the second
a reference to a block. Both are removed from the stack, and if the value of
the number is zero, nothing else happens. Otherwise, the contents of the block
are obeyed. For example, to print the bar number if it is greater than 5:
.code
barnumber 5 gt { barnumber "" cvs show } if
.endd
The bar number and the number 5 are pushed onto the stack; the comparison
operator &%gt%& replaces them with 1 if the barnumber is greater than 5, or 0
otherwise. Then a reference to the block is pushed onto the stack, and the
&%if%& operator causes it to be obeyed if the number is non-zero. The
&%ifelse%& operator is similar to &%if%&, except that it requires two blocks on
the stack. The first is obeyed if the condition is true, the second if it is
false.
.section "Looping operators" SECTloopop
.index "drawing facility" "looping operators"
The &%repeat%& operator expects a number and a block on the stack. It removes
them, and then obeys the block that number of times. If the number has a
fractional part, it is ignored. For example, to print a row of asterisks from
the start of the bar to just before the current note or bar line, the following
function could be used (adding 0.5 ensures that the count is rounded to the
nearest integer):
.code
draw astline
leftbarx -15 moveto
leftbarx neg "*" stringwidth pop div
0.5 add { "*" show } repeat
enddraw
[stave 1 bass 0] gddg | de [draw astline] fg |
.endd
.music "music36" 36 4,-14
The &%loop%& operator expects only a block on the stack, and it obeys it
repeatedly until the &%exit%& operator is encountered. To guard against
accidents, a limit of 1,000 times round the loop is imposed. Another way of
printing the asterisks is:
.code
draw astline
leftbarx -15 moveto
{ "*" show currentpoint pop 0 ge {exit} if } loop
enddraw
.endd
The &%exit%& operator can also be used to stop a &%repeat%& loop prematurely.
If encountered outside a loop, it causes an exit from the current drawing
function.
.section "Drawing in headings and footings"
Drawing functions can be obeyed in headings and footings. For example, crop
marks, horizontal rules, and borders on title pages can be drawn by this
method. For details, see the description of the &%heading%& directive (&R;
&<<SUBSECTheading>>&).
.section "Drawing at stave starts"
Drawing functions can be obeyed at the start of a stave, as well as, or instead
of printing text. For details see the description of the &%[stave]%& directive
(&R; &<<SUBSECTstave>>&).
.section "Testing drawing code"
.index "drawing facility" "testing"
.index "testing &%draw%& code"
When a drawing does not turn out the way you expect it to, it can sometimes be
difficult to track down exactly what is wrong. Being able to examine the
contents of the stack at particular points is sometimes helpful. The operator
&%pstack%& causes the contents of the stack to be written to the standard error
stream.
.section "Example of use of system variables"
.index "drawing facility" "examples"
This example illustrates the use of the variables that contain the dimensions
of the note that follows the &%[draw]%& directive:
.code flow
draw box
-2 headleft sub accleft sub stembottom 1.3 sub moveto
stemtop stembottom sub 2.6 add dup 0 exch rlineto
headleft headright add accleft add 4 add dup 0 rlineto exch
0 exch neg rlineto
neg 0 rlineto
stroke
enddraw
draw bracket
-2 headleft sub accleft sub headbottom linebottom add moveto
-2 0 rlineto
-4 headleft sub accleft sub headtop linetop sub lineto
2 0 rlineto
stroke
enddraw
[stave 1 treble 1]
[draw box] $a [draw box] f' [draw box] (fg)
[space 10] [draw box] (f'g')
[space 6] [draw bracket] (#fc') [draw bracket] (g#d')
[endstave]
.endd
.music "music20" 40 4,-12
The definitions look a bit daunting at first sight, but are not difficult to
understand when broken down into their constituent parts. If you find the
explanation hard to follow, try using pencil and paper to keep track of the
values as they are pushed onto and popped off the stack. This is also a good
way of developing your own drawings.
We consider first the `box' drawing, which encloses the following note or chord
in a rectangular box. The first line establishes the start of the drawing path
at the bottom left-hand corner of the box:
.code
-2 headleft sub accleft sub stembottom 1.3 sub moveto
.endd
It starts by pushing the value -2 onto the stack, then subtracting from it the
&%headleft%& and &%accleft%& variables. This gives a value for the x-coordinate
that is two points to the left of the leftmost accidental, taking into account
any notehead that is positioned to the left of the stem. The y-coordinate is
computed as the value of the &%stembottom%& variable less 1.3 points. The
&%moveto%& operator then establishes the start of the drawing path, using the
two coordinate values that are on the stack, and leaving the stack empty.
.code
stemtop stembottom sub 2.6 add dup 0 exch rlineto
.endd
The second line of the drawing instructions computes the length of the vertical
sides of the rectangle. It does this by subtracting the value of &%stembottom%&
from the value of &%stemtop%& and then adding 2.6 to the result. This is to
allow 1.3 points of clear space at the top and the bottom. As this value is
going to be needed twice, once for each side, the &%dup%& operator is called to
duplicate it. To draw the left-hand vertical, a relative x-coordinate of zero
is pushed on the stack, and then &%exch%& is used to get the coordinates in the
correct order on the stack before calling &%rlineto%&. The current point is now
at the top left-hand corner of the rectangle, and the stack contains the
duplicated value of the vertical sides' length.
.code
headleft headright add accleft add 4 add dup 0 rlineto exch
.endd
The third line does a computation for the rectangle's width, which is the sum
of the contents of the &%headleft%&, &%headright%&, and &%accleft%& variables,
plus four (allowing two points clear on either side). Once again, &%dup%& is
used to leave a copy of the value on the stack, and this time a zero relative
y-coordinate is used, in order to draw a horizontal line. The two remembered
lengths that are left on the stack are now exchanged, so that the vertical
length becomes the topmost value.
.code
0 exch neg rlineto
neg 0 rlineto
stroke
.endd
The remaining lines use these stacked values to complete the rectangle. The
first line pushes a zero relative x-coordinate, ensures that the order on the
stack is correct by means of &%exch%& (bringing the vertical side length to the
top), and negates the y-coordinate so that the line is drawn downwards.
The second line negates the one remaining value on the stack, which is the
width of the rectangle, pushes a zero relative y-coordinate, and draws the
final horizontal line to the left. Finally, &%stroke%& causes a line to be
drawn along the path which has just been defined.
The `bracket' drawing draws a left-hand bracket whose size is adjusted for the
notes of a chord, and which also takes into account the position of the
noteheads on stave lines or in spaces.
.code
-2 headleft sub accleft sub headbottom linebottom add moveto
-2 0 rlineto
-4 headleft sub accleft sub headtop linetop sub lineto
2 0 rlineto
stroke
.endd
The first line computes the position of the start of the path, which is the
right-hand end of the bottom `jog'. The x-coordinate is 2 points to the left of
the left-most accidental, and the y-coordinate is the bottom of the lowest
notehead if this position is not on a stave line (in which case &%linebottom%&
is zero) or two points above if it is. The second line draws the lower
horizontal `jog' to the left as a relative line. The third line computes the
absolute coordinates of the top left-hand corner, taking into account whether
the top notehead is on a line or not. An alternative to this would have been to
save the initial x-coordinate on the stack instead of recomputing it from
scratch. Finally, the top `jog' is drawn to the right, and the path is stroked.
.section "Example of inter-note drawing" SECTexinterdraw
This example illustrates the use of the &%originx%& variable for connecting up
two different notes:
.code
draw save
headbottom originx
enddraw
draw connect
originx sub 3 add dup 3 add 2 div
3 1 roll exch 2 sub moveto
-12 lineto
3 headbottom 2 sub lineto
stroke
enddraw
[stave 1 treble 1]
b [draw save] e c'-g-a-b- [draw connect] a g |
[endstave]
.endd
.music "music21" 40 4,-12
The `save' drawing does not actually do any drawing at all. It just saves on
the stack the y-coordinate of the bottom of the next note, and the absolute
x-coordinate of its left-hand edge. Using the stack to pass data between two
drawing functions is a simple method that works well when both functions are
called in the same bar on the same stave. An alternative method is to use user
variables (&R; &<<SECTuservar>>&); this must be used if the drawing
functions appear on several different staves and the related functions are not
called in the same bar.
The first thing the `connect' drawing program does is to push &'its'& x-origin
onto the stack, and subtract it from the saved value. The result of this
computation is the x-coordinate of the first note (the one immediately
following &%[draw save]%&), relative to the current local coordinate system,
which is, of course, based on the note following &%[draw connect]%&. A value of
3 is added to this, giving the horizontal position of the middle of the first
note. The &%dup%& operator saves a copy of this value on the stack for later
use, and another 3 is added to the top value, giving the coordinate of the
right-hand edge of the first note.
The next bit of computation finds the mid-point between the two notes. The
left-hand edge of the second note has an x-coordinate of zero in the local
coordinate system, so dividing the coordinate of the right-hand edge of the
first note by 2 gives us the mid-point. There are now three values on the
stack:
.display rm
the x-coordinate of the halfway point
the x-coordinate of the mid-point of the first note
the y-coordinate of the bottom of the first note
.endd
The operation &%3 1 roll%& changes this to:
.display rm
the x-coordinate of the mid-point of the first note
the y-coordinate of the bottom of the first note
the x-coordinate of the halfway point
.endd
The subsequent &%exch%& changes it to:
.display rm
the y-coordinate of the bottom of the first note
the x-coordinate of the mid-point of the first note
the x-coordinate of the halfway point
.endd
A value of 2 is subtracted from the y-coordinate of the first note, and the
&%moveto%& operator is called to start the drawing path, which therefore begins
two points below the first note, and halfway along its notehead. Now only the
x-coordinate of the halfway point between the two notes remains on the stack.
The operation &%-12 lineto%& draws a line from the initial position to the
halfway point, twelve points below the bottom of the stave. The stack is now
empty. The final lines of the drawing program continue the path to a position
two points below the end note at the mid-point of its notehead, and then
cause it to be stroked.
.index-to I03
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.tocsubsectoff
.chapter "Heading directives" CHAPheaddir
.index-from I04 "directives" "heading"
.index-from I05 "heading" "directives"
A heading section in a PMW file contains &'heading directives'&. Each starts
with a keyword, and sometimes the keyword is followed by numerical or other
data. It is usual to start a new line for each heading directive, but this is
not a requirement. A heading section is terminated by an opening square bracket
character that is not in a text string or in a comment (following an @). None
of the heading information is mandatory because there are default values for
all the parameters; a heading section may be completely empty.
Most of the heading directives may appear at the start of a new movement as
well as at the start of the input; a few may only appear at the very start of
the file, that is, only in the first movement (&R; &<<SUBSECTmovement>>&). In
general, heading directives may appear in any order, but there are some fairly
obvious cases where the order matters. For example, a multiplicative change to
the note spacing must follow a setting of absolute values, the definition of a
drawing or macro must precede its use, and a stave selection must precede any
tests based on which staves are selected.
.section "Alphabetical list of heading directives"
.index "number lists"
The heading directives are now described in alphabetical order. A number of
heading directives take a list of numbers as data. In all cases, such numbers
can be separated by commas or spaces, or commas and spaces, except when such a
list is continued onto another input line, when the final number on the first
line must be terminated by a comma, to indicate that more data follows. The
values set by most directives persist from movement to movement. When this is
not the case, it is noted in the description.
.subsection "Accadjusts"
.index "&%accadjusts%&"
.index "accidentals" "spacing"
.index "spacing" "accidentals"
Accidentals are normally printed about four points to the left of the notes to
which they apply (the exact distance depends on the accidental). The
&%accadjusts%& directive can be used to vary this positioning, on a note-type
basis. It does not affect the spacing of the notes themselves; it just moves
the accidentals right or left. The directive is followed by up to eight
numbers, which apply to each of the eight note types, starting with breves. The
numbers can be positive (move to the right, that is, nearer the note) or
negative (move to the left, that is, further from the note).
.code
accadjusts 1.8
.endd
This example has the effect of moving any accidental that precedes a breve 1.8
points to the right.
.subsection "Accspacing"
.index "&%accspacing%&"
.index "accidentals" "spacing"
The &%accspacing%& directive must be followed by five numbers. They set the
printing widths that are used for accidentals in time signatures and when
printing notes, in the order double sharp, flat, double flat, natural, and
sharp. The default values are equivalent to:
.code
accspacing 5.25 4.5 8.0 4.25 5.0
.endd
The values for sharp and flat also apply to half sharps and half flats (&R;
&<<SUBSECThalfaccs>>&). These are not the same as the character widths that are
set in the PMW music font, where the values are better suited for including the
characters in text. It should not be necessary to change these widths unless a
non-standard music font is being used.
.subsection "B2PFfont" SUBSECTb2pffont
.index "&%b2pffont%&"
.index "B2PF text processing"
This directive is permitted only in the first movement. B2PF is a library for
transforming strings of basic Unicode characters into their `presentation
forms', where the displayed or printed letter shapes may vary, depending on
their surroundings. PMW can optionally be compiled to make use of the B2PF
library. This makes available the &%b2pffont%& directive, which has the
following form:
.display
&`b2pffont`& <&'fontword'&> <&'options'&> "<&'B2PF rules file'&>"
.endd
The first argument must be one of the words `roman', `italic', `bold',
`bolditalic', `symbol', or `extra' followed by a number in the range 1&--12,
specifying which text font is being configured. Most commonly it will be one of
the extra fonts. Any number of B2PF options may then follow, followed by one or
more B2PF rules file names in quotes. If just one empty string is given, B2PF
processing is initialized without any defined rules. This could be used to
reverse the code points in a string.
The rules files are first sought in directories listed in the &%-F%& command
line option, followed by B2PF's default directory. Here are some examples:
.code
B2PFfont extra 1 "Arabic" "Arabic-LigExtra"
B2PFfont extra 2 input_backchars output_backchars "Arabic"
.endd
The options specify whether the input and output strings are in reading order
or reverse reading order. The available options are &`input_backchars`&,
&`input_backcodes`&, &`output_backchars`& and &`output_backcodes`&. See the
B2PF documentation for more details.
.subsection "Bar"
.index "&%bar%&"
.index "bar numbers" "starting value"
.index "movement" "continuing bar numbers"
This directive must be followed by a number; it causes the numbering of bars to
begin from a number other than one. This facility is useful for printing
fragments of pieces, or continuing a bar number sequence through several
movements.
.subsection "Barcount"
.index "&%barcount%&"
.index "bars" "maximum number of"
.index "maximum number of bars"
By default, PMW allocates its internal tables in such a way as to make room for
500 bars of music per stave per movement. If the music in any movement is
longer than this, the &%barcount%& directive must be used to increase the size
of these tables. Its argument is the maximum number of bars in the current and
subsequent movements.
.subsection "Barlinesize"
.index "&%barlinesize%&"
.index "bar lines" "for different sized staves"
When a system contains staves of differing sizes (as set by &%stavesizes%&) it
is usually the case that bar lines are split where the stave size changes, so
the use of barlines of differing thicknesses for the different staves looks
reasonable. To cope with the rare case when barlines must cover staves of
different sizes, the &%barlinesize%& directive exists, because PMW cannot
decide for itself what the size should be &-- the default use of different
sizes leads to jagged joins. &%Barlinesize%& must be followed by a single
number, which specifies the relative size of bar line to be used throughout. A
value of zero requests the default action of using different sizes.
.code
barlinesize 1
.endd
This example requests that full size barlines be used throughout; they will
look somewhat fat on any staves whose size is less than 1, and thin on any
whose size is greater than 1.
.subsection "Barlinespace"
.index "&%barlinespace%&"
.index "bar lines" "space after"
.index "bar lines" "invisible, no space after"
.index "invisible items" "bar lines, space after"
.index "spacing" "bar lines"
This directive gives control over the amount of space left after bar lines. It
must be followed by a single dimension, which may be preceded by a plus or a
minus sign, indicating a change to the existing value. If neither of these is
present, the number specifies an absolute value. The default value can be reset
in a subsequent movement by following the directive with an asterisk instead of
a number. The default is related to the space following a minim, with a minimum
of 3 points. However, if an explicit space is specified, no minimum is
enforced. A value of zero may be given &-- this is useful when printing a piece
with no bar lines, where `invisible bar lines' can be used to tell PMW where
lines can be broken, but no space must be inserted.
.subsection "Barlinestyle" SUBSECTbarlinestyle
.index "&%barlinestyle%&"
.index "bar lines" "style"
.index "bar lines" "dashed"
.index "bar lines" "between staves only"
This directive specifies the way in which bar lines are to be printed on all
staves. It takes a numerical argument, with a value in the range 0&--5. There
is also a &%[barlinestyle]%& stave directive that sets the style separately for
an individual stave. The styles are as follows:
.ilist
Style 0 is the normal style, using solid bar lines.
.next
Style 1 specifies dashed bar lines.
.next
Styles 2 and 3 cause solid or dashed bar lines (respectively) to be drawn
&'between'& staves only; if the bar line is broken at a stave where either of
these styles applies, nothing at all is printed. These styles work only when
the stave spacing is 32 points or greater (which is normally the case).
.next
Style 4 causes a half-height bar line to be printed in the middle of the stave.
It implies a bar line break at any stave where it is used.
.next
Style 5 causes two very short stub lines to be drawn, above and below the
stave. It implies a bar line break at any stave where it is used.
.endlist
Specifying a double bar by inputting &`||`& overrides the stave or movement
bar line style, which can also be overridden by inputting a digit immediately
after the vertical bar character, to force a particular style. The following
example shows the six available styles:
.music "music33" 64 0,-20 centre
Note that the &%breakbarlines%& directive can be used to specify breaks in all
bar lines at particular staves when style 0 or 1 is used, and an individual bar
line can be broken by using &%[breakbarline]%&.
.subsection "Barnumberlevel"
.index "&%barnumberlevel%&"
.index "bar numbers" "level adjustment"
This directive adjusts the level of printed bar numbers. It must be followed by
a plus or a minus sign and a dimension.
.code
barnumberlevel +4
.endd
This example prints all bar numbers four points higher up the page than they
would otherwise have been.
.subsection "Barnumbers" SUBSECTheadbarno
.index "&%barnumbers%&"
.index "bar numbers" "requesting"
.index "numbering bars"
This directive specifies that bar numbers are to be printed. &*Note*&: An
incomplete bar at the start of a movement is counted for the purpose of bar
numbering, unless it contains the &%[nocount]%& stave directive (see section
&<<SUBSECTbarcounting>>& for an example). Automatic bar number printing can be
overridden for individual bars by means of the stave directive &%[barnumber]%&
(&R; &<<SUBSECTstavebarno>>&). Several different numbering options are
available, the general form of &%barnumbers%& being as follows:
.display
&`barnumbers`& <&'enclosure'&> <&'interval'&> <&'fontsize'&> <&'fontname'&>
.endd
The first argument, which is optional, must be one of the words `boxed' or
`ringed'. These specify that barnumbers are to printed inside rectangular
boxes, or roughly circular rings, respectively. If neither word is given, the
numbers are printed without any special identification. The second argument
must be present, and is either the word `line' or a number. If `line' is given,
it causes a bar number to be printed over the first bar of every line of music
except the first line of each movement. If a number is given, it specifies the
interval between bar numbers.
.code
barnumbers boxed 10
.endd
This example causes a bar number, enclosed in a box, to be printed every 10
bars. The third argument is optional; it specifies the size of the font in
which the numbers are printed. The default size is 10 points.
.code
barnumbers line 8.5
.endd
This example numbers the bars at the start of each system, using a font of size
8.5 points. The final argument, which is optional, specifies the font
(typeface) for printing the bar numbers. The default is roman.
.code
barnumbers 5 9/1.1 italic
.endd
This example prints bar numbers every 5 bars in a 9-point italic font,
horizontally stretched by 1.1.
.subsection "Beamendrests"
.index "&%beamendrests%&"
This directive, which has no arguments, requests PMW to include rests at the
ends of beams within the beams (&R; &<<SECTbeamendrests>>&).
.subsection "Beamflaglength"
.index "&%beamflaglength%&"
The length of short, straight note flags that are used with beams (for example,
for a semiquaver beamed to a dotted quaver) can be set by this directive. The
default is 5 points; it scales with the relative stave magnification.
.subsection "Beamthickness"
.index "&%beamthickness%&"
.index "thickness of beams"
This directive takes a single dimension as its argument; it sets the thickness
of the lines drawn for beaming notes together. The default thickness is 1.8
points. On some printers and at some magnifications a better effect can be
obtained by changing the thickness (normally by making it smaller). The
thickness should not be set greater than 2.5 points, as otherwise beams will
not be correctly printed.
.subsection "Bottommargin and topmargin" SUBSECTbottommargin
.index "&%bottommargin%&"
.index "&%topmargin%&"
.index "space" "at page top"
.index "space" "at page bottom"
The &%bottommargin%& and &%topmargin%& directives make it possible to reserve
white space at the top or bottom of a page, within the overall page length,
provided that there is room to do this after the systems have been fitted onto
the page. These directives give some additional control over the vertical
justification action described in section &<<SUBSECTjustify>>&, once the
pagination of a piece is determined. In each case, a single dimension is
required.
.code
topmargin 20
bottommargin 5
.endd
The values can be changed for an individual page by means of the
&%[topmargin]%& and &%[bottommargin]%& directives. The default values for the
margins are zero for the bottom margin and 10 points for the top margin. The
use made of these values depends on the vertical justification mode for the
page. The phrase `the contents of the page' below excludes any text that is
defined as a footing or as a page heading, but includes start-of-piece
headings.
.ilist
If the justify mode is `top' only, the contents of the page are moved down by
the top margin, provided there is enough room on the page to do this. If not,
the contents of the page are moved down as far as possible. The bottom margin
value is ignored.
.next
If the justify mode is `bottom' only, the contents of the page are moved up by
the bottom margin, provided there is enough room on the page to do this. If
not, the contents of the page are moved up as far as possible. The top margin
value is ignored.
.next
If the justify mode is both `top' and `bottom', the amount of space available
for spreading the systems vertically is decreased by the sum of the top margin
and the bottom margin, and the contents of the page are moved down by the top
margin, provided there is enough spreading space available. If there is
insufficient spreading space, it is divided &'pro rata'& between the top margin
and the bottom margin, the systems are not spread at all, and the contents of
the page are moved down by the adjusted top margin value.
.next
If the justify mode is neither `top' nor `bottom', both values are ignored.
.endlist
The effect of using these directives is to allow more of the page to be used
when necessary, but to keep the systems nearer the centre of the page when
there is a lot of space left over.
.subsection "Brace and Bracket"
.index "&%bracket%&"
.index "&%brace%&"
.index "joining signs"
.index "staves" "joining signs"
These two directives specify which staves are to be joined by brackets and/or
braces. A bracket is traditionally used for groups of independent instruments
or voices, whereas a brace is reserved for pairs of staves that apply to a
single instrument, frequently a keyboard. (See also the &%thinbracket%&
directive, which specifies another kind of bracket.) Each of these directives
must be followed by a list of pairs of stave numbers, the members of each pair
being separated by a minus sign, with the pairs themselves separated by spaces
and/or commas.
.code
bracket 1-4,5-7
brace 8-9
.endd
This example specifies that staves 1&--4 and 5&--7 are to be joined by
brackets, and staves 8 and 9 are to be joined by a brace. In addition to these
marks, the entire system is by default joined by a single vertical line at the
left-hand side. (See the &%join%& and &%joindotted%& directives for ways of
changing this.) The default action of PMW is to join all the staves with a
single bracket. If no brackets of any kind are required, it is necessary to
suppress this by including a &%bracket%& directive with no following list.
If only a single stave is selected for printing, for example, when a part is
being extracted from a full score, these directives are ignored; no marks
precede the clef on a single stave in this case. Occasionally a bracket is
required for a single stave within a system; this may be specified by giving
just one stave number. The effect can also occur if all but one of a bracketed
group of staves is suspended. By contrast, a brace is never printed for just
one stave.
.subsection "Bracestyle"
.index "&%bracestyle%&"
.index "shape of brace"
.index "brace, shape of"
The default brace shape curves a lot at the ends and almost touches the staves.
An alternate form that does not curve so much at the ends can be selected by
specifying &%bracestyle 1%&. The default can be reset in a subsequent movement
by &%bracestyle 0%&.
.subsection "Breakbarlines"
.index "&%breakbarlines%&"
.index "bar lines" "breaking"
By default, PMW draws bar lines through all the staves of a system without a
break. The &%breakbarlines%& directive specifies the staves after which there
is to be a break in the bar lines. It is followed by a list of stave numbers.
.code
breakbarlines 3 6 8
.endd
This example specifies that there is to be a vertical break in the bar lines
after staves 3, 6 and 8. Two numbers separated by a minus sign can be used to
specify breaks for a sequence of staves:
.code
breakbarlines 1-4
.endd
&%Breakbarlines%& can also appear with no numbers after it at all; in this case
there is a break after every stave. If &%breakbarlines%& is specified at the
start of a new movement, it must list all the staves at which a break is
required. If it is not given, breaks carry over from the previous movement. The
stave directives &%[breakbarline]%& and &%[unbreakbarline]%& can be used to
override the setting for individual barlines on a given stave.
.subsection "Breakbarlinesx"
.index "&%breakbarlinesx%&"
.index "bar lines" "breaking"
The &%breakbarlinesx%& directive acts exactly as &%breakbarlines%&, except that
the final bar line of each system is &'not'& broken, but is drawn solid right
through the system.
.subsection "Breveledgerextra"
.index "&%breveledgerextra%&"
.index "breve" "extra ledger length"
.index "ledger lines" "extra length for breve"
This directive specifies the number of points of extra length that ledger lines
for breves have at either end. The default value is 2.3.
.subsection "Breverests"
.index "&%breverests%&"
.index "whole bar rests"
.index "rests" "whole bar"
.index "breve" "rest"
By default, PMW prints a semibreve rest sign for a complete bar's rest,
whatever the time signature. This heading directive changes its behaviour so
that the notation used for a whole bar rest depends on the number of crotchets
in the bar.
.ilist
If there are 8 crotchets (4/2 or 2/1 or 2*C etc.), a breve rest sign is used.
.next
If there are 12 crotchets (6/2 or 12/4 or 2*3/2 etc.), a dotted breve rest sign
is used.
.next
If there are 6 crotchets (3/2 or 2*3/4 etc.), a dotted semibreve rest sign is
used.
.next
Otherwise a semibreve rest is used.
.endlist
.subsection "Caesurastyle"
.index "&%caesurastyle%&"
The default caesura `character' is two slanting lines through the top line of
the stave. This directive specifies an alternative, single line, style if it is
followed by the number 1. The default can be reset in a subsequent movement by
specifying 0.
.subsection "Check"
.index "&%check%&"
This directive, which has no arguments, can be used to override an occurrence
of &%nocheck%& in a previous movement.
.subsection "Checkdoublebars"
.index "&%checkdoublebars%&"
This directive, which has no arguments, can be used to override an occurrence
of &%nocheckdoublebars%& in a previous movement.
.subsection "Clefsize"
.index "&%clefsize%&"
.index "size" "of clefs"
.index "clefs" "size"
By default, new clefs that appear in the middle of lines of music are printed
at the same size as clefs at the left-hand side. This directive is used to
specify a different relative size for such clefs.
.code
Clefsize 0.7
.endd
This example specifies that intermediate clefs are to be printed at 0.7 times
the normal size.
.subsection "Clefstyle" SUBSECTclefstyle
.index "&%clefstyle%&"
.index "style of clef"
.index "clefs" "style of"
.index "clefs" "old-fashioned"
Some early editions use &{{zvvw®x~}}& for F-clefs and &{{w¯x}}&
for C-clefs. The &%clefstyle%& directive makes it possible to reproduce
this usage. It takes a single numerical argument, with the following values:
.itable none 0 0 2 16 left 200 left
.row &`0`& "all modern clefs"
.row &`1`& "old-fashioned F clefs"
.row &`2`& "old-fashioned C clefs"
.row &`3`& "old-fashioned F and C clefs"
.endtable
The &{{zvvw®x~}}& graphic is wider than the modern &{{vvw"x~}}& shape.
Printing has been arranged so that two dots appear in the same place in both
cases. This means that the old-fashioned clef extends further to the left than
the modern one, and with PMW's default settings, it runs into stave joining
lines and brackets. Therefore, when using old-fashioned F clefs, the
&%startlinespacing%& directive should be used to insert at least 2 points of
space before the clefs.
.subsection "Clefwidths"
.index "&%clefwidths%&"
.index "key signatures" "alignment"
When it is laying out a system, PMW inspects the clefs of all the staves, and
positions the key signature immediately to the right of the widest clef. When
the clefs change between systems, it can happen that the key signatures do not
all line up vertically on the page, a feature that is sometimes required.
Unfortunately, it is not easy to arrange for PMW to do this automatically,
because it does the layout in a single pass through the input, and so does not
know what clef arrangements lie ahead. However, the &%clefwidths%& directive is
provided to enable this to be done manually. &%Clefwidths%& specifies the
widths to be used for each type of clef when computing where to put key
signatures. The directive is followed by up to five numbers, which specify the
widths of the G-clef, F-clef, C-clef, H-clef, and no clef, respectively. The
default settings are equivalent to:
.code
clefwidths 13 16 15 15 0
.endd
The values given must be whole numbers (no fractions are allowed). For
example, in a piece which has treble and bass clefs in some systems and only
treble clefs in others, a setting such as
.code
clefwidths 16 16
.endd
would ensure that all the key signatures line up.
.subsection "Codemultirests" SUBSECTcodemultirests
.index "&%codemultirests%&"
.index "rests" "repeated bars"
.index "repeated rest bars"
.index "many bars rest" "code signs"
By default, when there are consecutive rest bars in all the staves that are
being printed, they are combined into a single bar and printed as a `long
rest' sign with the number of bars above. This is the modern convention; in
older music, when the number of bars was between two and eight, coded signs
were used instead, as shown in this example:
.music "music54" 32 4,-20
If &%codemultirests%& is specified, PMW follows this older convention.
Otherwise, multiple rests are all shown in the same way as the nine bars rest
above. This directive can be cancelled in a subsequent movement by specifying
&%nocodemultirests%&.
.subsection "Copyzero"
.index "&%copyzero%&"
This directive makes it possible to have copies of stave zero printed over any
number of staves. It is followed by a list of stave numbers, each of which may
be optionally followed by a slash and a dimension. Details of the use of
&%copyzero%& are given in section &<<SECTstave0>>&.
.subsection "Cuegracesize"
.index "&%cuegracesize%&"
This directive, which takes a single number as an argument, specifies the font
size to be used when printing grace notes in bars containing cue notes. See the
&%[cue]%& directive for further details.
.subsection "Cuesize"
.index "&%cuesize%&"
This directive, which takes a single number as an argument, specifies the font
size to be used when printing cue notes. See the &%[cue]%& directive for
further details.
.subsection "Dotspacefactor"
.index "&%dotspacefactor%&"
.index "spacing" "dotted notes"
.index "notes" "spacing for dotted"
This directive specifies the factor by which the horizontal space after a
dotted note is extended. The default value is 1.2.
.code
dotspacefactor 1.5
.endd
In this example, the amount of space that follows a dotted note is 1.5 times
the amount that would follow an undotted note of the same type. (Of course,
when several staves are involved, the value is a minimum, because the notes on
the other staves may cause additional spacing.) When a note is double-dotted,
half as much space again is added. Thus in the default case a double-dotted
note occupies 1.3 times the space of an undotted note.
.subsection "Doublenotes" SUBSECTdoublenotes
.index "&%doublenotes%&"
.index "doubling note lengths"
.index "notes" "doubling length"
.index "time signatures" "modified"
This directive, which applies to the current movement only, causes the length
of each note to be doubled throughout the movement. It also affects time
signatures as follows:
.ilist
&`C`& and &`A`& are turned into &`2*C`& and &`2*A`&, that is, they are printed
as before, but the bar length is doubled.
.next
Other time signatures are changed by halving the denominator, unless the
denominator is 1, in which case the numerator is doubled instead. For example,
4/4 becomes 4/2, but 4/1 becomes 8/1.
.endlist
An entire movement can be formatted in different ways by adding or removing
&%doublenotes%&, without any other changes. If you do not want time signatures
to be affected, use the &%[doublenotes]%& stave directive instead (&R;
&<<SUBSECTstavedoublenotes>>&). Note length adjustment is cumulative; for
example, if &%doublenotes%& appears twice, notelengths are quadrupled. See also
&%halvenotes%& (&R; &<<SUBSECThalvenotes>>&).
.subsection "Draw"
.index "&%draw%&"
The &%draw%& directive is used for defining simple drawn shapes that are to be
printed with music on staves. A full description of this facility is given in
chapter &<<CHAPdraw>>&.
.subsection "Endlinesluradjust and endlinetieadjust"
.index "&%endlinesluradjust%&"
.index "&%endlinetieadjust%&"
.index "slurs" "line ending"
.index "ties" "line ending"
When a slur or a tie is continued onto the next line, the first part is
normally drawn right up to the end of the first line. Some editors prefer it to
stop a little short of this; &%endlinesluradjust%& and &%endlinetieadjust%&
specify a dimension that is added to the right-hand end of such slurs and ties,
respectively. Normally the value given is a small negative dimension. The value
for ties also applies to glissandos.
.subsection "Endlineslurstyle and endlinetiestyle"
.index "&%endlineslurstyle%&"
.index "&%endlinetiestyle%&"
.index "slurs" "shape of continued"
.index "ties" "shape of continued"
Each part of a continued slur or tie is normally drawn as a complete slur, that
is, with both ends tapering to a point, which is the most commonly found style.
Some editors, however, prefer each portion to have the appearance of half a
normal slur. &%Endlineslurstyle%& and &%endlinetiestyle%& specify this
behaviour when style 1 is selected. The default is style 0.
.subsection "Extenderlevel" SECTextlevel
.index "&%extenderlevel%&"
.index "underlay" "extender level"
.index "level" "of extender lines"
The vertical level of extender lines, which are drawn when the last syllable of
an underlaid or overlaid word extends over several notes, can be altered by
this directive. It takes a positive or negative number as its argument.
This specifies a number of points, positive numbers moving the lines up, and
negative ones down. Extender lines are output by printing underscore
characters, and the default level is just below the baseline of the text.
.code
extenderlevel 1
.endd
This example moves extender lines up to near the baseline, and larger values
can be used to place them nearer the middle of the text characters.
.subsection "Fbsize"
.index "&%fbsize%&"
.index "figured bass" "size"
By default, text that is specified as being part of a figured bass is printed
at the same size as other textual items (10 points). This directive enables a
different point size to be chosen for the figured bass text.
.code
fbsize 8.2
.endd
This example specifies a somewhat smaller font. Individual figured bass text
strings can have an explicit size specified (&R; &<<SECTtextitems>>&).
.subsection "Footing"
.index "&%footing%&"
.index "footing" "for first page"
.index "page footing" "for first page"
This directive has the same arguments as &%heading%&, and they have the same
meaning &-- see &%heading%& below for a full description. Several footing lines
may be specified. &%Footing%& sets up text to be printed at the foot of the
first page only, and setting any footing line for a new movement automatically
cancels all the footings that were in force for the previous movement.
.code
footing "Copyright \c) 1992 J.S. Bach"
.endd
Note the use of the escape sequence &`\c)`& in this example to obtain a
copyright symbol. If a type size argument is not given, 8-point type is used.
As is the case with headings, if the left-hand part of a footing (the text
before the first &`|`& character) is longer than the line length, it is split
up into as many lines as necessary, and all but the last are fully justified.
Footing lines are printed below the bottom of the page, as specified by the
&%pagelength%& directive, the first one being 20 points below. This is an
absolute distance that does not change if the magnification is altered.
However, the distance between footings and the sizes of fonts used are subject
to magnification. As the first footing line on a page is always at the same
fixed vertical position, the drawing facility (as described for &%heading%&)
can be used for drawing fixed marks on the page.
.index "crop marks"
.index "page" "crop marks"
.index "page" "borders"
.index "borders for pages"
For example, crop marks and borders on title pages can be drawn by this method.
See the &%pagefooting%& and &%lastfooting%& directives for a means of setting
up footings for pages other than the first. If no &%footing%& directive is
present, text specified by &%pagefooting%& is printed on the first page as well
as on subsequent pages. If the movement is only one page long, &%footing%&
overrides &%lastfooting%&, but &%lastfooting%& overrides &%pagefooting%&.
.subsection "Footnotesep"
.index "&%footnotesep%&"
This directive specifies the amount of extra vertical white space to leave
between multiple footnotes on the same page. The default is 4 points. See the
&%[footnote]%& directive (&R; &<<SUBSECTfootnote>>&) for a full description of
footnotes, which should not be confused with footings.
.subsection "Footnotesize"
.index "&%footnotesize%&"
This directive sets the default type size used for printing footnotes. If it is
not present, the default size is 9 points. Individual footnotes may specify
different sizes.
.subsection "Gracesize"
.index "&%gracesize%&"
.index "grace notes"
The default size of the music font used for printing grace notes is 7 points.
This directive allows a different size to be chosen. It must be followed by a
number specifying a point size for the font.
.subsection "Gracespacing"
.index "&%gracespacing%&"
.index "grace notes"
.index "notes" "grace"
By default, a grace note is printed 6 points to the left of the note that
follows it. If there are two or more grace notes, the distance between them is
also 6 points by default. This directive allows these values to be changed. It
must be followed by either one or two arguments. If only one argument is
given, its value is used for both dimensions. If two arguments are given, the
first affects the distance between the last grace note and the following main
note, and the second affects the distance between multiple grace notes.
If the value of either argument is preceded by a plus or a minus sign, it
indicates a change to the existing value. If no sign is present, the number
specifies an absolute value.
.code
gracespacing +2
.endd
This example increases both dimensions by 2 points.
.code
gracespacing -1 8
.endd
This example reduces the space after the last grace note by one point, and sets
the distance between multiple grace notes to 8 points.
.subsection "Gracestyle"
.index "&%gracestyle%&"
.index "grace notes"
.index "notes" "grace"
When two or more staves are being printed, and a note on one stave is preceded
by one or more grace notes, the notes on the other staves that fall at the same
point in the bar are printed directly above or below the main note, leaving the
grace notes sticking out to the left. This is, of course, the conventional
practice in modern music. The &%gracestyle%& directive, which must be followed
by 0 or 1, can be used to make PMW behave differently.
When the style is set to 1, the notes that are not preceded by grace notes are
aligned with the first grace note on other staves. In addition, if underlaid
text is present, it is aligned to start at the first grace note instead of
being centred on the main note. This facility can be used, in combination with
setting the grace note size equal to the main note size, and using notes with
no stems (see &%[noteheads]%&), to print some forms of plainsong music.
.index "plainsong"
.subsection "Hairpinlinewidth"
.index "&%hairpinlinewidth%&"
.index "width" "of hairpin lines"
This directive specifies the width of line used to draw crescendo and
diminuendo hairpins. Its argument is a width in points. The default width of
hairpin lines is 0.2 points. The number may be preceded by a plus or a minus
sign, indicating a change to the existing value. If neither of these is
present, the number specifies an absolute value. Making hairpin lines thicker
may help alleviate jagged effects on long hairpins printed on high resolution
printers.
.subsection "Hairpinwidth"
.index "&%hairpinwidth%&"
.index "width" "of hairpin openings"
This directive specifies the default vertical width of the open end of
hairpins. Its argument is the number of points.
.code
hairpinwidth 5.6
.endd
The number may be preceded by a plus or a minus sign, indicating a change to
the existing value. If neither of these is present, the number specifies an
absolute value. The default value for this parameter is 7 points. A different
width may be set for any individual hairpin (&R; &<<SUBSECThairpinwidth>>&).
.subsection "Halfflatstyle"
.index "&%halfflatstyle%&
.index "accidentals" "half sharps and flats"
.index "flat, half"
.index "half flat"
This directive selects which character to print for a half flat. It must be
followed by one of the numbers 0 (the default) or 1. There is an illustration
of the different styles in section &<<SUBSECThalfaccs>>&.
.subsection "Halfsharpstyle"
.index "&%halfsharpstyle%&
.index "accidentals" "half sharps and flats"
.index "sharp, half"
.index "half sharp"
This directive selects which character to print for a half sharp. It must be
followed by one of the numbers 0 (the default) or 1. There is an illustration
of the different styles in section &<<SUBSECThalfaccs>>&.
.subsection "Halvenotes" SUBSECThalvenotes
.index "&%halvenotes%&"
.index "halving note lengths"
.index "notes" "halving length"
.index "time signatures" "modified"
This directive, which applies to the current movement only, causes the length
of each note to be halved throughout the movement. It also affects time
signatures as follows:
.ilist
&`C`& and &`A`& cannot be halved. The signatures &`2*C`& and &`2*A`& can be
halved, and turn into &`C`& and &`A`& respectively.
.next
Other time signatures are changed by doubling the denominator. For example, 4/4
becomes 4/8.
.endlist
An entire movement can be formatted in different ways by adding or removing
&%halvenotes%& without any other changes. If you do not want time signatures to
be affected, use the &%[halvenotes]%& stave directive instead (&R;
&<<SUBSECTstavehalvenotes>>&). Note length adjustment is cumulative; for
example, if &%halvenotes%& appears twice, notelengths are divided by four. See
also &%doublenotes%& (&R; &<<SUBSECTdoublenotes>>&).
.subsection "Heading" SUBSECTheading
.index "&%heading%&"
.index "heading" "for first page"
.index "page heading" "for first page"
The &%heading%& directive defines a line of text to be printed as a heading to
the piece or movement. If no headings are specified, no space is left at the
top of the first page. You can specify any number of headings, which may appear
in two different forms. In the more common form, the keyword is followed by up
to three arguments:
.display
&`heading`& <&'fontsize'&> &`"`&<&'text'&>&`"`& <&'depth'&>
.endd
.index "heading" "size of type"
The first argument is a number, and is optional. If present, it defines the
font size for this heading, in printer's points. As for all font size sizes, an
aspect ratio and/or shear angle may be specified as well as the basic size. If
this argument is omitted, default sizes are used. For headings at the start of
the piece the default sizes are 17 points for the first heading line, 12 points
for the second, 10 points for the third, and 8 points for the fourth and
subsequent heading lines.
.index "movement" "heading sizes"
For headings at the start of a new movement the default sizes are 12 points for
the first heading line, 10 points for the second, and 8 points for the third
and subsequent heading lines.
The second argument is a string in double-quotes, and must be present. It
defines the contents of the heading.
.index "| (vertical bar) in strings"
The vertical bar character has a special meaning in this text &-- it splits it
up into left-hand, centred and right-hand parts. Characters to the left of the
first vertical bar are printed at the left of the page; characters between the
first and second vertical bars are centred on the page; the rest of the text is
printed at the right of the page.
.index "printing paragraphs"
.index "paragraphs, printing"
.index "heading" "paragraph"
If the left-hand part of the text is longer than the line length, it is split
up into as many lines as necessary. All but the last line are fully justified,
by expanding any spaces they contain. The last line is also justified if it is
nearly as long as the line length. Justification does not take place when there
are no spaces in the text.
This facility makes it possible to print paragraphs of introductory text on
title pages or at the start of pieces or movements. Note, however, that PMW
does not set out to be a fully-fledged wordprocessor. Any special characters
required in the text have to be coded explicitly (&R; &<<SECTtextstrings>>&);
they are not provided automatically. The paragraph mechanism should not be used
with text that contains variable data such as the escape sequence for the
current page number, because the splitting and justification happens only once,
when the heading directive is read in. &*Note*&: heading strings do not need to
be input on a single line; line breaks in the string are treated as spaces.
.index "heading" "spacing"
.index "spacing" "heading"
The third argument of &%heading%& is a number and is optional. If present, it
specifies the number of points of vertical space to leave after the heading. It
may be zero; this can be useful for printing headings of different sizes on
different parts of the line. It may also be negative; this can be used with an
empty text string to make PMW start printing higher up the page than it
normally does. If the argument is omitted, the amount of space left after the
heading line is equal to the point size of the text. For the last heading line,
the space specified (or defaulted) is the space between the base line of the
heading text and the top of the first stave of music.
When a heading string is split up by PMW into several lines, the spacing value
given (or defaulted) is used for the space after each line in the paragraph. To
leave space between paragraphs, a heading containing an empty string can be
used. Here are some examples of this form of the &%heading%& directive;
the third one prints nothing, but leaves 20 points of space.
.code
Heading "|Partita"
Heading 11 "Moderato||J.S. Bach" 14
Heading "" 20
.endd
.index "drawing facility" "headings and footings"
.index "rule, in headings and footings"
The second form of the &%heading%& directive causes a drawing subroutine to be
obeyed at the next heading position (see chapter &<<CHAPdraw>>& for more
details of drawings). The syntax is:
.display
&`heading draw`& <&'argument(s)'&> <&'name'&> <&'optional space'&>
.endd
Arguments are optional. The definition of the drawing must precede such a
heading line in the input file. If no space is given, no vertical movement is
made following the drawing. The origin of the coordinate system is set at the
left-hand side, at the level of the next heading line. For example, to draw a
line right across the page (a horizontal rule) after a heading:
.code
draw rule
0 0 moveto
0 linelength rlineto
1 setlinewidth stroke
enddraw
heading "|Some Text" 0
heading draw rule 20
.endd
The first heading or footing line on a page is always at the same fixed
vertical position, so it can be used for drawing fixed marks on the page.
.index "crop marks"
.index "page" "crop marks"
.index "page" "borders"
.index "borders for pages"
For example, crop marks and borders on title pages can be drawn by this method.
The file &_cropmarks_& in the &_contrib_& directory in the PMW distribution
contains an example of this. See the &%pageheading%& directive for a means of
setting up headings for pages other than the first.
.subsection "Hyphenstring"
.index "&%hyphenstring%&"
.index "hyphen" "printing in underlay"
When PMW is outputting rows of hyphens between underlaid syllables, it normally
uses single hyphen characters. This directive can be used to change this. The
argument is specified as a string for generality, but normally only a single
character would be used. For example, longer lines than the default can be
obtained by the use of en-dash characters instead of hyphens. These are
specified in strings by a backslash escape and two successive minus signs:
.code
hyphenstring "\--"
.endd
See section &<<SUBSECTuolayother>>& for other facilities that can be used to
control exactly what is printed between underlaid syllables.
.subsection "Hyphenthreshold"
.index "&%hyphenthreshold%&"
.index "hyphen" "multiple in underlay"
PMW automatically inserts hyphens between syllables of underlaid text. When the
distance between the syllables is less than the `hyphen threshold', a single
hyphen is printed, centred in the space (unless the syllables are so very close
together that there is no room for even one hyphen). If the space is greater
than the threshold, a number of hyphens are printed, the distance between them
being the threshold value divided by three. The default value for the hyphen
threshold is 50 points. The number following this directive may be preceded by
a plus or a minus sign, indicating a change to the existing value. If neither
of these is present, the number specifies an absolute value.
.subsection "Join and joindotted"
.index "&%join%&"
.index "&%joindotted%&"
.index "joining signs"
.index "staves" "joining signs"
The syntax of these directives is the same as for &%bracket%& and &%brace%&.
They control the joining line at the left-hand edge of systems. By default a
solid line is drawn through all staves; these directives can be used to cause
breaks in the line and/or to print a dotted line.
.code
join 1-2, 3-4
.endd
This example causes solid lines to be drawn joining staves 1 and 2, and 3 and
4, leaving a gap between staves 2 and 3.
.code
join 1,2,3,4
.endd
This example causes solid lines to be drawn at the ends of each stave, but gaps
to be left between the staves. &%Join%& and &%joindotted%& can be used
together.
.code
joindotted 1-2
join 1,2
.endd
This example causes a dotted line to be used to join staves 1 and 2, and solid
lines to overprint this at the ends of each stave, leaving the dotted line
between them.
.subsection "Justify" SUBSECTjustify
.index "&%justify%&"
.index "horizontal justification"
.index "vertical justification"
&%Justify%& sets the horizontal and vertical justification parameters. It can
be followed by one or more of the words `left', `right', `top', `bottom', or
`all'. Each occurrence of the &%justify%& heading directive completely
re-specifies the justification parameters, in contrast to the stave directive
&%[justify]%&. An appearance of &%justify%& that is not followed by one of the
above words requests no justification in any direction. The default value for
justification is `all', that is, complete vertical and horizontal
justification. The effect of the horizontal parameters is as follows:
.ilist
When `left' is specified without `right', each music system starts at the
left-hand side of the page, but is not stretched out to the right-hand
side. This is not normal for performing music, but is useful when
creating examples for inclusion in other documents.
.next
When `right' is specified without `left', each music system ends at the
right-hand side, but is not stretched to start at the left.
.next
When both `left' and `right' are specified (the default), each music system
begins at the left-hand side of the page, and is stretched so that it ends at
the right-hand side, unless it covers less than half the linelength, in which
case the behaviour is as if `right' were not specified.
.next
When neither `left' nor `right' is specified, each music system is centred
horizontally on the page. The width of page used for this purpose can be
adjusted by the &%sheetwidth%& directive. This is another style of printing
that is useful for examples and illustrations.
.endlist
The effect of the vertical justification parameters exactly parallels that of
the horizontal ones.
.ilist
When `top' is specified without `bottom', systems are printed starting at the
top of the page, using the system gaps specified in the input.
.next
When `bottom' is specified without `top' the systems are again printed with the
gaps specified, but this time they are so arranged that the final stave on the
page is exactly at the page depth. This form is useful when generating
PostScript files for inclusion in other PostScript documents.
.next
When both `top' and `bottom' are specified, the first system is printed at the
top of the page. If there is more than one system on the page, and if more than
half the page depth has been used, additional space is inserted between
the systems so that the final stave is exactly at the page depth, except that
there is a maximum amount of space that PMW is prepared to insert between any
two systems.
.next
When neither `top' nor `bottom' is specified, the systems are printed with the
gaps specified, but the set of systems is centred vertically on the page.
.endlist
The maximum amount of vertical space that PMW is prepared to insert between any
two systems is controlled by a heading directive called &%maxvertjustify%&. The
default value is 60 points, which means that if the default system gap of 44
points is in force, the furthest apart any two systems can be is 104 points.
.index "page" "forcing stave to bottom"
To ensure that the bottom stave is always at the bottom of the page under all
circumstances, specify a large value for &%maxvertjustify%&.
In its information output (&R; &<<SECTinfo>>&), after it has listed the layout
of bars on a page, PMW outputs the amount of space left. When vertical
justification is happening, it is this amount of space that is inserted between
systems or at the top of the page. When space is being inserted between
systems, the same amount is inserted between each pair of systems.
Page headings, footings, and page footings are not affected by vertical
justification. However, if `top' is not specified, start of movement headings
are moved down the page. If a new movement starts in the middle of a page that
is stretched vertically, additional space is inserted before the start of the
movement, that is, before its headings (if any), but not between its headings
and its first stave.
The justification parameters persist from one movement to the next, but may be
reset by the appearance of &%justify%& at the start of a new movement. They can
also be changed by the appearance of the stave directive &%[justify]%&. Unlike
the heading directive, it specifies &'changes'& in the justification parameters
only, and its effect lasts only until the end of the current movement. See also
the &%topmargin%& and &%bottommargin%& directives for further parameters that
control the layout of pages.
.subsection "Key"
.index "&%key%&"
.index "key signatures" "specifying"
This directive sets a key signature for a movement. It does not carry over to
any subsequent movements. Naturally, it is also possible to set keys on
individual staves and to change them in the middle of the music. Setting the
key in the heading is a convenient shorthand. The single argument to the
directive is a key signature in the format described in section
&<<SECTkeysig>>&.
.code
key A$
key BM
.endd
If no key signature is given for a movement, the default is C major.
.subsection "Keysinglebar and keydoublebar"
.index "&%keysinglebar%&"
.index "&%keydoublebar%&"
.index "bar lines" "double"
.index "bar lines" "key change"
.index "double bar lines" "at key change"
.index "key signatures" "bar line at change"
PMW prints a double bar line before a change of key by default. The
&%keysinglebar%& directive can be used to request a single bar line instead;
&%keydoublebar%& can be used to reset the default for a new movement.
.subsection "Keytranspose" SUBSECTkeytranspose
.index "&%keytranspose%&
.index "custom keys" "transposition"
When transposing a piece, for each transposition amount, PMW needs to know two
things: the new key and the number of letter changes for each note. For the
standard keys this information is built in. For example, if you transpose the
key of B up by a semitone, the result is C, and every note has its letter name
increased by one, whereas if the transposition is down a semitone, the new key
is B♭ with no change of letter.
For custom keys defined by the &%makekey%& directive (&R; &<<SUBSECTmakekey>>&)
the transposition information must be explicitly supplied in one or more
&%keytranspose%& directives. This directive is followed by the name of a key
and then any number of triples that specify a transposition amount, a new key,
and the number of letter changes. An equals sign and a slash are used as
separators. For example:
.code
keytranspose X1 2=X2/1 -1=X3/0
.endd
This example specifies that if the custom key X1 is transposed up by 2
semitones, the new key is X2 and each note's letter name is to be increased by
1 (with G wrapping round to A, of course); if the transposition is down by one
semitone, the new key is X3, with no change of letter. Any number of triples
may be present, or the information can be given in separate directives. If a
transposition is specified more than once, the last value is used. A
transposition of zero may be given. Transpositions whose absolute value is
greater than 11 are adjusted to be in the range -11 to +11.
The &%keytranspose%& directive is not confined to custom keys. It can be used
with standard keys in order to achieve special effects such as re-setting a
part with a key signature using explicit accidentals and no key signature, as
in this example:
.code
key E
keytranspose E 0=N/0
transpose 0
.endd
A hard error occurs if a note cannot be transposed in the manner specified.
.subsection "Keywarn"
.index "&%keywarn%&"
This directive can be used at the start of a new movement to cancel the effect
of &%nokeywarn%& in the previous movement.
.subsection "Landscape"
.index "&%landscape%&"
This directive is permitted only in the first movement. It causes all the
output to be in `landscape' format, that is, with the long side of the page
horizontal. The value of &%linelength%& is interchanged with the value of
&%pagelength%&, and likewise the value of &%sheetwidth%& is interchanged with
&%sheetdepth%&. Subsequent directives affect the new values. The &%landscape%&
directive should appear after any uses of the &%sheetdepth%&, &%sheetdepth%&,
or &%sheetsize%& directives.
.subsection "Lastfooting"
.index "&%lastfooting%&"
.index "footing" "for last page"
.index "page footing" "for last page"
This directive specifies footing material for the last page of music, replacing
any text specified with &%footing%& or &%pagefooting%& for that page. The
arguments are exactly as for &%heading%& or &%footing%&, but long strings are
not automatically split up into multiple lines. &%Lastfooting%& can also be
used to specify a special footing for the last page of an individual movement
in a piece that has several movements. For details, seen the &%[newmovement]%&
directive.
.subsection "Layout" SUBSECTlayout
.index "&%layout%&"
.index "page layout, forcing"
The &%[newline]%& and &%[newpage]%& directives, together with &%notespacing%&,
are useful for occasional overriding of PMW's default layout choices. However,
if a particular layout for an entire piece is required, achieving it with
&%[newline]%&, &%[newpage]%& and &%notespacing%& is a bit tedious.
The &%layout%& directive makes it possible to specify exactly how many bars are
to be placed in each system, and how many systems are to fit on each page. This
directive applies only to the movement in which it appears. If a subsequent
movement contains no &%layout%& directive, PMW fills its systems according to
the width of the bars. If you are using &%layout%&, it is not usually necessary
to use &%notespacing%& as well.
It its simplest form, &%layout%& is followed by a list of numbers, separated by
commas or white space. If the list is long, it can be split into several lines
of input. Each number in the list specifies the number of bars in a system. If
there are more systems than numbers, the list is restarted from the beginning.
.code
layout 4
.endd
This example specifies that every system (except possibly the last one) is to
contain exactly four bars.
.index "semicolon" "in layout list"
.index "; (semicolon)" "in layout list"
If page breaks are required at particular points, they are specified by a
semicolon in the layout list.
.code
layout 4, 3; 5, 4, 4;
.endd
This example specifies two pages, the first containing two systems and the
second three systems. If too many systems are specified for a page, PMW inserts
a page break of its own. If the width of the bars specified for a system is
greater than the linelength, they are compressed until they fit; if too many
are specified the result may be very cramped. If the same item or sequence of
items is repeated in a layout list, it can be enclosed in parentheses and
preceded by a repeat count. Parentheses can be nested.
.code
layout 3(4, 5(6);)
.endd
This example defines three pages, each consisting of one system of four bars
followed by five systems of six bars. Note the difference between the following
two examples:
.code
layout 2(4,3;)
layout 2(4,3);
.endd
The first specifies two pages; the second specifies one page containing four
systems.
.subsection "Ledgerstyle"
.index "ledger lines" "thicker style"
The &%ledgerstyle%& directive, which must be followed by 0 or 1, can be used to
choose between thinner or a thicker ledger lines. The default is 0, which
selects the thinner line; on some printers this may look too insignificant,
which is why the thicker style is provided.
.subsection "Leftmargin"
.index "&%leftmargin%&"
Normally, PMW centres page images horizontally on the paper. The width of paper
used for this purpose can be specified by &%sheetwidth%&. The &%leftmargin%&
directive can be used to specify a particular left-hand margin instead of
centring.
.subsection "Linelength and pagelength" SUBSECTlinepagelen
.index "&%linelength%&"
.index "&%pagelength%&"
.index "line length"
.index "length" "of line"
.index "page length"
.index "length" "of page"
The &%linelength%& and &%pagelength%& directives specify the size of the page
images that PMW produces; each takes a single argument which is a dimension in
points. The number may be preceded by a plus or a minus sign, indicating a
change to the existing value. If neither of these is present, the number
specifies an absolute value. The default line length is 480 points and the
default page length is 720 points. These values leave generous margins all
round on A4 paper. These two dimensions, together with &%sheetwidth%& and
&%sheetdepth%&, are the only ones that are not affected by magnification. They
define that part of the page on which printing is to occur, in absolute terms.
.subsection "Longrestfont"
.index "&%longrestfont%&"
.index "fonts" "long rest numbers"
The font used for the number that is printed above a multi-bar rest sign can be
set by means of the this directive. Its arguments are an optional size followed
by a font name.
.code
longrestfont 13 bolditalic
.endd
The default size is 10 points; if this directive is not used, the numbers are
printed in the roman font.
.subsection "Magnification"
.index "&%magnification%&"
.index "magnification"
This directive is permitted only in the first movement. It causes all the
output to be magnified or reduced by a specified factor, which can be greater
or less than 1.0. All dimensions in the PMW system are subject to the
magnification factor, &'except'& the line length, page length, sheet width, and
sheet depth, which are absolute values, and which are therefore not affected by
magnification.
.code
magnification 1.5
.endd
This example causes the output to be one and a half times as large as the
default size. A magnification of around 1.2 is good for printing individual
instrumental parts.
.code
magnification 0.5
.endd
This example reduces the output to half size. Reduction is helpful when
printing full scores. Magnification or reduction can sometimes be helpful in
fitting a piece onto the paper, though it is more usual to use other directives
such as &%notespacing%& and/or &%layout%& for this purpose.
.subsection "Makekey" SUBSECTmakekey SUBSECTmakekey
.index "&%makekey%&"
.index "custom keys" "defining"
.index "key signatures" "custom"
.index "key signatures" "non-standard forms"
.index "accidentals" "in key signatures"
This directive is used to define a custom key signature. Its first argument is
the name of one of the custom keys &`X1`& to &`X10`&. This is followed by a
definition of where accidentals exist for this key. Each accidental is
specified by an accidental code followed immediately by a number in the range 0
to 9. The number specifies the position of the accidental for the treble clef.
Zero is the bottom line, one is the first space, two is the next line, and so
on. Optional spaces may appear between each definition. For example:
.code
makekey X3 #2 $6
.endd
This example defines a (strange) key in which Gs are sharpened and Ds are
flattened. The accidentals are output from left to right in the order of
definition. Although the definition relates to the treble clef, custom keys can
be used with any clef. For other clefs, the accidental positions are first
raised or lowered as appropriate, then if any accidental ends up above the top
space or below the bottom line, it is lowered or raised by an octave. If the
result is not what is wanted, the &%printkey%& directive can be used to vary
what is printed for specific clefs.
.index "half sharp" "in key signatures"
.index "half flat" "in key signatures"
.index "accidentals" "half sharps and flats"
.index "sharp, half"
.index "half sharp"
.index "flat, half"
.index "half flat"
Any accidental can be specified, including half sharps and flats (&`#-`& and
&`$-`&) and even double accidentals or naturals. However, half accidentals are
not supported in MIDI output. Custom keys can be redefined in multiple-movement
pieces. They can be transposed, but only if you supply additional information
in the form of one or more &%keytranspose%& directives (&R;
&<<SUBSECTkeytranspose>>&). If you use a custom key without defining it, it
behaves as C major.
The &%makekey%& directive was added to PMW long after &%printkey%& (&R;
&<<SUBSECTprintkey>>&), which addresses some of the same issues. The
differences are as follows:
.ilist
&%printkey%& affects only what is printed for a specific key signature and
clef. The key itself is unaffected and can be transposed.
.next
To use &%printkey%& you need to understand a bit about PMW's music font and how
to `program' character positioning.
.next
&%makekey%& constructs an actual key which can be used with any clef, and which
affects MIDI output (though half accidentals are not supported by MIDI).
.next
Using &%makekey%& is simpler than &%printkey%& but you have to supply
additional information if you want to transpose a custom key.
.endlist
.subsection "Maxbeamslope"
.index "&%maxbeamslope%&"
.index "beaming" "slope"
.index "slope of beams"
This directive can be used to limit the maximum slope of beams. It takes two
numbers as arguments. These are the maximum slopes of beams containing two
notes and beams containing more than two notes, respectively. The default
setting is equivalent to:
.code
maxbeamslope 0.31 0.33
.endd
The &%[beamslope]%& directive, which sets an explicit slope for a given beam,
is not limited by these maxima. They apply only when PMW is choosing its own
slope.
.subsection "Maxvertjustify"
.index "&%maxvertjustify%&"
This directive is permitted only in the first movement. It controls the maximum
amount of vertical space that PMW is prepared to insert between any two systems
when vertically justifying a page. The default value is 60 points, which means
that if the default system gap is in force, the furthest apart any two systems
can be is 104 points.
.index "page" "forcing stave to bottom"
To ensure that the bottom stave is always at the bottom of the page under all
circumstances, specify a large value for &%maxvertjustify%&.
.subsection "Midichannel" SUBSECTmidichannel
.index "&%midichannel%&"
.index "MIDI" "channel allocation"
This directive allocates a MIDI voice and/or one or more PMW staves to a MIDI
channel, and sets a relative volume for the channel. This information is used
only when PMW writes a MIDI output file. The values set by &%midichannel%& are
carried over from one movement to the next, but it can appear in any movement
to alter the settings. There can be up to four arguments, of which only the
first, the channel number, is mandatory. There are also &%[midichannel]%& and
&%[midivoice]%& stave directives that can be used to change the settings
part-way through a movement.
To allocate a particular MIDI voice (also known as a `program' or a `patch' in
MIDI-speak) to a MIDI channel, the voice number preceded by a sharp character,
or the voice name, is given in quotes after the channel number. If a channel's
voice is specified more than once, the last specification overrides the earlier
ones.
.code
midichannel 1 "#57"
midichannel 2 "church organ"
.endd
There are sixteen MIDI channels, numbered 1&--16 (but see the next section for
the special properties of channel 10). There are 128 possible MIDI voices; the
first form of the directive, where the string starts with #, specifies the
voice by a number in the range 1&--128 (but note that it must still be supplied
as a string in quotes). This numbering is in accordance with the &'General
MIDI'& specification, which a number of manufacturers follow. Some MIDI
instruments use the numbers 0&--127 when setting voices manually; for these,
the manually set number of any given instrument is one less than the
corresponding &'General MIDI'& number.
The second form of voice identification uses an index file to translate a name
to a voice number. The file is installed in the PMW &_share_& directory and is
called &_MIDIvoices_&. You can edit it to change or add names. The version
supplied contains voice names taken from the &'General MIDI'& specification.
Because there is some variation in some of the names, you can have more than
one name for any given voice number, and there are some duplicates in the
supplied file.
All staves are initially allocated to MIDI channel 1. This channel allocation
can be changed by giving a list of staves to the &%midichannel%& directive,
with or without a voice name.
.code
midichannel 2 1,3,4-7
midichannel 4 "piano" 8-11
.endd
If no voice name is given, but a voice was set in a previous movement, that
voice is allocated when the current movement is played. If no voice is given in
the first movement, no voice allocation setting is transmitted on the channel,
which allows the voicing to be set manually on the instrument (if it has that
ability). Having set a voice in one movement, you can request `no voice
setting' in a subsequent movement by specifying an empty quoted string.
.index "MIDI" "relative channel volume"
In some MIDI multi-timbral instruments, the different voices are not balanced
with regard to volume, so if the same values are used in the &%midivolume%& or
&%[midivolume]%& directives for different voices, the resulting volumes do not
correspond. To help balance voices, a volume value in the range 0&--15 may be
given after the voice name, preceded by a slash.
.code
midichannel 1 "trumpet"/12 9
.endd
This example has the effect of reducing the volume of notes played via channel
1 by 12/15. This applies to all staves playing via the channel (in this
example, just stave 9). The actual volume used for any MIDI note is 127
multiplied by the channel volume and the stave volume and divided by 225.
.subsection "Midichannel settings for untuned percussion"
.index "untuned percussion"
.index "MIDI" "untuned percussion"
Before describing the final argument of the &%midichannel%& directive, it is
necessary to discuss MIDI's handling of untuned percussion. A single `voice'
can handle a large number of different untuned percussion instruments, by using
the `pitch' of each note to determine which instrument should sound. For
example, C might sound a bass drum and D a snare drum. Electronic keyboards
often have a `keyboard percussion' mode in which the keys correspond to
percussion sounds in this way. For some reason, this multiple instrument has
not been defined as one of the 128 &'General MIDI'& instruments. Instead, the
&'General MIDI'& specification states that MIDI channel 10 is to be used for
this kind of percussion. On MIDI instruments that implement this, it is not
possible to allocate any other voice to channel 10.
The final argument of the &%midichannel%& directive is used to
select an untuned percussion instrument. It must follow a list of staves
(typically just one stave) and consists of a string in quotes that specifies
either the MIDI pitch number, or the instrument name. Note that the other
string argument (the instrument name for a `normal' channel) is placed
immediately after the channel number, whereas this string argument comes last.
.code
midichannel 10 5 "#60"
midichannel 10 6 "triangle"
.endd
These examples specify the use of pitch 60 for stave 5 and the pitch
corresponding to a triangle for stave 6, both on channel 10. As for MIDI
voices, if the string starts with #, it specifies the pitch by number;
otherwise the file &_MIDIperc_& inside the PMW &_share_& directory is searched
to translate the name to a number. The supplied file contains the name
allocation that appears in the &'General MIDI'& specification. The effect of
supplying this argument is to force all notes on the stave to be played at the
same pitch, independent of the pitch that is given for printing purposes. A
percussion stave could therefore be set up thus:
.code
midichannel 10 4 "cowbell"
[stave 4 "Cowbell" hclef 1 stavelines 1]
b r b r | ...
.endd
The notes are specified as Bs so that they print on the stave line, but they
are played at the pitch that activates the cowbell sound, provided channel 10
is a &'General Midi'& percussion channel. For an alternative way of handling
untuned percussion, see the &%[printpitch]%& directive (&R;
&<<SUBSECTprintpitch>>&).
.subsection "Midifornotesoff"
.index "&%midifornotesoff%&"
.index "MIDI" "for invisible notes"
Notes that are suppressed in printed output by the use of &%[notes off]%& are
by default also omitted from MIDI output. The heading directive
&%midifornotesoff%& alters PMW's behaviour so that &%[notes off]%& no longer
affects MIDI output.
.subsection "Midistart"
.index "&%midistart%&"
.index "MIDI" "initializing"
The &%midistart%& directive is followed by a list of numbers in the range
0&--255. When a MIDI file is being created, the MIDI data defined by these
numbers is written to the file after PMW's normal initialization. Each number
defines a byte of MIDI data, and the whole sequence should consist of a
sequence of MIDI events that are to be obeyed at time zero when the file is
played. You must not attempt to supply any time information. PMW automatically
arranges for all these MIDI events to be specified at time zero by inserting a
zero byte before any value that is greater than 127. This feature can be used
by those familiar with the MIDI coding to do things like changing the stereo
position of the channels.
.code
midistart 176 10 0 177 10 40 178 10 80 179 10 120
.endd
This example pans channels 1&--4 evenly from full left (0) to nearly full right
(120).
.subsection "Miditempo"
.index "&%miditempo%&"
.index "MIDI" "tempo setting"
.index "tempo for playing"
This directive is used to specify the tempo that is used when PMW creates a
MIDI output file. It must have at least one argument, which is the tempo to be
used at the start of the movement. The tempo is always specified in crotchets
per minute, whatever the time signature. The initial setting can optionally be
followed by pairs of numbers separated by slashes, to specify changes of tempo
at particular bars.
.code
miditempo 100 24/120 60/90
.endd
This example specifies that the initial tempo is to be 100, but at the start of
bar 24 it changes to 120, and at the start of bar 60 it changes to 90. Bar
numbers are given in the standard PMW style; if there are uncounted bars then
decimal fractions can be used to refer to them (&R; &<<SECTident>>&).
If no &%miditempo%& directive is present, a default tempo of 120 is used.
If there is more than one movement, the initial tempo specified in a
&%miditempo%& directive carries over to the next movement (unless it contains
its own &%miditempo%& directive, of course), but tempo changes within a
movement do not. However, PMW cannot write more than one movement at a time to
a MIDI output file (see the &%-midimovement%& command line argument in chapter
&<<CHAPrunningpmw>>&).
.subsection "Miditranspose"
.index "&%miditranspose%&"
.index "MIDI" "transposing parts"
.index "transposing parts"
.index "transposing instruments"
.index "transposition" "for playing"
By default, PMW plays music exactly as written, except for recognizing
transposing clefs. If the piece contains a part for a transposing instrument it
will not play correctly. The &%miditranspose%& directive is provided to help
with this. It is used to specify that particular staves are to be played at a
pitch different to that at which they are printed. &%Miditranspose%& is
followed by pairs of numbers separated by slashes; the first number of each
pair is a stave number and the second is a transposition in semitones.
.code
miditranspose 1/-3
.endd
This example specifies that stave 1 is to be played a minor third lower than
written. There is also a &%[miditranspose]%& stave directive that can be used
to change the transposition part-way through a stave.
.subsection "Midivolume" SUBSECTmidivolume
.index "&%midivolume%&"
.index "MIDI" "volume"
.index "volume for playing"
The &%midivolume%& directive is used to set different relative volumes for
different staves. The value for a relative volume lies between 0 (silent) and
15 (maximum volume). By default, all staves are set at the maximum volume. A
single number sets the volume for all staves; this can be followed by pairs of
numbers separated by slashes, to specify relative volumes for individual
staves.
.code
midivolume 6 2/15
.endd
This example specifies that stave 2 is to be played at maximum volume, whereas
all other staves are to be played at volume 6. See also the &%[midivolume]%&
stave directive.
.subsection "Midkeyspacing"
.index "&%midkeyspacing%&"
.index "space" "for mid-line signatures"
When a mid-line bar starts with a key signature, the &%startlinespacing%& data
is used for any time signature that follows, but not for the key signature
itself. Instead, &%midkeyspacing%& controls the position of such key
signatures. It takes a single dimension as its argument; a positive value moves
the signature further away from the preceding bar line.
.subsection "Midtimespacing"
.index "&%midtimespacing%&"
When a mid-line bar starts with a time signature, its position can be
controlled by the &%midtimespacing%& directive, which takes a single dimension
as its argument. A positive value moves the signature further away from the
preceding bar line.
.subsection "Musicfont"
.index "&%musicfont%&"
.index "fonts" "alternative music"
This directive is permitted only in the first movement. It specifies, as a
string in quotes, the name of the music font to be used by PMW; its argument
is a text string. The facility is intended for accessing new or alternative
versions of the font. The default music font is PMW-Music.
.subsection "Nobeamendrests"
.index "&%nobeamendrests%&"
This directive, which has no arguments, can be used to cancel the effect of
&%beamendrests%& in a previous movement.
.subsection "Nocheck"
.index "&%nocheck%&"
.index "checking bar lengths"
This directive, which has no arguments, instructs PMW not to check that the
notes in each bar agree with the time signature. It is also possible to
suppress this check for individual bars (&R; &<<SUBSECTstavenocheck>>&).
.subsection "Nocheckdoublebars"
.index "&%nocheckdoublebars%&"
.index "checking bar lengths"
.index "bar lines" "double"
.index "double bar lines" "suppressing bar length check"
This directive, which has no arguments, instructs PMW not to check that the
notes in bars that begin or end with a double bar line agree with the time
signature.
.subsection "Nocodemultirests"
.index "&%nocodemultirests%&"
This directive cancels the effect of &%codemultirests%& in a previous movement.
.subsection "Nokerning"
.index "&%nokerning%&"
This directive is permitted only in the first movement. It disables the use of
kerning for text strings (&R; &<<SUBSECTkerning>>&).
.subsection "Nokeywarn"
.index "&%nokeywarn%&"
.index "key signatures" "suppressing warning"
.index "warning signatures"
By default, when there is a key signature change at the start of a new system,
PMW prints the new key signature at the end of the previous system, as is
conventional in most music. The heading directive &%nokeywarn%& suppresses
these warning key signatures. Individual occurrences can be suppressed by an
option on the &%[key]%& stave directive that changes the key signature.
.subsection "Nosluroverwarnings"
.index "&%nosluroverwarnings%&"
.index "warning signatures"
This directive, which has no arguments, can be used to cancel the effect of
&%sluroverwarnings%& in a previous movement.
.subsection "Nospreadunderlay"
.index "&%nospreadunderlay%&"
.index "underlay" "suppressing note spreading"
By default, PMW inserts additional space between notes if underlaid or overlaid
syllables would otherwise overprint each other. This directive disables this
facility for both underlaid and overlaid text.
.subsection "Notespacing"
.index "&%notespacing%&"
.index "notes" "spacing"
.index "spacing" "notes"
PMW contains a table of the minimum amount of horizontal space that follows
each kind of note; so much for a breve, so much for a semibreve, so much for a
minim, and so on. Systems are made up using these spacings, until a bar is
encountered which would make the system longer than the specified line length.
The previous bars are then stretched to fill the line if horizontal
justification is enabled.
The &%notespacing%& directive allows the table to be altered. It must be
followed by eight numbers that define the space (in points) that must follow
breves, semibreves, minims, crotchets, quavers, semiquavers, demi-semiquavers
and hemi-demi-semiquavers respectively. The values in the default table are
those of the following example:
.code
notespacing 30 30 22 16 12 10 10 10
.endd
Internally, note spacings are held to an accuracy of 0.001 points. An
alternative form of this directive specifies a multiplicative factor for each
value in the table. This is requested by following the directive by an asterisk
and a single number, or by two numbers separated by a slash.
.code
notespacing *1.5
notespacing *3/2
.endd
Each of these examples specifies that the values in the note spacing table are
to be multiplied by 1.5. If more than one multiplicative &%notespacing%& is
present, their effect is cumulative, but a multiplicative &%notespacing%& is
overridden if it is followed by an absolute setting. At the start of a new
movement, the absolute values that were current at the start of the previous
movement, before any multiplications, are re-instated.
Changing the note spacing is one way of controlling the assignment of bars to
systems and systems to pages. For example, if in the default state the last page
contains only two bars, a small reduction in the note spacing may enable the
whole piece to fit onto the previous page(s). On the other hand, if the final
page is not being fully used, increasing the notespacing by a small amount can
cause it to be filled out. You can also make temporary changes to the note
spacing table for certain bars of the music only (&R; &<<SUBSECTstavens>>&).
Another way of controlling the assignment of bars to systems is to use the
&%layout%& heading directive (&R; &<<SUBSECTlayout>>&). If you are using
&%layout%&, it is not usually necessary to use &%notespacing%& as well.
.subsection "Notime"
.index "&%notime%&"
.index "time signatures" "suppressing"
This directive, which has no arguments, specifies that time signatures are not
to be printed for the current movement. It does not stop PMW from checking the
notes in a bar and complaining if there are too many or too few (see
&%nocheck%& if you want to suppress this). &%Notime%& does not affect
subsequent movements. See also &%startnotime%&.
.subsection "Notimebase"
.index "&%notimebase%&"
.index "time signatures" "one number only"
This directive requests that only the `numerator' (that is, the upper number)
in time signatures be printed, in the middle of the stave. For example, in 3/4
time, only the 3 would be printed. Both numbers are required to be given when
specifying time signatures, however. This directive has no effect on time
signatures specified as C or A. See also the &%printtime%& directive for
another way of customizing time signatures.
.subsection "Notimewarn"
.index "&%notimewarn%&"
.index "time signatures" "suppressing warning"
.index "warning signatures"
By default, when there is a time signature change at the start of a new system,
PMW prints the new time signature at the end of the previous line, as is
conventional in most music. The heading directive &%notimewarn%& suppresses
these warning time signatures. Individual occurrences can be suppressed by an
option on the &%[time]%& stave directive that changes the time signature.
. ..........................................................................
. These directives are still in the code, but we no longer document them.
.
. .subsection Oldbeambreak
. .index &%oldbeambreak%&
. This directive is permitted only in the first movement.
. This directive is provided as a conversion aid for users of the previous
. version of PMW, which used a different convention for specifying beam breaks.
. .subsection Oldrestlevel
. .index &%oldrestlevel%&
. This directive is permitted only in the first movement.
. This directive is provided as a conversion aid for users of the previous
. version of PMW, which used a different convention for specifying changes of
. rest level.
. .subsection Oldstemlength
. .index &%oldstemlength%&
. This directive is permitted only in the first movement.
. This directive is provided as a conversion aid for users of the previous
. version of PMW, which used a different convention for specifying changes in
. stem length.
. .subsection Oldstretchrule
. This directive is permitted only in the first movement.
. This directive is provided as a conversion aid for users of versions of PMW
. prior to 3.35 who wish to preserve the exact layout of old files. Later
. versions may re-space some systems to achieve a more even note spacing where
. accidentals are involved. See also the &%stretchrule%& directive, which
. has superseded this one. Setting &%stretchrule%& to zero is equivalent to
. &%oldstretchrule%&.
. ..........................................................................
.subsection "Nounderlayextenders"
.index "&%nounderlayextenders%&"
This directive suppresses the printing of extender lines at the ends of
underlay words whose last syllable extends over more than one note. In a
subsequent movement &%underlayextenders%& can be used to restore them.
.subsection "Overlaydepth"
.index "&%overlaydepth%&"
.index "overlay" "line depth"
If two or more character strings, all designated as overlay, are attached to
the same note, they are automatically printed one above the other. The
distance between the baselines of the strings can be set by this directive. The
default depth is 11 points. The overlay depth and the underlay depth are
separate parameters.
.subsection "Overlaysize"
.index "&%overlaysize%&"
.index "overlay" "size"
By default, text that is specified as being vocal overlay is printed using a
10-point font. This directive enables a different point size to be chosen for
overlaid text.
.code
overlaysize 9.7
.endd
Individual items of overlay text can be printed at different sizes by using the
&`/s`& text qualifier. The overlay size and the underlay size are separate
parameters.
.subsection "Page"
.index "&%page%&"
.index "page numbers"
.index "numbering pages"
This directive is permitted only in the first movement. By default, page
numbers start from one. The &%page%& directive can be used to specify that they
should start at a different number. It takes the number of the first page as
its first argument. There is also a second, optional argument that gives the
increment by which page numbers are advanced.
.code
page 3 2
.endd
This example might be used in a file containing the &'primo'& part of a piano
duet. It causes the pages to be numbered 3, 5, 7, etc. Occasionally there is a
requirement to skip a page number in the middle of a piece &-- to insert a
commentary page in a critical edition, for example. See the &%[page]%& stave
directive for a means of doing this.
.subsection "Pagefooting"
.index "&%pagefooting%&"
.index "footing" "for middle pages"
.index "page footing" "for middle pages"
The &%pagefooting%& directive defines text to be printed at the foot of pages.
If a &%footing%& directive is present, it overrides &%pagefooting%& for the
first page only. The &%lastfooting%& directive can be used to override it for
the final page of a piece. The arguments for &%pagefooting%& are the same as
those for &%footing%&, but long strings are not automatically split up into
multiple lines. Note the use of the escape sequences &`\p\`&, &`\po\`&, and
&`\pe\`& to include page numbers in footing lines.
.subsection "Pageheading"
.index "&%pageheading%&"
.index "heading" "for middle pages"
.index "page heading" "for middle pages"
The &%pageheading%& directive defines text to be printed at the head of pages
other than the first. Its arguments are the same as those for &%heading%&, but
long strings are not automatically split up into multiple lines. Note the use
of the escape sequences &`\p\`&, &`\po\`&, and &`\pe\`& to include page numbers
in heading lines. See section &<<SUBSECTmovement>>& and also the
&%[newmovement]%& directive for discussions of headings when there is more than
one movement in a file.
.subsection "Pagelength"
This directive is permitted only in the first movement. See section
&<<SUBSECTlinepagelen>>& (&'Linelength and pagelength'&) above.
.subsection "Playtempo"
.index "&%playtempo%&"
This directive is a synonym for &%miditempo%&. It dates from the early days of
PMW running on Acorn hardware, when playing was possible without using MIDI.
.subsection "Playtranspose"
.index "&%playtranspose%&"
This directive is a synonym for &%miditranspose%&. It dates from the early days
of PMW running on Acorn hardware, when playing was possible without using MIDI.
.subsection "Playvolume"
.index "&%playvolume%&"
This directive is a synonym for &%midivolume%&. It dates from the early days of
PMW running on Acorn hardware, when playing was possible without using MIDI.
.subsection "PMWversion"
.index "&%pmwversion%&"
.index "version of PMW, checking"
.index "PMW version, checking"
This directive checks the version of PMW is in use. It must be
followed by a version number or a version number preceded by &`>`& (greater
than), &`<`& (less than), or &`=`& (equal, same as no sign):
.code
pmwversion 4.20
pmwversion > 4.32
pmwversion < 4.40
.endd
If the wrong version is used, a message is output and PMW stops.
.subsection "Printkey" SUBSECTprintkey
.index "&%printkey%&"
.index "key signatures" "specifying print format"
.index "key signatures" "non-standard forms"
.index "accidentals" "in key signatures"
.index "half sharp" "in key signatures"
.index "half flat" "in key signatures"
Some old music uses key signatures in which the accidentals are placed
differently to the modern convention. For example, for a treble clef G major
signature, the sharp is on the bottom space of the stave instead of on the top
line. The &%printkey%& directive can be used to reproduce such usage. It can
also be used to specify the appearance of half sharps and half flats in key
signatures. Another way of doing this (a more recent addition to PMW) is to use
the &%makekey%& directive (&R; &<<SUBSECTmakekey>>&) to define a custom key.
The syntax of &%printkey%& is as follows:
.display
&`printkey `&<&'key'&>&` `&<&'clef'&>&` "`&<&'string'&>&`" ["`&<&'string'&>&`"]`&
.endd
There may be many occurrences of &%printkey%& in a single input file. The
directive applies to the movement in which it occurs, and any subsequent
movements, unless overridden by a subsequent &%printkey%& directive with the
same key and clef. The most recent occurrence is always the one that is used.
The use of &%printkey%& affects only what is printed for the given key/clef
combination. It has no other effect on PMW's behaviour.
The first string specifies what is to be printed instead of the normal key
signature. The second, optional string specifies what is to be printed for a
`cancellation' key signature, that is, when there is a change to a key with an
empty signature. If not supplied, this string is set empty.
The string is normally a sequence of characters in the music font, which is set
as the default font at the start of the string. The size is fixed at 10 points,
scaled to the stave's magnification. You can change to other fonts by means of
the usual escape sequences, but the size cannot be varied. The starting
vertical position is the bottom line of the stave; you can use the up and down
moving characters in the music font to position accidentals (or other
characters) where you want them.
.code
key G
printkey G treble "\37\" "\40\"
printkey E$ treble "x~\39\x~\191\ww\191\"
printkey E$ bass "~\39\x~\191\ww\191\"
[stave 1 treble 1]
GG | [key C] GG | [key E$] GG [bass 0] | [key E$] GG ||
[endstave]
.endd
.music "music47" 32 4,-16
In the above example, the custom G major key signature is a single sharp
(character 37 in the music font), printed in the initial vertical position,
with a natural (character 40) in the same position for cancellation. For the
E-flat treble clef signature, characters 120 (&`x`&) and 126 (&`~`&) are used
to move up four and two points, respectively, so that the flat (character 39)
prints on the middle line of the stave. Further appearances of &`x`& and &`~`&,
and also character 119 (&`w`&), which moves down four points, are used to
position the half flats (character 191) that follow. A similar string is used
for the bass clef. Details of the music font characters are given in chapter
&<<CHAPfont>>&.
.subsection "Printtime"
.index "&%printtime%&"
.index "time signatures" "specifying print format"
Time signatures are occasionally printed in unusual formats. This directive
specifies how a given time signature is to be printed. It has the following
syntax:
.display
&`printtime `&<&'time signature'&>&` "`&<&'top'&>&`" "`&<&'bottom'&>&`"`&
.endd
There may be many occurrences of &%printtime%& in a single input file. The
directive applies to the movement in which it occurs, and any subsequent
movements, unless overridden by a subsequent &%printtime%& directive for the
same time signature. The most recent occurrence is always the one that is used.
Whenever the given time signature is to be printed, the two strings are printed
instead, one above the other, with their centres aligning. If the second string
is empty, the first is printed on the second stave line; otherwise they are
printed on the third and first stave lines, respectively. Some examples of
possible uses are:
.code
printtime 8/8 "3+3+2" "8"
printtime 12/8 "3 2" "2 2"
printtime 3/4 "" ""
.endd
The last example suppresses all printing for the 3/4 time signature. The
default font at the start of each string is the font specified by the
&%timefont%& directive for the current or a preceding movement. If &%timefont%&
is not used, the default font is the bold font. However, changes of font are
permitted within the strings. The default size of the text printed by
&%printtime%& is that specified by &%timefont%&, with 11.8 points as the
ultimate default. However, it is possible to follow each text string with
&`/s`& and a number, to specify a particular size for a given string. The
number refers to the list of text sizes specified by the &%textsizes%&
directive.
.subsection "Psfooting"
.index "&%psfooting%&"
This directive makes it possible to include raw PostScript in PMW output at the
end of the first page. Unless you are a PostScript expert, this facility is not
for you. The directive must be followed by a string in double quotes. If the
first character of the string is `<' the rest of the string is taken as a file
name from which to copy PostScript into the PMW output at the footing point.
See section &<<SECTpsinc>>& for details of how included PostScript files are
processed. When the PostScript is inserted, the environment is as for the music
that has just been printed, with the origin at the left-hand bottom corner of
the page. Any magnification is still in force. The string is &'not'& processed
as a normal PMW string. This means that, if it is a literal string and
backslashes are required in the PostScript output, they must &'not'& be doubled
in the input.
.subsection "Psheading"
.index "&%psheading%&"
This directive makes it possible to include raw PostScript, in the same format
as for &%psfooting%&, at the head of the first page. The PostScript is inserted
at the point where headings are output, but the environment is the same as for
&%psfooting%&, with the origin at the left-hand bottom corner of the page.
.subsection "Pslastfooting"
.index "&%pslastfooting%&"
This directive makes it possible to include raw PostScript, in the same format
as for &%psfooting%&, at the end of the final page.
.subsection "Pspagefooting"
.index "&%pspagefooting%&"
This directive makes it possible to include raw PostScript, in the same format
as for &%psfooting%&, at the ends of pages other than the first.
.subsection "Pspageheading"
.index "&%pspagefooting%&"
This directive makes it possible to include raw PostScript, in the same format
as for &%psfooting%&, at the heads of pages other than the first.
.subsection "Pssetup"
.index "&%pssetup%&"
This directive is permitted only in the first movement. It is used to include
private PostScript, in the same format as for &%psfooting%&, at the end of the
prologue that is output by PMW before the PostScript for the first page.
Although you can include a PostScript font definition by this means, this can
also be done via the &%textfont%& directive.
.subsection "Rehearsalmarks"
.index "rehearsal marks"
.index "&%rehearsalmarks%&"
This directive controls the way rehearsal marks are printed. It has this
syntax:
.display
&`rehearsalmarks`& <&'align'&> <&'style'&> <&'size'&> <&'fontname'&>
.endd
All the arguments are optional, except that if <&'fontname'&> is present, one
of either <&'style'&> or <&'size'&> (or both) must precede it. Parameters that
are unspecified are left unchanged. The settings are copied to any following
movement, but can be changed therein.
The <&'align'&> argument affects the positioning of rehearsal marks that occur
at the start of the first bar of a system (that is, at the start of a line). By
default, such marks are aligned with the first note in the bar. If
`linestartleft' is present, these marks are instead placed at the start of the
line; `nolinestartleft' can be used to restore the default in a following
movement. If <&'style'&> is present, it must be one of the words `boxed'
(enclose in a rectangular box), `ringed' (enclose in a ring), or `plain' (do
not enclose). The size is the font size, and the final argument specifies the
font to be used (&R; &<<SECTtextfonts>>&).
.code
rehearsalmarks boxed 13
rehearsalmarks ringed italic
rehearsalmarks 11 bolditalic
rehearsalmarks linestartleft plain 14 bold
.endd
By default, rehearsal marks are printed enclosed in a box, in a 12-point roman
font.
.subsection "Repeatbarfont"
.index "&%repeatbarfont%&"
.index "fonts" "for repeat bars"
The font used for printing the numbers on first and second time bars can be set
by this directive. Its arguments are an optional size followed by a
(non-optional) font name.
.code
repeatbarfont 8 extra 4
.endd
This example specifies the use of the fourth extra font, at an 8-point size.
The default size is 10 points, and the default font is roman.
.subsection "Repeatstyle" SUBSECTrepeatstyle
.index "&%repeatstyle%&"
.index "repeat marks"
This directive specifies how repeat marks are to be printed. The default is the
conventional combination of two dots with a thin and a thick vertical line.
This directive must be followed by one of the following numbers:
.itable none 0 0 2 12 left 200 left
.row &`0`& "normal style"
.row &`1`& "no thick vertical line"
.row &`2`& "no thick vertical line, and thin line dotted"
.row &`3`& "four dots only (unless at a bar line)"
.row &`4`& "as 0, but alternate amalgamated form"
.endtable
If style 2 is used at the start or end of a bar, you must use an invisible bar
line if you want to prevent the dotted line being overprinted by a normal bar
line. Style 4 is the same as style 0 (the default) except when the end
of a repeated section is immediately followed by the start of another repeated
section (typically coded as &`:)|(:`& in the input file). In style 0, a thin
line, thick line, and second thin line are printed between the dots. This style
is recommended in Gardner Read's &'Music Notation'& and also shown in Kurt
Stone's &'Music Notation in the Twentieth Century'&. However, some editors
prefer to have just two thick lines between the dots, and this is what style 4
gives.
.music "music37" 32 0,-16 centre
.subsection "Righttoleft" SUBSECTrighttoleft
.index "&%righttoleft%&
.index "printing right to left"
The &%righttoleft%& directive causes PMW to print music from right to left
instead of in the conventional left-to-right manner. This directive must appear
in the first movement of a file, and it applies to all the movements that
follow. The facility was ``bolted on'' to the existing PMW code, and as a
result has some awkwardnesses, in particular in the way in which character
strings are handled. It is also somewhat experimental and is likely to give
strange results if some of the more complicated features of PMW are used.
Nevertheless, &%righttoleft%& makes it possible to typeset music in a manner
that is sometimes used in countries whose language is written from right to
left. Although the music runs from right to left, the shapes of the notes,
accidentals, and clefs are not altered.
Right-to-left printing is implemented by transforming the PostScript coordinate
system so that the x-axis runs to the left and the origin is at the righthand
side of the page image. Within the transformed coordinate system, fonts are
themselves re-transformed so that their characters appear as normal. This means
that characters in text strings still print from left to right; however, the
positioning of text strings is adjusted so that they end rather than start at
their normal position. There is a further complication if there are font
changes within a text string. The substrings, taken in order in the input file,
are printed from right to left, but within each substring, the characters run
from left to right. Note the way that the strings in this example are rendered:
.code
[stave 1 treble 1]
"\*c\\bf\104 = "/a/ts/u2
"m\bi\f" A #g. a- | "abc" c'-b-a-g-; G |
.endd
.music "music50" 48 12,-14
The first string, &`"\*c\\bf\104 = "`& is split into two substrings, the first
being a crotchet character from the music font, and the second being the text
&`"104 = "`& from the bold font. The &`/ts`& option specifies that the string
is positioned at the time signature, so this is where the first substring is
printed; the second string is then placed to its left. The second string,
&`"m\bi\f"`&, also uses two fonts, and so the italic &'m'& appears to the
right of the bold italic &'&*f*&'&. The third string has no font changes, so
the characters appear in order.
If PMW has been compiled with B2PF support, you can use the &%b2pffont%&
directive to cause strings in certain fonts to be processed by the B2PF
library, which can convert base characters to presentation forms, and can also
reverse the order of characters in a string.
When right-to-left printing is enabled, right and left are interchanged in all
the facilities for moving items horizontally, and for the left-centre-right
feature of heading lines. For example, using &`/r`& on a string moves it left
instead of right. In shapes defined by the &%draw%& directive, x-coordinates
are inverted, with positive values moving left instead of right.
If any of the two-up printing styles is selected when &%righttoleft%& is
enabled, the order of printing the pages on the sheets is reversed. This makes
it possible to print correct right-to-left pamphlet-style pages for folding and
binding.
.subsection "Selectstave(s)"
.index "&%selectstave%&"
.index "staves" "selection of"
This directive is used to specify a selection of staves to be printed. It
overrides any selection given by the &%-s%& option on the command line. The
directive is followed by a list of staves and/or ranges of staves, and is
intended for use in conjunction with the &%-f%& command line option, as in this
example:
.code
if chorus
selectstaves 5-8
fi
if cello
selectstave 4
fi
.endd
Any tests that rely on a particular stave selection must follow this directive.
.subsection "Sheetdepth, Sheetwidth, and Sheetsize"
.index "&%sheetdepth%&"
.index "&%sheetsize%&"
.index "&%sheetwidth%&"
.index "A3, A4, A5 paper size"
.index "B5 paper size"
.index "size" "of paper"
.index "width" "of paper"
.index "depth of paper"
These three directives are permitted only in the first movement. They are
concerned with specifying the size of page image that PMW creates.
&%Sheetdepth%& and &%sheetwidth%& can be used to specify the vertical and
horizontal dimensions individually, but for standard sizes it is usually
simpler to use &%sheetsize%&, which must be followed by one of the words `A3',
`A4', `A5', `B5', or `letter'. Its effect is to set the sheet depth and width
parameters to suitable values for the given paper size, and also to set the
&%linelength%& and &%pagelength%& values, as follows:
.itable none 0 0 5 40 centre 64 centre 64 centre 64 centre 64 centre
.row &'Size'& &'Sheetwidth'& &'Sheetdepth'& &'Linelength'& &'Pagelength'&
.row A3 842 1190 730 1060
.row A4 595 842 480 720
.row A5 421 595 366 480
.row B5 499 709 420 590
.row letter 612 792 500 670
.endtable
Adjustments to the line length or page length must be made after any appearance
of &%sheetsize%&, which should also precede any occurrence of the &%landscape%&
directive. If A5 or B5 is specified and the page is printed on A4 paper, it
appears by default at the bottom left-hand corner. This position can be
adjusted by using the &%-printadjust%& command line option, or A5 pages can be
printed two-up by specifying &%-a5ona4%&.
.subsection "Shortenstems"
.index "&%shortenstems%&"
.index "stems" "automatic shortening"
Some editors like to shorten note stems that are pointing the `wrong' way
(upward stems for notes above the middle of the stave or downward stems for
notes below the middle of the stave). PMW can be made to do this shortening
automatically. &%Shortenstems%& must be followed by one number, which is the
maximum amount by which a stem may be shortened.
.code
shortenstems 4
.endd
This example allows PMW to shorten stems automatically by up to 4 points. The
default value of zero causes no automatic shortening. Additional shortening (or
lengthening) can be specified explicitly for any given note, and this is added
to any automatic shortening that may be set. PMW maintains an overall minimum
stem length beyond which stems cannot be shortened, so specifying a large limit
such as 99 permits shortening down to this minimum length. Automatic shortening
reduces a stem's length by 0.5 points for each note position on the stave, so,
for example, a note on the top line has its upward-pointing stem shortened by 2
points (provided the &%shortenstems%& limit allows this).
.subsection "Sluroverwarnings"
.index "&%sluroverwarnings%&"
.index "slurs" "over warning signatures"
.index "ties" "over warning signatures"
.index "warning signatures" "slurs and ties over"
When a line ends with a warning time or key signature, and there is a slur or
tie that is continued from this line to the next, PMW does not by default draw
the slur or tie over the warning. This directive requests it to do so.
.subsection "Smallcapsize"
.index "&%smallcapsize%&"
When the escape sequence &`\sc\`& is used in a string to change to small caps,
it selects a new font of the same typeface as before, but at a relative size
that can be set by this directive. The default value is 0.7.
.subsection "Startbracketbar"
.index "&%startbracketbar%&"
This directive applies only to the movement in which it appears; it affects the
first system of the movement. It specifies a number of bars by which the
joining brackets and/or braces that normally appear at the left-hand end are to
be `indented'. The second and subsequent systems are not affected. If the word
`join' appears before the number, the joining lines as specified by the
&%join%& and &%joindotted%& directives are repeated at the indented position;
by default they are not (but usually there is a bar line present). See section
&<<SECTincipit>>& for an example of the use of &%startbracketbar%&.
.subsection "Startlinespacing"
.index "&%startlinespacing%&"
.index "spacing" "start of line"
.index "clefs" "space before"
This directive controls the spacing of clefs, key signatures, and time
signatures at the start of lines of music. It can be followed by up to four
dimensions. Omitted numbers are taken as zero. The syntax is:
.display
&`startlinespacing`& <&'c'&> <&'k'&> <&'t'&> <&'n'&>
.endd
Each number specifies additional space &'before'& a particular item at the
start of each stave:
.itable none 0 0 2 12 left 200 left
.row &'c'& "is the extra space before the clef"
.row &'k'& "is the extra space before the key signature"
.row &'t'& "is the extra space before the time signature"
.row &'n'& "is the extra space before the first note"
.endtable
The arguments can be given negative values to move the items closer together.
If an item is absent on a stave, the associated extra space is also omitted.
When a mid-line bar starts with a clef (rare in the ordinary course of events,
but can occur, for example, after an incipit), the &%startlinespacing%& values
are used for the clef and any signatures that follow it, exactly as at the
start of a line. See &%midkeyspacing%& and &%midtimespacing%& for ways of
handling key and time signatures that occur at the start of mid-line bars.
.subsection "Startnotime"
.index "&%startnotime%&"
.index "time signatures" "suppressing"
This directive, which has no arguments, applies only to the movement in which
it appears. It causes no time signature to be printed at the start of the
movement, but does not suppress the printing of subsequent time signature
changes. This is useful for printing parts of pieces. The &%notime%& directive
suppresses all time signatures in a piece.
.subsection "Stavesize(s)" SUBSECTstavesize
.index "&%stavesizes%&"
.index "size" "of staves"
This directive specifies that certain staves are to be printed at different
sizes to the rest. It is followed by pairs of numbers, separated by slashes.
The first of each pair is a stave number, and the second is the size of the
stave relative to the standard stave size.
.code
stavesize 1/0.8
stavesizes 4/1.2 5/1.2 6/1.2
.endd
The first example specifies that stave 1 is to be printed at 0.8 times the
normal size, and the second specifies that staves 4&--6 are to be printed at
1.2 times the normal size. A change in the relative size of a stave affects
everything that prints on that stave, both notes and text items. However, the
text that appears to the left of the stave (the instrument name) is not
affected, and neither are bar numbers
.index "bar numbers" "size on scaled stave"
.index "rehearsal marks" "size on scaled stave"
or rehearsal marks. A size may be specified for stave zero if required. As no
notes are ever printed on this stave, only text items are affected.
.index "bar lines" "breaking"
.index "bar lines" "thick and thin"
Bar lines are printed thicker or thinner, as necessary, unless a fixed size has
been specified with &%barlinesize%&. With varying barline thicknesses, it is
conventional to break bar lines between staves of different sizes to avoid
ugly joins.
.subsection "Stavespacing" SUBSECTstavespacing
.index "&%stavespacing%&"
.index "staves" "spacing"
.index "spacing" "staves"
This directive controls the amount of vertical white space between staves. The
distance between staves is measured from the bottom of one stave to the bottom
of the next. The default is 44 points. If the &%stavespacing%& directive is
followed by just one number, this sets the spacing for all staves to that
value. After such a single number, further items can be given to set different
spacings for individual staves.
.code
stavespacing 50 1/54 3/60
.endd
This example sets the spacing for all staves to 50 points, except for staves 1
and 3, which have their own settings. The initial overall number is optional.
The remaining arguments for this directive consist of pairs or triples of
numbers, separated by a slash. The first number is always a stave number. In
the case of number pairs, the second number specifies the spacing between the
stave and its successor on the page.
.code
stavespacing 1/36 4/50
.endd
This example ensures that staves 1 and 2 are nearer together than the default,
at 36 points, and staves 4 and 5 are further apart at 50 points (assuming
that all these staves are selected for printing).
Sometimes there is a requirement to specify the amount of space &'above'& a
stave. For example, in a piece with an accompaniment and four vocal lines, not
all of which are present throughout the piece, it is a common requirement that
there be more space between the last vocal stave (whichever it is) and the
first accompaniment stave. Changing the stave spacing every time the last vocal
line is suspended or resumed can be avoided by using a triple in the
&%stavespacing%& directive. Whenever three numbers appear as a argument to
&%stavespacing%&, the second number specifies a &'minimum'& space &'above'& the
given stave, and the third specifies the space below it.
.code
stavespacing 1/46 2/50 3/50/48
.endd
This example specifies that stave 3 always has at least 50 points above it,
even when stave 2 is suspended. Space specified above the top stave is ignored,
and, if it is desired to specify space above the last stave, some dummy third
number must be given to fulfil the syntax requirement of three numbers.
The spacing between staves can be varied in the middle of a piece. See the
stave directives &%[ssabove]%&, &%[sshere]%&, and &%[ssnext]%& (&R;
&<<SUBSECTss>>&).
.index "overprinting" "staves"
A value of zero may be given for the spacing. This causes two successive staves
to print on top of each other, and can be useful for printing two lines of
music on the same stave. It can also be useful for printing a figured bass
line, using invisible notes to set the horizontal positioning for the figures.
However, if only a few bars of a piece require overprinting, the &%[reset]%&
stave directive may be more convenient than the use of a complete overprinted
stave.
.subsection "Stemlengths"
.index "&%stemlengths%&"
.index "stems" "length adjustment"
This directive is followed by up to six numbers, which specify adjustments to
stemlengths for unbeamed minims, crotchets, quavers, semiquavers,
demisemiquavers, and hemidemisemiquavers, respectively. The values may have
fractions, and negative values (indicating stem shortening) can be used.
Unbeamed notes that are shorter than a semiquaver need to have their stems
lengthened in order to fit in the extra tails. The default setting for this
directive is:
.code
stemlengths 0 0 0 0 2 4
.endd
This specifies stem lengthening for demisemiquavers and hemidemisemiquavers of
2 and 4 points, respectively.
.subsection "Stemswap" SUBSECTstemswap
.index "&%stemswap%&"
.index "stems" "direction"
.index "notes" "stem direction"
.index "direction of stems"
.index "changing stem rules"
This directive is used to alter the way in which PMW chooses stem directions
for notes lying on the stem swap level for the stave. Specifying this directive
has the effect of altering rules N5 and N6 as described in section
&<<SECTstemdir>>& (&'Stem directions'&). Note that rule N3 is &'not'& affected.
.code
stemswap up
.endd
All notes at the stem swap level that are not otherwise constrained have stems
that go upwards. This can be useful when there is vocal underlay.
.code
stemswap down
.endd
This gives the opposite effect, and may be useful for American publishers.
.code
stemswap left
.endd
The direction of the stem of a note on the stem swap level depends on the stem
direction of the note to its left, viewing the part as one long stave (in other
words, it depends on the previous note). If the previous note is a breve or
semibreve, a notional stem direction is computed as if it were a shorter note.
.code
stemswap right
.endd
This makes the stem direction depend on the next note to the right that is not
also on the stem swap level. However, the search for the next note does not
extend beyond the end of the bar. If the final note(s) of a bar are on the stem
swap level, their stem direction is taken from the preceding note.
.subsection "Stemswaplevel" SUBSECTstemswaplevel
.index "&%stemswaplevel%&"
.index "stems" "direction"
.index "notes" "stem direction"
This directive specifies, for each stave, the level at which stems normally
swap from pointing down to pointing up. The default value is zero, which
specifies the middle line of the stave. On the swap level itself, the stem may
go either up or down, depending on the surrounding notes and the option set by
&%stemswap%& or defaulted. &%Stemswaplevel%& can be followed by a single
number, in which case it refers to every stave, or it can be followed by pairs
of numbers separated by slashes, rather like &%stavespacing%&. The change in
swap level may be positive or negative, and its units are note positions.
.code
stemswaplevel 1/1 2/-1
.endd
This example requests that on stave 1, the swap level is moved to the third
space instead of the third line, and on the second stave it is moved down to
the second space.
.subsection "Stretchrule"
.index "&%stretchrule%&"
.index "compatibility" "pre-4.22"
In release 4.22 of PMW there was a change to the horizontal spacing algorithm,
affecting systems that have to be compressed to fit on the line. This is most
commonly caused by the use of the &%layout%& directive (&R;
&<<SUBSECTlayout>>&). When bars are first formatted, notes may be moved apart
in order to avoid underlay words crashing into each other; compressing the
system horizontally later on, however, could still cause crashes. The new
algorithm does some re-spacing when systems are compressed.
Users may have old files in which they have manually moved underlay syllables
in order to overcome the problem in the old algorithm. The &%stretchrule%&
directive allows you to turn off the new feature, for backwards compatibility.
Its argument is an integer. There are three possible values, harking back to a
similar change in the distant past:
.itable none 0 0 2 12 left 200 left
.row "0" "Use the algorithm prior to release 3.35"
.row "1" "Use the algorithm prior to release 4.22"
.row "2" "Use the latest algorithm (default setting)"
.endtable
Values greater than 2 are treated as 2. This directive is permitted only in the
first movement.
.subsection "Suspend" SUBSECTheadsuspend
.index "&%suspend%&"
.index "suspending staves"
This directive affects only the movement in which it appears. It specifies the
suspension of certain staves from the beginning of the movement. It must be
followed by a list of staves, in the same format as the &%bracket%& and
&%brace%& directives.
.code
suspend 1,3,5-9
.endd
A detailed description of the suspension mechanism is given in the section on
the stave directive of the same name (&R; &<<SUBSECTsuspend>>&).
.subsection "Systemgap"
.index "&%systemgap%&"
.index "system gap"
.index "spacing" "systems"
.index "gaps" "between systems"
The vertical distance between systems is measured from the bottom of the last
stave of one system to the bottom of the first stave of the next system, and
this distance can be specified by &%systemgap%&, which takes a single dimension
as its argument. The default is 44 points, the same as the default spacing
between staves in a system. Thus, by default, the entire output on a page is on
evenly spaced staves when there is no vertical justification. When vertical
justification is happening (&R; &<<SUBSECTjustify>>&), the system gap is a
minimum distance between systems; once the page layout is determined, the gaps
are expanded so that the last stave of the last system on a page is exactly at
the bottom of the page. The spacing between systems can be varied in the middle
of a piece. See the stave directives &%[sghere]%&, &%[sgnext]%&, and
&%[sgabove]%& in section &<<SUBSECTsg>>&.
.subsection "Textfont" SUBSECTtextfont
.index "&%textfont%&"
.index "fonts" "additional"
.index "additional fonts"
This directive is permitted only in the first movement. By default, all text
characters that form part of a page of music are printed using the &'Times'&
series of fonts. This directive can be used to specify alternative fonts and
also to define up to twelve additional fonts. It takes the following form:
.display
&`textfont`& <&'fontword'&> "<&'full font name'&>"
.endd
The first argument must be one of the words `roman', `italic', `bold',
`bolditalic', `symbol', or `extra' followed by a number in the range 1&--12,
specifying which text font is being defined. The final argument is the full
name of the font, in double quotes.
.code
textfont bold "Palatino-Bold"
.endd
This example changes the bold face font from the default (which is
&'Times-Bold'&) to &'Palatino-Bold'&. An example that defines the first of the
twelve available extra fonts is:
.code
textfont extra 1 "Helvetica"
.endd
This font is accessed in text strings by the escape sequence &`\x1\`&. See
section &<<SUBSECTfontchanges>>& for details of font-changing escape sequences.
The capitalization of font names is important.
.index "fonts" "including in output"
The &%textfont%& directive has a third, optional argument that can be given
immediately before the font name. It is the word `include', for example:
.code
textfont extra 1 include "FancyFont"
.endd
If `include' is present, PMW searches for a font file to include in the
PostScript output. The file name must be the font name with the extension
&`.pfa`&, and the file must be in one of the directories that is searched for
AFM files (see the &%-F%& command line option). Note that the &%-incPMWfont%&
command line option applies only to PMW's music fonts.
.subsection "Textsizes" SUBSECTtextsizes
.index "&%textsizes%&"
.index "text" "sizes"
.index "figured bass" "size"
.index "underlay" "size"
.index "size" "of text"
Text that is specified with music on a stave can be printed in twenty different
sizes in addition to the default sizes for underlay, overlay, and figured bass
text. The &%textsizes%& directive specifies the sizes that are required. It is
followed by up to twenty font sizes, which may include stretching factors and
shear angles. Any unspecified sizes are set to 10 points.
.code
textsizes 10.5 11 7.6 9/1.1
.endd
By default, ordinary text is printed using the first size specified, but
underlay, overlay, and figured bass text is printed using the size specified by
the &%underlaysize%&, &%overlaysize%&, or &%fbsize%& heading directives,
respectively. To print text at any of the other sizes, the &`/s`& qualifier
must be used (&R; &<<SECTtextitems>>&).
.subsection "Thinbracket"
.index "&%thinbracket%&"
.index "bracket, thin"
.index "joining signs"
.index "staves" "joining signs"
This directive, which has the same syntax as &%bracket%& and &%brace%&, causes
a thin square bracket to be drawn to join two or more staves. Like &%brace%&,
nothing is drawn if it covers only one stave, and it is drawn outside the
thicker bracket, if that is present. This sign is sometimes used in scores to
join staves containing multiple parts for the same instrument.
.subsection "Time"
.index "&%time%&"
.index "time signatures" "specifying"
This directive applies only to the movement in which it appears. It sets a time
signature for all the staves of the movement. Changes can be made during the
music or for individual staves, which are permitted to have different time
signatures. See the &%[time]%& directive for details. The default time
signature is 4/4.
.subsection "Timebase"
.index "&%timebase%&"
This directive can be used at the start of a new movement to cancel the effect
of &%notimebase%& in the previous movement.
.subsection "Timefont" SUBSECTtimefont
.index "&%timefont%&"
.index "fonts" "for time signatures"
.index "time signatures" "selecting font"
The &%timefont%& directive is used to specify the default font and size for the
printing of time signatures. Its syntax is:
.display
&`timefont`& <&'size'&> <&'name'&>
.endd
The size is a number, giving the size of font required. If it is omitted, a
font size of 10 points is used. The name must be one of the words `roman',
`italic', `bold', or `bolditalic', or the word `extra' followed by a number in
the range 1&--12. It cannot be omitted. When this directive is not used, an
11.8-point bold font is used for printing time signatures. The parameters set
by &%timefont%& do not affect the printing of the time signatures C and A &--
they affect only numeric time signatures, or those printed via the
&%printtime%& directive. Changing the size of the time signature font does not
affect the positioning of the characters.
The facility is intended for selecting a suitable size when a font other than
&'Times-Bold'& is used. As an example of the use of &%timefont%&, consider the
printing of an original time signature in the form of a circle,
.index "time signatures" "circle"
for a piece that has three minims to the bar. If this is the only time
signature that is to be printed, it can be specified as follows:
.code
timefont 10 bold
printtime 3/2 "\**147\" ""
time 3/2
.endd
A 10-point font is required, to match the music font with which the music
itself is printed. The word `bold' is required by the syntax of the
&%timefont%& directive, even though the bold font is not itself actually used.
Character 147 in the music font (requested by the asterisks) is a circle of the
right size.
.subsection "Timewarn"
.index "&%timewarn%&"
This directive can be used at the start of a new movement to cancel the effect
of &%notimewarn%& in the previous movement.
.subsection "Topmargin"
See section &<<SUBSECTbottommargin>>& (&'Bottommargin and topmargin'&) above.
.subsection "Transpose"
.index "&%transpose%&"
.index "transposition"
This directive applies only to the movement in which it appears. It sets a
transposition for the whole movement, and must be followed by a positive or
negative number specifying the number of semitones of transposition up or
down, respectively. If a transposition is also specified from the command line,
the two values are added together. Section &<<SECTtransposition>>& gives more
details about transposition.
.subsection "Transposedacc"
.index "&%transposedacc%&"
.index "accidentals" "in transposed staves"
.index "transposition" "control of accidentals"
By default, unless the stave has the pseudo-key N set, PMW always prints an
accidental on a transposed note if an accidental was present on the original,
thereby preserving cautionary accidentals. If &%transposedacc%& is followed by
the word `noforce', it changes this behaviour such that accidentals are printed
only when strictly necessary. The standard behaviour can be reinstated for
subsequent movements by specifying `force'. It is also possible to force either
behaviour for individual notes (&R; &<<SUBSECTtransposedaccidentals>>&).
.subsection "Transposedkey"
.index "&%transposedkey%&"
.index "transposition" "control of keys"
.index "key signatures" "after transposition"
When there is a choice of standard key signature after transposition, PMW uses
a fixed default. For example, it uses the key of G♭ rather than F♯.
There is a complete list of the relevant key signatures in section
&<<SECTtransposition>>&. This list also applies when key or chord names in
strings are being transposed. The default can be overridden by specifying:
.display
&`transposedkey`& <&'key1'&> &`use`& <&'key2'&>
.endd
This means `if transposing a key signature yields <&'key1'&>, use <&'key2'&>
instead'.
.code
transposedkey G$ use F#
.endd
This example ensures transposition into F♯ instead of G♭. A
transposition of zero is different to no transposition at all, and if it is
specified, any settings of &%transposedkey%& are consulted. This makes it easy
to print the same piece of music with or without a key signature. The
&%transposedkey%& directive has other uses when transposing music that is
notated using the 18th century convention of fewer accidentals in the key
signature than in the tonality. It makes it possible to print the transposed
music either with a modern key signature, or using the same convention.
.subsection "Trillstring"
.index "&%trillstring%&"
.index "trill" "choice of string"
When a trill is indicated for a note, the glyph &{{ˆ}}& is printed from
the music font. The &%trillstring%& directive lets you change this for
another character or characters.
.code
trillstring "\it\tr"
.endd
This example replaces &{{ˆ}}& by the letters &'tr'&, printed in italic.
The string may be preceded by a number, specifying the size of font to be used.
.subsection "Tripletfont" SUBSECTtripletfont
.index "&%tripletfont%&"
.index "fonts" "for triplets"
.index "irregular note groups" "font for number"
This directive specifies the size and style of the text font used to print the
`3' over triplets, and also similar numbers over other irregular note groups.
The syntax is:
.display
&`tripletfont`& <&'fontsize'&> <&'name'&>
.endd
The size is a number giving the font size (with an optional stretching factor
and shearing angle). If it is omitted, a size of 10 points is used. The name
must be one of the standard font name words such as `bolditalic' (&R;
&<<SECTtextfonts>>&). It cannot be omitted. When this directive is not used, a
10-point roman font is used for printing triplet numbers.
.subsection "Tripletlinewidth" SUBSECTtripletlinewidth
.index "&%tripletlinewidth%&"
.index "line width for triplets"
This directive sets the width of lines used for the horizontal brackets of
irregular note groups. The default width is 0.3 points.
.subsection "Underlaydepth"
.index "&%underlaydepth%&"
.index "underlay" "line depth"
If two or more character strings, all designated as underlay, are attached to
the same note, they are automatically printed one below the other. The distance
between the baselines of the strings can be set by this directive. The default
depth is 11 points. A negative argument can be given to this directive for
special effects, such as printing alternative words above a stave. However,
this is probably easier to achieve using the overlay facilities. The depth
parameters for underlaid and overlaid text are separate and independent.
.subsection "Underlayextenders"
.index "&%underlayextenders%&"
This directive restores the printing of extender lines at the ends of underlay
words whose last syllable extends over more than one note if it was suppressed
by &%nounderlayextenders%& in an earlier movement.
.subsection "Underlaysize"
.index "&%underlaysize%&"
.index "underlay" "size"
By default, text that is specified as being vocal underlay is printed using a
10-point font. This directive enables a different size to be chosen for
underlaid text.
.code
underlaysize 9.5
.endd
Individual items of underlay text can be printed at different sizes by using
the &`/s`& text qualifier. The size parameters for underlaid and overlaid text
are separate and independent.
.subsection "Underlaystyle" SUBSECTunderlaystyle
.index "&%underlaystyle%&"
.index "underlay" "multiple notes per syllable"
.index "underlay" "alignment"
.index "alignment of underlay"
By default, PMW centres underlay and overlay syllables under or over each note,
respectively. There is a tradition, `now frequently ignored' (Kurt Stone,
&'Music Notation in the Twentieth Century'&), that calls for multinote
syllables to be aligned flush left with the initial note. The &%underlaystyle%&
directive is used to request PMW to align underlay and overlay in this
traditional manner. Its argument is a number: style 0 is the default, and style
1 sets multinote syllables flush left. When operating in style 1, individual
multinote syllables can be centred by making use of the ^ character (&R;
&<<SUBSECTunderlayspacing>>&), which is still recognized in this style. In
effect, style 1 causes the automatic insertion of a ^ character at the start of
any multinote syllable that does not already contain one.
.subsection "Unfinished" SUBSECTunfinished
.index "&%unfinished%&"
.index "solid bar line"
.index "bar lines" "at end of piece"
This directive, which has no arguments, applies only to the movement in which
it appears. It indicates that the music data supplied is not a complete
movement. This has the effect of suppressing the solid bar line at the end. It
is not necessary to specify &%unfinished%& if the movement ends with a double
bar line.
.subsection "Vertaccsize"
.index "&%vertaccsize%&"
.index "accidentals" "size when printed above"
.index "size" "of accidentals above notes"
The size of accidentals that are printed above or below notes (&R;
&<<SUBSECTaccabovebelow>>&) is controlled by this heading directive; the
default size is 10 points, which causes them to be the same size as normal
accidentals.
.code
vertaccsize 9
.endd
This example causes them to be printed slightly smaller than the default.
.index-to I04
.index-to I05
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.tocsubsecton
.chapter "Stave data" CHAPstavedata
.index-from I06 "stave data"
This is the first of two chapters in which we describe the format of the
data for a single stave, which consists of a sequence of notes and rests,
interspersed with other items such as bar lines, key and time signatures,
clefs, text strings, etc. The items that are not notes or rests are as follows:
.ilist
A few common items that can conveniently be represented in the computer's
character set are represented by one or more special characters. An example is
the use of the vertical bar to indicate a bar line. These items are described
in the next few sections.
.next
Textual items, such as &*&'f'&*&, &'a tempo'&, etc., are coded as strings
enclosed in double-quote characters, and are described in section
&<<SECTtextitems>>&.
.next
.index "stave directives"
Other non-note items take the form of &'stave directives'&, enclosed in square
brackets. There are several different formats for stave directives. They are
described in alphabetical order in section &<<SECTstavedirectives>>&.
.endlist
Notes, rests and other items may be interspersed freely, as required.
.index "space character"
Space characters and line breaks can be used to separate items, in order to
make the input easier to read, though they are not necessary. PMW makes no
attempt to check on the musical sense of what it is asked to print, other than
to check bar lengths.
.index "bar lengths"
When there is more than one stave, the length of the notes in each bar must be
the same for all staves. Also, the length of the notes in a bar must agree with
the time signature, unless &%nocheck%& or &%[nocheck]%& has been used (&R;
&<<SECTbarlennum>>&).
.section "Bar lines"
.index "bar lines" "single and double"
.index "double bar lines" "specifying"
Bar lines in the music are indicated by means of the vertical bar character. A
single vertical bar gives a single bar line; two successive vertical bars
without any intervening space characters gives a double bar line.
.index "bar lines" "end-style in mid-piece"
Unless the &%unfinished%& directive (&R; &<<SUBSECTunfinished>>&) is used, the
end of a piece or movement is marked in the traditional manner with a thin bar
line followed by a thick bar line. Occasionally it may be useful to print such
a bar line in the middle of a piece. This is notated by three vertical bars in
succession.
.index "bar lines" "empty bar"
.index "empty bar"
To encode a totally empty bar it is necessary to include at least one space
between two vertical bar characters.
.index "bar lines" "styles"
Barlines may be printed in six different styles (&R;
&<<SUBSECTbarlinestyle>>&). The default style can be set by &%barlinestyle%&
(for the whole piece) or &%[barlinestyle]%& (for an individual stave). In
addition, the style of any individual bar line may be specified by following
the vertical bar character with a digit in the range 0&--5. Note that the
&%breakbarlines%& directive can be used to specify breaks in bar lines at
particular staves. This overall setting can be overridden for individual bars
by using the &%[breakbarline]%& or &%[unbreakbarline]%& stave directives.
The amount of horizontal space that is inserted after a bar line is controlled
by the &%barlinespace%& directive. Normally, the end of a bar marks the end of
a set of beamed notes. It is, however, possible to carry a beam over the bar
line and into the next bar. This is done by following the vertical bar
character by an equals sign in the input (&R; &<<SUBSECTbeamoverbar>>&).
.subsection "Invisible bar lines" SUBSECTinvisbar
.index "bar lines" "dummy"
.index "bar lines" "invisible"
.index "invisible items" "bar lines"
Occasionally it may be necessary to put in a dummy bar line in order to allow
PMW to start a new system in the middle of a bar &-- something it does not
normally do. If a vertical bar character in the input is immediately followed
by a question mark, it behaves exactly as a normal bar line, except that
nothing is printed. The &%barlinespace%& directive, which controls the amount
of space that is inserted after a bar line, also applies to invisible bar
lines. Usually, the bars on either side of an invisible bar line are
of abnormal length, so you need to turn off the bar length check for
each of them (using &%[nocheck]%&), and if bar numbers are being printed, the
&%[nocount]%& stave directive should be used to stop one of them from being
counted.
.subsection "Mid-bar dotted bar lines"
.index "bar lines" "dotted"
.index "dotted bar lines"
The character &`:`& (colon) may appear on its own in the middle of a bar. It
causes a dotted bar line to be printed at that point. The bar line is subject
to the normal controls for whether it extends down to the next stave or not. A
colon does not end the bar.
.section "Repeated bars or part bars" SECTrepeatbars
.index "repeated bars"
.index "repeat bar sign"
.index "bars" "repeated"
.index "repetition" "single bars"
A bar containing the conventional `repeat previous bar' sign
&{}&&~&~ can be coded using a special form of whole bar rest
(&R;&<<SUBSECTrests>>&).
If you want to duplicate a sequence of bars, or a fragment of a bar, you can
arrange this via the string repetition feature (&R;
&<<SUBSECTstringrepetition>>&), which replicates an arbitrary sequence of input
characters at preprocessing time.
For repeating a single, complete bar there is
a simpler shortcut mechanism. The appearance of a number enclosed in square
brackets causes those items to the right of it in the current bar, including
the bar line, to be repeated that number of times. This facility is most
commonly used for
.index "rests" "repeated bars"
.index "repeated rest bars"
.index "many bars rest"
sequences of rest bars, but it can be used with any bar.
.code
[45] R! | [key C] [10] R! |
.endd
In the second example, the key signature is printed in the first bar only. If
it had followed &`[10]`& it would have been printed in all ten bars. There is
danger of confusion between repeated bars and rehearsal marks. Accidental
omission of the quotes from a numerical rehearsal mark such as &`["42"]`& can
lead to some very strange effects. There is more discussion of repeated rest
bars in the section entitled &'Repeated rest bars'& (&R; &<<SUBSECTreprest>>&).
&*Warning:*& This mechanism should not be used with multi-syllable underlay
texts, because the syllables are apportioned to notes as they are read from the
input, and bars that are repeated in this way are not re-read. The string
repetition facility, however, can be used in this situation.
.section "Repeated sections"
.index "repeat marks"
The beginnings and ends of repeated sections of music are marked by the
following character sequences:
.itable none 0 0 2 16 left 200 left
.row &`(:`& "for the start of a repeated section"
.row &`:)`& "for the end of a repeated section"
.endtable
These need not be at the beginning or end of a bar, though if they are, the
repetition sign is amalgamated with the bar line in the conventional manner.
Several different printing styles of repeat mark are provided (&R;
&<<SUBSECTrepeatstyle>>&). First and second time bars are catered for (&R;
&<<SUBSECTfirstsecond>>&). PMW does not normally end lines of music other than
at the ends of bars. If a repeat occurs in the middle of a bar and you want to
allow that bar to be split over a line break, you have to use an `invisible bar
line' (&R; &<<SUBSECTinvisbar>>&). PMW makes no check that the repetition signs
make musical sense. When a bar starts with a new time signature and a repeat
mark, the order in which these are printed depends on the order in which they
appear in the input.
.code
[time 4/4] (:
.endd
This example causes the time signature to be printed first, followed by the
repeat mark.
.code
(: [time 4/4]
.endd
This example causes the repeat mark to be amalgamated with the previous bar
line, with the time signature following. If, at the same point in the music,
these items appear in different orders on different staves, the repeat sign is
printed first on all staves.
.section "Caesuras"
.index "caesuras"
.index "pause" "caesura"
A caesura (pause) in the music is shown in the input in very much the way it is
printed, by two successive slashes.
.code
c'B // r-c'- |
.endd
A caesura is normally printed as two sloping strokes through the top of the
stave, but the &%caesurastyle%& directive can be used to obtain a single-stroke
version.
.section "Hairpins" SECThairpins
.index "hairpins"
.index "crescendo mark"
.index "diminuendo mark"
The characters &`>`& and &`<`& are used within a stave to encode hairpins
(crescendo and diminuendo marks, sometimes called `wedges'). They are always
used in pairs, and they enclose the set of notes above or below which the
hairpin is to be drawn.
.code
a b > c d e >
.endd
This example specifies a diminuendo hairpin that extends under the three notes
C, D, and E. Unterminated hairpins are automatically terminated at the start of
a hairpin of the opposite kind. If the end of a hairpin is given at the start
of a bar, before the first note, the hairpin is terminated just past the bar
line, unless it is the first bar of a line, when it is extended far enough to
be of reasonable size. (See also the &`/bar`& option below.)
A minimum length of 10 points is imposed on hairpins. If a hairpin would be
shorter than 10 points, it is extended on the right until it is 10 points long.
As well as the case of a hairpin terminating at the start of a system, this can
also happen if a hairpin is specified with only a single note between the angle
brackets. Hairpins can extend over bar boundaries; if a hairpin extends over
the end of a system, it is terminated, and a fresh one started on the next
system. The end of the first part of a diminuendo or the start of the
continuation of a crescendo is drawn with a small gap to indicate the
continuation.
.subsection "Horizontal hairpin positioning"
By default, a hairpin starts at the left-hand edge of the first enclosed note,
and ends at the right-hand edge of the last enclosed note, but there are
options to change this. The start or the end of a hairpin can be set to be
halfway between the relevant note and the one that follows it, or the end of
the bar, by means of the &`/h`& option.
.code
>/h GAB >/h B
.endd
This example starts the hairpin halfway between G and A, and ends it halfway
between the two Bs. Without &`/h`&, it would have started just before the G and
ended just after the first B. The &`/h`& option always moves the start or end
to the right, never to the left. The halfway distance is just a default; the
option can be used more generally by following it with a number indicating the
fraction of the distance that is required.
.code
< GGG </h0.8 |
.endd
This example ends the hairpin 0.8 of the way between the last note and the bar
line. Another option that adjusts the horizontal position of hairpins is
&`/bar`&. If the character indicating the start of a hairpin is followed by
&`/bar`&, the hairpin starts at the horizontal position of the previous bar
line, except at the start of a system, where it starts after the clef and key
signature. If the character indicating the end of a hairpin is followed by
&`/bar`&, the hairpin ends at the next bar line. The use of &`/bar`& overrides
&`/h`&.
Another way of specifying horizontal position is to use &`/lc`& or &`/rc`&
followed by a number that may have a fractional part. This specifies a left or
right movement by a number of crotchets, thereby positioning the hairpin with
respect to the musical offset in the bar. This is similar to the `offset'
positioning that is used in MusicXML; the feature was added to PMW in order to
simplify translating MusicXML into PMW input. An offset value is used only if
neither &`/h`& nor &`/bar`& is present.
.subsection "Horizontal hairpin adjustments"
The hairpin characters can be followed by &`/l`& or &`/r`&, followed by a
number, to move left or right from where the hairpin would otherwise appear.
These qualifiers affect only the end of the hairpin at which they are
specified.
.code
</l5 a b c d </r5
.endd
This example stretches the hairpin horizontally by 5 points at each end. If
&`/l`& or &`/r`& are given as well as &`/h`&, &`/bar`&, &`/lc`&, or &`/rc`&,
the effect is cumulative.
.subsection "Vertical hairpin positioning"
Hairpins are printed under the stave by default, but the &%[hairpins]%&
directive (&R; &<<SUBSECThairpinsstave>>&) can be used to make them print
above instead. When a hairpin's vertical position is not explicitly specified,
it is determined by the notes under or above which it lies. However, the
&%[hairpins]%& directive can also specify a fixed distance above or below the
stave, or a general vertical adjustment for all hairpins.
Individual hairpins can be forced to be above the stave, below the stave, or in
the middle between the current stave and the one below, by means of the options
&`/a`&, &`/b`&, and &`/m`&. Do not confuse &`/m`& with &`/h`&. One way of
remembering the difference is to associate &`/h`& with `horizontal' rather than
`halfway'. A fixed level above or below the stave can be specified by following
&`/a`& or &`/b`& by a dimension.
.code
>/a10 bc'eb > | </b12 gfag < |
.endd
This example prints the hairpins with their `sharp end' 10 points above the top
of the stave and twelve points below the bottom of the stave, respectively.
.subsection "Vertical hairpin adjustments"
The hairpin characters can be followed by &`/u`& or &`/d`&, followed by a
number, to move up or down from where the hairpin would otherwise appear. If
&`/u`& or &`/d`& is given at the start of a hairpin, it causes the whole
hairpin to be moved up or down.
.code
a b </d4 c d <
.endd
This example prints a hairpin that is 4 points lower than the default position.
If &`/u`& or &`/d`& are used at the end of a hairpin, they cause the end to be
moved up or down relative to the start.
.code
< abc </u10
.endd
This example specifies a crescendo hairpin that slopes upwards to the right.
Adding &`/u`& or &`/d`& to the left-hand end would move the whole hairpin up or
down, without affecting the angle of slope.
.subsection "Split hairpins"
If a hairpin is split over a line break, specifying &`/u`& or &`/d`& at its
start moves both halves of the hairpin up or down, but specifying one of them
on the final angle bracket moves just the final end point, as for non-split
hairpins. The vertical positions of the intermediate ends of split hairpins can
be controlled by the options &`/slu`&, &`/sld`&, &`/sru`&, and &`/srd`&. They
must be given on the starting angle bracket of a hairpin. The rather confusing
abbreviations `sl' and `sr' stand for `split left' and `split right'. They
refer to the two ends of the split as they would be on one long system before
it is split up. Thus, `sl' refers to the right-hand end of the first part of
a split hairpin, whereas `sr' refers to the left-hand end of the second part.
To move the second part of a hairpin down by 10 points, you would use
&`/srd10`& on the starting angle bracket, and &`/d10`& on the final bracket.
.subsection "Hairpin size and line thickness" SUBSECThairpinwidth
The width of the open end of an individual hairpin can be set by following the
initial &`<`& or &`>`& character with &`/w`& and a dimension.
.code
</w4 ga <
.endd
This example sets a width of 4 points. The default is 7 points, but this can be
changed by the &%hairpinwidth%& heading directive (for the whole piece) or by
the &%[hairpinwidth]%& directive (for the current stave). There is also a
&%hairpinlinewidth%& directive, which is used to change the thickness of the
lines used for drawing hairpins. The default thickness is 0.2 points.
.section "Notes and rests"
.index "notes" "specifying"
.index "rests"
The information for a note consists of five parts, of which only the first two
are mandatory. The parts are, in order: pitch, length, expression and/or
options, tie or slur information, and beam break information. A rest has only a
length and an options part. Notes and rests do not have to be separated by
spaces, though spaces can be inserted to improve the readability. A sequence
such as &`abcd`& is perfectly valid input for four notes. Spaces may not,
however, appear within the encoding for a single note, except in the options
part as specified below.
.subsection "Note pitch"
.index "notes" "pitch"
.index "pitch of note"
.index "note letters"
The pitch of a note is indicated by one of the usual note-letters, A to G. As
is conventional in music, by default the letters represent the notes C to B in
the octave below middle C. The case of the letter (upper case or lower case,
that is, capital or small letter) does &'not'&, however, form part of the pitch
information (contrary to musical convention). Instead it is used to indicate
the note length, as described below (&R; &<<SUBSECTlengthnotesrests>>&).
The default octave for notes can be changed by means of the &%[octave]%& stave
directive (&R; &<<SUBSECToctave>>&) or when a clef is specified (&R;
&<<SECTclef>>&). Each octave setting replaces the previous one; they are not
cumulative. The setting can a positive or a negative number:
.display
&`[octave -1] `& C is the note two octaves below middle C
&`[octave 0] `& C is the note one octave below middle C
&`[octave 1] `& C is middle C
.endd
In addition, a note's pitch is raised one octave by following the letter by a
single quote character (apostrophe); two octaves require two quotes, and so on.
Similarly, a note's pitch is lowered one octave by following the letter by a
grave accent character.
.index "accidentals" "specifying"
Accidentals are indicated by special characters before the note letter. The
sharp character is the obvious one to use for indicating a sharp sign, but
there are no obvious candidates for flats or naturals. Therefore two keys that
are adjacent on most keyboards, and next to the sharp sign on some, are used:
the dollar sign for flat and the percent sign for natural. Double sharps and
double flats are indicated by two sharp signs or two dollars. Here are some
examples of notes of different pitches, when the octave is set at 0 (the
default):
.itable none 0 0 2 40 left 300 left
.row &`c'`& "middle C"
.row &`C''`& "the C above middle C"
.row &`#g`& "G sharp below middle C"
.row &`$b'`& "B flat above middle C"
.row &`%c`& "C natural below middle C"
.row &`##g``& "G double sharp, below the C below middle C"
.endtable
.subsection "Half accidentals" SUBSECThalfaccs
.index "accidentals" "half sharps and flats"
.index "sharp, half"
.index "half sharp"
.index "flat, half"
.index "half flat"
.index "MIDI" "half intervals"
PMW has some basic support for half sharps and half flats. Two different
symbols for each are provided in the PMW-Music font; which to use are selected
by the &%halfsharpstyle%& and &%halfflatstyle%& directives. A half sharp is
notated as &`#-`& and a half flat as &`$-`&.
.music "music46" 32 0,-16
Using a half sharp or half flat just changes what is printed. MIDI does not
support half intervals; if a MIDI file is generated, these accidentals are
treated as full sharps or flats. A piece containing half accidentals can be
transposed, but the result may be a bit odd. Custom key signatures containing
half accidentals are supported via the &%makekey%& directive (&R;
&<<SUBSECTmakekey>>&).
.subsection "Bracketted and parenthesized accidentals" SUBSECTbrackacc
.index "accidentals" "bracketed"
.index "accidentals" "parenthesized"
.index "parenthesized accidentals"
.index "bracketed accidentals"
Cautionary accidentals are sometimes printed in round brackets (parentheses)
or square brackets. This is requested by following the accidental with a
closing bracket of the appropriate type, as in this example:
.code
#)a $]b ##)c
.endd
.subsection "Invisible accidentals"
.index "invisible items" "accidentals"
.index "accidentals" "invisible"
When two or more parts are being overprinted on the same stave, certain
accidentals on one part are often omitted, because an accidental in another
part serves, in the printed music, for both. However, if a MIDI file is being
generated, the music does not sound correct when played. Invisible accidentals
are provided to change the note that is played, without causing anything to be
printed. Following an accidental character with a question mark (for example,
&`#?g`&) causes it to become invisible. As for normal accidentals, the effect
of invisible accidentals lasts until the end of the bar. Invisible accidentals
may not be specified as parenthesized.
.subsection "Moved accidentals" SUBSECTmovedacc
.index "accidentals" "moved"
.index "moved accidentals"
Occasionally it is necessary to move an accidental sign to the left of where it
would normally print. If the character &`<`& follows the accidental, it is
printed 5 points to the left of its normal position, scaled to the stave size.
Two successive &`<`& characters move 10 points left, and so on. Alternatively,
a number may follow the &`<`& character to specify exactly how far left to move
the accidental.
.itable none 0 0 2 60 left 200 left
.row &`#<A`& "the sharp is moved left by 5 points"
.row &`{body}lt;<b`& "the flat is moved left by 10 points"
.row &`%<4.25C`& "the natural is moved left by 4.25 points"
.endtable
.subsection "Accidentals above and below notes" SUBSECTaccabovebelow
.index "accidentals" "above or below notes"
.index "notes" "accidentals above or below"
Some editors like to print editorial accidentals above or below notes. Text
strings can be used for this, but they do not transpose, and the music is not
played correctly if a MIDI file is generated. Instead, the letters &`o`& and
&`u`& should be used to request that an accidental be printed over or under the
note (the letters &`a`& and &`b`& cannot be used because they are note names).
.code
#oa $ub
.endd
This example prints a sharp above the note A, and a flat under the note B.
These accidentals affect the playing pitch of the note for MIDI output, but do
&'not'& affect subsequent notes in the bar. They change with transposition,
just as ordinary accidentals do. The size of these accidentals is controlled by
the heading directive &%vertaccsize%&; the default size is 10 points, which
causes them to be the same size as normal accidentals. It is possible to move
them up or down by following &`o`& or &`u`& with &`/u`& or &`/d`& and a number.
(In fact, &`/l`& and &`/r`& are also available, though unlikely to be useful.)
.code
#o/u4c' %u/d2f
.endd
If bracketed accidentals (&R; &<<SUBSECTbrackacc>>&) are required above or
below notes, the bracket must follow &`o`& or &`u`& and any up/down movement
specification.
.subsection "Transposed accidentals" SUBSECTtransposedaccidentals
.index "transposition" "accidentals"
.index "accidentals" "transposed"
Normally, unless the stave is using the pseudo-key N, PMW prints an accidental
sign for a transposed note if there is an accidental in the input, thus
preserving cautionary accidentals. Occasionally this is not required.
Suppression of an unnecessary accidental can be requested by following the
accidental with &`^-`&. If an accidental is actually necessary in the
transposed music, it is not suppressed. Suppression of unnecessary transposed
accidentals can be enabled for all notes by means of the &%transposedacc%&
directive. When this is done, individual accidentals can be put back by
following the accidental with &`^+`&. If a bracketed accidental is required,
the bracket must follow the transposition option, which in turn must follow any
request to print the accidental above or below the note.
PMW can be forced to print the accidental for a transposed note in a particular
way (for example, with a double sharp instead of a natural). This facility is
provided for cases when the normal transposition rules are inappropriate, and
it is done by following the accidental for the note (if any) with one of the
following character sequences:
.itable none 0 0 2 30 left 300 left
.row &`^#`& "print with a sharp (`black' notes and C and F natural)"
.row &`^
gemini - kennedy.gemi.dev
& "print with a flat (`black' notes and B and E natural)"
.row &`^##`& "print with a double sharp (`white' notes except C and F)"
.row &`^$`& "print with a double flat (`white' notes except B and E)"
.row &`^%`& "print with a natural (all `white' notes)"
.endtable
For example, if a note that is specified as &`#^##G`& is transposed up by
one semitone, and would normally be printed as A-natural, it will now be
printed as G-double-sharp. In the absence of any special indication, a
subsequent note of the same pitch in the same bar will automatically print in
the same way.
.subsection "Rests" SUBSECTrests
.index "rests"
.index "rests" "invisible"
.index "rests" "whole bar"
.index "rhythm slash marks"
.index "slash rhythm mark"
.index "beat indicator sign"
.index "repeated bars"
.index "whole bar rests"
.index "invisible items" "rests"
.index "note letters"
.index "rests" "letters"
There are four `note letters' that are used instead of pitch letters to specify
rests of various kinds. For ease of remembering, they are adjacent in the
alphabet. The letter R is used to indicate a normal rest. It may not be
preceded by accidentals or followed by quote characters or grave accents. The
letter Q specifies a rest in the same way as R, but it causes nothing at all to
be printed. It is an `invisible rest' that is useful for special effects when
overprinting staves or using coupled staves.
The letter S behaves like R except when it is used to specify a complete bar's
rest. Such bars are normally candidates for amalgamation with surrounding rest
bars, leading to the printing of `long rest' bars where possible (&R;
&<<SUBSECTreprest>>&). When a rest bar is specified using S instead of R, it is
always printed as an individual bar and never amalgamated. You can think of S
as standing for `single' or `separate'.
The letter T behaves like R except when it is used for a crotchet rest or a
whole bar's rest. In these cases it is a pseudo rest that is used as a way of
coding two features that are often found in commercial or pop music charts.
When T specifies a crotchet, instead of a rest sign, a thick slash
&{}&&~ is printed. This mark is used to indicate a beat without
specifying a pitch (often because the part specifies chords by means of chord
symbols).
When T is followed by an exclamation mark to indicate a whole bar rest, the bar
is never amalgamated with adjacent bars, and instead of a rest sign, the
conventional `repeat previous bar' sign &{}&&~&~ is printed.
However, no sound is generated for MIDI output.
.subsection "Length of notes and rests" SUBSECTlengthnotesrests
.index "length" "of notes"
.index "length" "of rests"
.index "notes" "length"
.index "rests" "length"
The primary length of a note or rest (visible or invisible) is indicated by the
case of its letter. An upper case (capital) letter is used for a minim, and a
lower case (small) letter for a crotchet.
.index "breve" "specifying"
Notes or rests longer than a minim are constructed by the addition of plus
signs, each of which doubles the length. One plus makes a semibreve, two make a
breve.
.index "flags"
.index "notes" "flags"
Notes or rests shorter than a crotchet have `flags'. A minus sign is a single
flag for a quaver, an equals sign is two flags for a semiquaver, an equals
followed by a minus sign is three flags for a demi-semiquaver, and two equals
signs are four flags for a hemi-demi-semiquaver. If the note letter is followed
by quotes or grave accents as part of its pitch, the flags follow these.
.index "&%[doublenotes]%&"
.index "&%doublenotes%&"
.index "doubling note lengths"
.index "notes" "doubling length"
.index "&%[halvenotes]%&"
.index "&%halvenotes%&"
.index "halving note lengths"
.index "notes" "halving length"
Some music contains long runs of quavers or semiquavers, which requires typing
minus or equals signs after every note letter by default. This can be avoided
by making use of the &%[halvenotes]%& stave directive (&R;
&<<SUBSECTstavehalvenotes>>&). Notes that follow this directive have their
length halved, so upper case letters are now crotchets and lower case letters
are quavers. The effect is cumulative, so using &%[halvenotes]%& twice turns
lower case letters into semiquavers. The effect can be reversed with
&%[doublenotes]%& (&R; &<<SUBSECTstavedoublenotes>>&). For example, these three
bars contain exactly the same notes:
.code
a-b-c-d-; a-b-c-d- |
[halvenotes] abcd; abcd |
[doublenotes] a-b-c-d-; a-b-c-d- |
.endd
There are also &%halvenotes%& and &%doublenotes%& heading directives (&R;
&<<SUBSECThalvenotes>>&, &<<SUBSECTdoublenotes>>&), which cause every stave to
begin with halved or doubled notes, but these directives also affect time
signatures and are more useful for adjusting the overall format of a piece than
for minimizing typing.
.index "dotted notes"
.index "notes" "dotted"
One or two dots may follow a note or rest as in conventional music, to extend
its length by half and three-quarters, respectively. There is also support for
.index "Ghent, Emmanuel"
Emmanuel Ghent's notation for extending the length of a note by one
.index "plus after notes"
.index "notes" "followed by plus"
quarter (as reported in Gardner Read's book &'Music Notation'&). The PMW
encoding for this is to follow the note with a dot and then a plus sign. The
length of the note is extended by one quarter, and it is printed as the normal
note followed by a plus sign. This facility is particularly useful when there
are five beats in a bar.
.code
[time 5/4] A+.+
.endd
This example prints a semibreve followed by a plus, indicating a note whose
length is equal to five crotchets. Here are some examples of notes and rests of
different lengths without any halving or doubling:
.itable none 0 0 2 60 left 200 left
.row &`A++`& "breve"
.row &`#B`+`& "semibreve"
.row &`G+.+`& "semibreve followed by plus"
.row &`F.`& "dotted minim"
.row &`R`& "minim rest"
.row &`e..`& "double dotted crotchet"
.row &`$g`& "crotchet"
.row &`r-.`& "dotted quaver"
.row &`c'-`& "quaver"
.row &`d=`& "semiquaver"
.row &`e''=-`& "demi-semiquaver"
.row &`%b`==`& "hemi-demi-semiquaver"
.endtable
.subsection "Chords"
.index "chords" "specifying"
PMW can deal with certain kinds of chord, notated by enclosing a number of
notes in parentheses. The notes must either all be of the same musical length,
or all but the first must consist of just a lower case letter, in which case
the length is taken from the first note.
.code
(gb) (c'-#g'-) (A++A'++) (g=-bd'g')
.endd
The notes do not have to be in any particular pitch order. If there are to be
accents on the chord (staccato, etc.), these must be specified on the first
note.
.index "beaming" "chords"
.index "chords" "beaming"
.index "semicolon" "beam breaking (chords)"
.index "; (semicolon)" "beam breaking (chords)"
.index "comma" "beam breaking (chords)"
.index ", (comma)" "beam breaking (chords)"
Chords consisting of quavers or shorter notes are beamed in the usual way (&R;
&<<SECTbeaming>>&); a semicolon after the closing parenthesis breaks all the
beaming, whereas a comma breaks secondary beams only.
.index "chords" "ties"
.index "ties" "chords"
If the chord is tied (&R; &<<SUBSECTshortslur>>&), the underline character that
indicates a tie must appear after the closing parenthesis and before any beam
break character. Note that an underline character cannot be used for a short
slur when chords are involved (as it can for single notes), because if two
chords are joined by an underscore, all the notes in each that are of the same
pitch are joined by a tie mark. The &%[slur]%& directive must be used to obtain
just a single slur mark.
.index "accidentals" "moved"
.index "moved accidentals"
.index "accidentals" "on chords"
.index "chords" "accidentals"
PMW automatically positions accidentals on chords unless one or more notes in
the chord contains an explicit accidental positioning request (&R;
&<<SUBSECTmovedacc>>&). In this case, no automatic positioning is done; it is
assumed that the user has positioned all the accidentals in the chord by hand.
.subsection "Horizontal movement of augmentation dots"
.index "augmentation dots" "moving horizontally"
.index "moved augmentation dots"
.index "dotted notes" "moving dots horizontally"
It is occasionally necessary to move augmentation dots to the right, usually
when printing multiple parts on the same stave with notes close together. If an
augmentation dot is preceded by the character &`>`& it is moved right by 5
points (scaled to the stave size). A different distance can be specified by
preceding the &`>`& with a dimension.
.code
a>. g6.2>..
.endd
In this example, the dot after the A is moved 5 points to the right and the
double-dot after the g is moved 6.2 points. In a chord, the &`>`& character
must be used on the first note, and not on any others. It affects all the dots
in the chord, because they are always vertically aligned.
.subsection "Vertical position of augmentation dots" SUBSECTdotvert
.index "augmentation dots" "vertical position"
.index "dotted notes" "vertical position of dots"
.index "notes" "movement of dots"
The vertical position of dots for notes on lines can be controlled by the
&%[dots]%& directive and the &`\:\`& note option (&R; &<<SUBSECTnoteexpr>>&).
This option affects only notes that lie on stave lines. Normally dots for such
notes are printed in the stave space above, but if the colon option is present,
they are printed instead in the space below. The default position can be
changed by means of the &%[dots]%& stave directive; when the default is below,
the colon item causes the dot for a particular note to be printed above.
.code
[treble] e.\:\ @ dot below
[dots below] g..\:\ @ dot above
.endd
The colon option can be used for individual notes within a chord. However, PMW
overrides the dot position setting when an interval of a second occurs in a
chord. In this case, the lower note, if it is on a line, always has its dot
below, and the upper note, if it is on a line, always has its dot above.
The &`\:\`& option does not affect notes in spaces, but it is sometimes
useful to be able to move their augmentation dots into the space above. The
option &`\::\`& achieves this; it has no effect if used on a note that lies on
a line. For example, the chord &`(e.g.a.)`& in the treble clef prints by
default with only two dots. If three dots are required, there are two ways in
which this can be achieved:
.code
(e.\:\g.a.) (e.g.a.\::\)
.endd
The first moves the dot on the lowest note down, and the second moves the dot
on the highest note up. When there is an interval of a second in a chord and
the higher note has its dot moved up by this means, the lower note's dot is no
longer automatically moved down.
.subsection "Notehead shapes and sizes" SUBSECTnoteheads
.index "noteheads" "size of"
The shape of noteheads is controlled by the &%[noteheads]%& directive (&R;
&<<SUBSECTnoteheadstave>>&). Smaller than normal noteheads are used for grace
notes, and for notes that appear between &%[cue]%& and &%[endcue]%&. In these
cases, the entire note (head and stem) is printed at a smaller size. You can
also request a small (cue-sized) notehead, without affecting any other part of
the note, by means of the &`\sm\`& note option (&R; &<<SUBSECTnoteexpr>>&).
.index "optional notes"
This can be useful for indicating optional notes by means of a small notehead
within a chord. This option affects only the notehead; the size of the stem,
the position of any dots, and all other aspects of the note are not changed.
Another way of indicating optional notes is to enclose the notehead in round
brackets (parentheses). This can be requested for individual notes by means of
the &`\)\`& note option (&R; &<<SUBSECTnoteexpr>>&). However, this does not
work for noteheads in a chord that are on the `wrong' side of the stem.
.subsection "Whole bar rests"
.index "rests" "whole bar"
.index "whole bar rests"
There is one other special character that may follow the rest letters R, Q, or
S. This is the exclamation mark, and it is used to indicate that the rest fills
an entire bar. Without this, it is not possible to specify a complete bar's
rest as one item in all time signatures. The difference between &`R!`& and
&`Q!`& is that the former causes the printing of a conventional whole bar rest
sign, whereas the latter causes nothing at all to be printed in the bar. This
is useful when staves are being overprinted. &`S!`& behaves like &`R!`& except
that the bar in which it appears is never eligible for amalgamation into a
single multiple rest bar with the bars on either side of it. A bar containing
&`S!`& is always shown on its own.
Whole bar rests specified using an exclamation mark are normally printed as
semibreve rests, centred horizontally in the bar. The form of the whole bar
rest sign can be altered for certain time signatures by means of the
&%breverests%& heading directive or by using the masquerade facility (&R;
&<<SUBSECTmasquerade>>&).
Rests that happen to fill the bar, but which are not specified with exclamation
marks, are printed as rests of the appropriate length. For example, in 3/4 time
the rest &`R.`& is printed as a dotted minim rest. If bar lengths are being
checked, such a rest is printed centred in the bar, but if they are not, it is
printed at the left-hand end.
If a bar contains only whole bars rest on some staves and single notes on
others, it sometimes looks better if the notes are also centred in the bar.
This can be done by using the &`\C\`& option for the notes (&R;
&<<SUBSECTnoteexpr>>&).
.subsection "Repeated rest bars" SUBSECTreprest
.index "rests" "repeated bars"
.index "repeated rest bars"
.index "many bars rest"
When each bar in a sequence of bars contains only a single whole-bar rest
specified using R or Q (but not S or T) they are amalgamated into a single
printed bar. If the first bar's rest used Q, nothing is printed in the bar.
Otherwise, a conventional `long rest' sign is output, with the number of bars
printed above. Of course, this happens only if all the staves in the current
printing have rest bars, typically when one or more parts are being extracted
from a score. By default, any number of repeated rest bars are shown in the
same way, using the &{{{x0w}}}& sign, which is the modern convention.
Older music sometimes used special code signs when the number of bars was
between two and eight; see the &%codemultirests%& heading directive if you want
to print music in this style (&R; &<<SUBSECTcodemultirests>>&).
.index "fermata" "with whole bar rest"
A rest bar is considered eligible for amalgamation with its neighbours if it
contains nothing but an unadorned rest item. A rest bar with a fermata on the
rest (for example) always prints as a separate bar. However, the initial bar of
an amalgamated sequence is permitted to contain items such as key and time
signatures and a beginning repeat mark, and the last bar in a sequence may end
with a terminating repeat sign or a clef. A text item is also permitted in the
first bar of an amalgamated sequence, for example, to specify a tempo. If you
do not want such a bar to be amalgamated, you must specify its rest using S
instead of R.
.code
[10]R! | "G.P." S! | [8]R! |
.endd
If &`R`& is used instead of &`S`& in this example, the last nine bars are
printed as a single multi-bar rest when this stave is the only one selected for
printing. As it stands, the G.P. bar is printed on its own, followed by an
8-bar multiple rest.
.index "tacet movements"
.index "repeated rest bars" "width of"
.index "repeated rest bars" "stretching"
When a multi-rest bar is stretched sufficiently, the long rest sign is also
stretched. This provides a way of printing a single multi-rest bar across the
whole page for a &'tacet'& movement in an instrumental part. For example:
.code
[stave 1 treble 1] [space 200][40]R! [endstave]
.endd
If left and right justification is in effect (&R; &<<SUBSECTjustify>>&), all
the &%[space]%& directive has to do is to widen the bar sufficiently for the
justification to kick in. It must be given before the repeat count, to ensure
that the remaining bars contain nothing other than the rest.
If a widened repeated rest is not at the start of a line, and there is
something at the start of the first bar, the situation is a bit more
complicated. Consider:
.code
[stave 1 treble 1] EF | GG | [key E$ space 200][30]R! [endstave]
.endd
Whether the &%[space]%& directive appears before or after the &%[key]%&
directive makes no difference, because what &%[space]%& affects is the position
of the following note or rest. A mid-line key signature is always positioned
relative to the following note/rest position. In this example, the effect of
&%[space]%& is to move both the key signature and long rest sign well to the
right. The (messy) solution is to use &%[move]%& directives to adjust their
positions:
.code
[stave 1 treble 1] EF | GG |
[space 200 move -200 key E$ move -100][30]R!
[endstave]
.endd
Notice that the second &%[move]%& specifies half the distance of the first.
.index "repeated rest bars" "squashing"
The &%[space]%& directive can be used with a small negative argument to make a
repeated rest bar a bit narrower than the default. Reducing it by up to 20
points is usually reasonable.
.subsection "Notes that fill a bar"
.index "notes" "whole bar"
.index "whole bar notes"
Sometimes there is an unorthodox requirement to specify that a note fills a
bar, independent of its conventional length. Here is an example:
.music "music55" 70 4,-16
This effect can be achieved by following a note letter with an exclamation
mark, exactly as for a whole bar rest. The second stave in the example above is
notated like this:
.code
[stave 2 bass 0]
G!_ | G! |
[endstave]
.endd
By default, a semibreve notehead is output, but this can be changed by using
the masquerade facility (&R; &<<SUBSECTmasquerade>>&).
.subsection "Note expression and options" SUBSECTnoteexpr
.index "notes" "expression"
.index "notes" "options"
.index "notes" "grace"
.index "notes" "accents"
.index "options" "for notes"
The expression/options portion of a note includes all additional marks such as
staccato, emphasis, trills, mordents and fermatas. It can also indicate that
the note is a grace note, force the stem of the note to point up or down,
indicate the lengthening or shortening of the note's stem, change the position
of accents and augmentation dots, and so on. For many notes there are no such
special marks and this part will not be present. When it is present, it
consists of two backslash characters, between which there are one or more
letters or other characters indicating the expression or option required. For
example, a dot and a minus sign signify a staccato dot or a solid line
emphasis, respectively. The possible character sequences that can occur are as
follows:
.index "expression marks"
.index "staccato"
.index "staccatissimo"
.index "grace notes"
.index "stems" "direction"
.index "accents" "on notes"
.index "tremolo"
.index "harmonics"
.index "trill"
.index "arpeggios"
.index "chords" "spread"
.index "spread chords"
.index "fermata" "specifying"
.index "mordent"
.index "turns"
.index "bowing marks"
.index "stems" "length"
.index "length" "of stems"
.index "centred notes"
.index "noteheads" "bracketed"
.itable none 0 0 2 66 left 300 left
.row &`\/\`& "single tremolo mark"
.row &`\//\`& "double tremolo mark"
.row &`\///\`& "three tremolo marks"
.row &`\~\`& "`upper' mordent sign"
.row &`\~|\`& "`lower' mordent sign"
.row &`\~~\`& "double `upper' mordent sign"
.row &`\~~|\`& "double `lower' mordent sign"
.row &`\!\`& "print accent on stem side, trill or fermata below (&R; &<<SUBSECTposaccorn>>&)"
.row &`\.\`& "staccato dot"
.row &`\..\`& "staccatissimo mark"
.row &`\:\`& "invert augmentation dot position (notes on lines, &R; &<<SUBSECTdotvert>>&)"
.row &`\::\`& "move augmentation dot up (notes in spaces, &R; &<<SUBSECTdotvert>>&)"
.row &`\-\`& "solid line emphasis mark"
.row &`\>\`& "horizontal wedge emphasis mark"
.row &`\'\`& "`start of bar' accent"
.row &`\)\`& "notehead in round brackets"
.row &`\a`&<&'n'&>&`\`& "accent number <&'n'&> (&R; &<<SUBSECTgenaccnot>>&)"
.row &`\ar\`& "arpeggio mark"
.row &`\ard\`& "arpeggio mark with downward arrow"
.row &`\aru\`& "arpeggio mark with upward arrow"
.row &`\c\`& "print on coupled stave (&R; &<<SUBSECTcoupleintro>>&)"
.row &`\C\`& "centre if only note in bar"
.row &`\d\`& "string down bow (organ heel) mark"
.row &`\f\`& "fermata (pause) above note"
.row &`\f!\`& "fermata (pause) below note"
.row &`\g\`& "grace note"
.row &`\g/\`& "grace note with slanted line"
.row &`\h\`& "do not print on coupled stave (&R; &<<SUBSECTcoupleintro>>&)"
.row &`\m\`& "masquerade note (&R; &<<SUBSECTmasquerade>>&)"
.row &`\nh\`& "use harmonic (diamond) notehead"
.row &`\nx\`& "use cross notehead"
.row &`\o\`& "small circle over note (harmonic)"
.row &`\sd\`& "force note stem down"
.row &`\su\`& "force note stem up"
.row &`\sw\`& "swap note stem direction in beam (&R; &<<SUBSECTbeamsides>>&)"
.row &`\sl`&<&'n'&>&`\`& "lengthen stem by <&'n'&> points (&R; &<<SUBSECTstemlengths>>&)"
.row &`\sl-`&<&'n'&>&`\`& "shorten stem by <&'n'&> points (&R; &<<SUBSECTstemlengths>>&)"
.row &`\sm\`& "print with small (cue sized) notehead (&R; &<<SUBSECTnoteheads>>&)"
.row &`\sp\`& "spread chord"
.row &`\t\`& "turn"
.row &`\t|\`& "inverted turn"
.row &`\tr\`& "trill"
.row &`\tr#\`& "trill, with a sharp sign above"
.row &`\tr$\`& "trill, with a flat sign above"
.row &`\tr%\`& "trill, with a natural above"
.row &`\u\`& "string up bow (organ toe) mark"
.row &`\v\`& "small, closed vertical wedge accent"
.row &`\V\`& "large, open vertical wedge accent"
.row &`\x\`& "cancel default expression (&R; &<<SECTrepexpr>>&)"
.endtable
.music "music39" 130 4,-16
More than one of these character sequences can be present between the
backslashes, and spaces can be used to separate them, for example:
.itable none 0 0 2 66 left 200 left
.row "&`#g\.-\`&" "staccato and tenuto"
.row "&`\tr sd\`&" "trill and stem down"
.endtable
However, staccato and staccatissimo cannot be used together. Notes that are
marked as grace notes can be of any length &-- they do not have to be quavers
or semiquavers. PMW beams grace notes where possible. The stems of grace notes
always point upwards, whatever the pitch, unless an explicit downward stem is
requested by specifying &`\sd\`&.
.index "grace notes, stem direction"
If there is more than one grace note in sequence, specifying a downward
stem for the first one causes all of them to have downward stems.
The sequences &`\c\`& and &`\h\`& are used to override the default note placing
when coupled staves are in use (see &%[couple]%&). The single and double colon
options are concerned with the vertical placement of augmentation dots (&R;
&<<SUBSECTdotvert>>&).
When there is a whole bar rest in some staves, and just a single note in the
remaining staves, it sometimes looks odd that the rest is centred horizontally
in the bar and the note is not, especially if the note is a semibreve. The
option &`\C\`&, if used on the first note in a bar, causes it to be centred
like a whole bar rest, provided that the note has a length equal to the current
bar length. (Do not confuse &`\C\`& with &`\c\`&.)
.subsection "General accent notation" SUBSECTgenaccnot
The item &`\a`&<&'n'&>\ is a general notation for specifying accents. The
values that <&'n'&> may take are:
.itable none 0 0 2 12 left 200 left
.row &`1`& "staccato dot&~ &{vv>~}&"
.row &`2`& "horizontal bar&~ &{vvT~}&"
.row &`3`& "horizontal wedge&~ &{vvU~}&"
.row &`4`& "small, closed vertical wedge&~ &{~vYv}&"
.row &`5`& "large, open vertical wedge&~ &{W}&"
.row &`6`& "string down bow&~ &{e}&"
.row &`7`& "string up bow&~ &{g}&"
.row &`8`& "ring (harmonic)&~ &{†}&"
.row &`9`& "`start of bar' accent&~ &{~vœv}&"
.row &`10`& "staccatissimo mark&~ &{Â}&"
.endtable
.subsection "Position of accents and ornaments" SUBSECTposaccorn
By default, accents and the harmonic ring are positioned opposite a note's
stem.
.index "accents" "position of"
That is, they are below the note if the stem is up, and above the note if the
stem is down. (A notional stem direction is computed for breves and
semibreves.) Fermatas, trill signs, and other ornaments are by default placed
above the note, independent of the stem direction.
If an accent or harmonic ring mark is followed by an exclamation mark, PMW
positions it on the same side of the notehead as the stem, which is
occasionally necessary when more than one part is being printed on the same
stave. If &`!`& is used with a fermata or trill or other ornament,
.index "fermata" "below note"
.index "trill" "position of"
.index "ornaments" "position of"
the sign is printed below instead of above the note. String bowing marks are
not affected by the use of the &`!`& option. They are printed above the stave
unless the &%[bowing]%& directive has specified othewise.
.index "accents" "within the stave"
Three accents (staccato, staccatissimo, emphasis bar) and the harmonic circle
are positioned within the stave for notes of an appropriate pitch. Also, they
are placed inside ties and short slurs (&R; &<<SUBSECTshortslur>>&) when they
are both opposite the stem. The other accents and ornaments are always placed
outside the stave and beyond ties and short slurs by default. However, the
position of all accents and ornaments can be adjusted, as described in the next
section.
.subsection "Moving accents and ornaments" SUBSECTmoveaccents
.index "accents" "position of"
.index "accents" "moving"
.index "ornaments" "position of"
.index "ornaments" "moving"
.index "moved accents"
.index "moved ornaments"
It is possible to move all accents and ornaments except tremolos up and down,
or left and right. This is done by placing &`/u`&, &`/d`&, &`/l`&, or &`/r`&,
as appropriate, followed by a number of points, after the accent or ornament
specification.
.code
a\./u4\ g\f/u10\
.endd
This example raises the staccato dot by 4 points and the fermata by 10 points.
For both accents and ornaments, the vertical movement specified is scaled by
the relative size of the stave. Moving an accent does not affect the placement
of anything else. For example, if there is text below a note with an accent
that is also below it, moving the accent does not affect the vertical position
of the text.
There is a possibility of ambiguity if a tremolo and a moved accent or ornament
are specified on the same note, as the tremolo notation is a slash. To avoid
this, the tremolo must be specified before (for example) a fermata: &`g\/f\`&
is correct, but &`g\f/\`& causes an error, because it is taken as a fermata
with an incomplete movement request.
.index "tremolo" "moving"
.index "moved tremolos"
Tremolo markings themselves can be moved up and down, but not left or right.
The notation looks confusing, but is consistent: for example, &`G\//u4\`&
specifies a single tremolo that is moved up by 4 points.
.subsection "Bracketing accents and ornaments"
.index "accents" "bracketing"
.index "ornaments" "bracketing"
.index "bracketing accents"
.index "bracketing ornaments"
Brackets are sometimes used to indicate editorial accents and ornaments. If
there is a sequence of editorially marked notes, the sequence may be
bracketed rather than each individual note. The following may be used after the
specification of any accent or the specification for a fermata, mordant, trill,
or turn, to indicate bracketing:
.itable none 0 0 2 30 left 300 left
.row &`/(`& "precede with an opening parenthesis"
.row &`/[`& "precede with an opening square bracket"
.row &`/)`& "follow with a closing parenthesis"
.row &`/]`& "follow with a closing square bracket"
.row &`/b`& "enclose in parentheses"
.row &`/B`& "enclose in square brackets"
.endtable
Here is a short example:
.code
d'\../b\ e'\../(\ e'\../)\ g\-/B\ |
.endd
.music "music53" 40 4,-14
.subsection "Repeated expression marks" SECTrepexpr
.index "notes" "repeated expression"
.index "repeated expression marks"
If a sequence of notes are all to be marked with the same accent, this can be
specified by giving the expression syntax for one note inside square brackets.
.code
[\.\] a b c d
.endd
This example causes all the notes to be marked staccato. This feature is
limited to accents and a few other expression marks. The only characters that
may appear within backslashes in this context are:
.itable none 0 0 2 60 left 300 left
.row &`.`& "staccato"
.row &`..`& "staccatissimo"
.row &`-`& "horizontal bar"
.row &`>`& "horizontal wedge accent"
.row &`v`& "small, closed vertical wedge"
.row &`V`& "large, open vertical wedge"
.row &`'`& "`start of bar' accent"
.row &`o`& "ring (harmonic)"
.row &`d`& "string down bow mark"
.row &`u`& "string up bow mark"
.row &`a`&<&'n'&> "accent number <&'n'&>"
.row &`/`& "single tremolo mark"
.row &`//`& "double tremolo mark"
.row &`///`& "triple tremolo mark"
.row &`!`& "put accents on other side of notes"
.endtable
Note that the movement and bracketing options that are available for expression
marks on individual notes cannot be used here. To cancel a setting, two
backslashes with nothing between them should be given between square brackets.
Cancellation can also be carried out for an individual note by means of the
note option letter &`x`&. In the following example, the note D is printed
without a staccato dot.
.code
[\.\] a b c d\x\ e f g [\\]
.endd
Expression/option items are processed from left to right. If there are two or
more options being defaulted, &`x`& cancels them all, but one can be put back
again afterwards.
.subsection "Stem lengths" SUBSECTstemlengths
.index "length" "of stems"
.index "stems" "length"
The note option consisting of the letters &`sl`& followed by a number is
meaningful for notes shorter than a semibreve. It specifies a lengthening or
shortening of the note's stem. The number specifies the amount by which the
stem is to be changed; positive numbers cause lengthening, negative numbers
cause shortening.
.code
a\sl3.4\ b\sl-1.2\
.endd
This example lengthens the stem of the first note by 3.4 points and shortens
the stem of the second by 1.2 points. PMW maintains a minimum stem length
beyond which shortening is ignored. The &%shortenstems%& heading directive can
be used to request PMW automatically to shorten note stems that point in the
`wrong' direction &-- if this is happening, any explicit adjustment is added to
the automatically computed value.
If a note that is part of a set of beamed notes has its stem length
changed,
.index "beaming" "stem length"
.index "stems" "length in beam"
this may cause the vertical position of the beam to change. However, it is not
always easy to see which is the note whose stem actually determines the
beam's vertical position. A better way to adjust beams is to use the
&%[beammove]%& directive.
.subsection "Masquerading notes and rests" SUBSECTmasquerade
.index "masquerading notes"
.index "notes" "masquerading"
.index "rests" "masquerading"
For special effects (for example, tremolos between notes &-- see &%[tremolo]%&)
it is sometimes desirable to print a note or rest of one kind in place of
another, for example a crotchet instead of a quaver, or a breve instead of a
semibreve. PMW supports this kind of &'masquerading'&. It is requested by the
letter &`m`& in the options part of the note, and the type of note required is
indicated by the form of the &`m`& in the same way as for normal notes. The
only effect of masquerading is to substitute a different note for printing; the
position of the note is not affected. When a masquerade is requested, an
augmentation dot can be requested with it, and if it is not, no dot is printed,
even if the original note is augmented.
.index "dotted notes" "dot before bar line"
The ability to add augmentation dots makes it easier to print renaissance music
in the style with a dot before a bar line instead of a tie to a quaver in the
next bar.
.itable none 0 0 2 60 left 300 left
.row &`G+\M++\`& "prints a breve instead of a semibreve"
.row &`g-\m\`& "prints a crotchet instead of a quaver"
.row &`g.\M\`& "prints an undotted minim instead of a dotted crotchet"
.row &`g\m.\`& "adds a dot to a crotchet without lengthening it"
.endtable
If the note is beamed, this option is restricted in its use: the only available
facility is to print a minim notehead instead of a crotchet notehead.
.code
g-\M\ b- d'-
.endd
.index "beaming" "across rests"
In this example, the first notehead is printed as a minim. Masquerade requests
for noteheads other than minims are ignored within beams. However, masqueraded
&'rests'& are not restricted within beamed groups. This makes it possible to
print (unconventionally) a crotchet rest under a beam, by using a construction
such as &`r-\m\q-`& within a beamed group. Note the use of an invisible quaver
rest to make the item's length up to a crotchet.
.subsection "Expression items on rests"
.index "rests" "expression items"
.index "expression items and rests"
Accent marks are not supported on rests, but pause marks (fermatas) are
permitted. Other ornaments such as turns are allowed on invisible rests only.
This gives a way of printing these marks on their own at positions in a bar
that are not associated with printed notes.
.subsection "Changing rest levels" SUBSECTchrele
.index "rests" "level"
.index "height of rests"
A note option consisting of the letter &`l`& followed by a number is permitted
for rests only. A negative number may be specified. This has the effect of
moving the rest vertically up (for positive numbers) or down (for negative
numbers) by the given number of points.
.code
R\l4\
.endd
This example prints a minim rest on the fourth instead of the third line. If
rests are generally to be printed at a non-standard level, the &%[rlevel]%&
directive can be used to avoid having to give this option on every rest. If
this option is used in conjunction with &%[rlevel]%&, the effect is cumulative.
.subsection "Triplets and other irregular note groups" SUBSECTplets
.index "irregular note groups"
In his book &'Music Notation'&, Gardner Read writes: ``Notating unequal groups
&-- triplets against duplets or quadruplets, quintuplets against triplets, and
so on &-- is one of the musician's most perplexing problems.'' PMW handles
simple cases straightforwardly, but also has facilities for dealing with more
general groups. One complication is in the choice of note-value to use for the
irregular group. Gardner Read says: ``The note-values of the extraordinary
group are always determined by the note-values of the ordinary group against
which they are set. […] When, however, the number of notes in the
irregular group exceeds twice the number of note-values in the regular group,
the uncommon group must employ the next smaller note-value.''
This is not as simple as it sounds. Consider the case of five equal notes in a
bar in 3/4 time. If the regular group is three crotchets, the irregular group
should use crotchets because five is less than twice three; however, if the
regular group is six quavers, the irregular group must use quavers, because an
irregular group never uses longer notes than the regular group.
.music "music49" 72 4,-14
In PMW input, brace characters (curly brackets) are used to enclose a group of
notes that is not a standard division of a longer note or group. In simple
cases, the opening brace is followed by a single number to indicate the number
of notes in the irregular group. If this number is omitted, the group is
assumed to be a triplet.
.itable none 0 0 2 120 left 200 left
.row "&`{a b c}`&" "three crotchets in the time of two"
.row "&`{2 g-a-}`&" "two quavers in the time of three"
.row "&`{5 c-d-e-f-g-}`&" "five quavers in the time of four"
.endtable
By default, PMW makes assumptions about the size of the regular group that is
being subdivided, based on the number of subdivisions. However, in order to
cope with more complicated cases, another parameter may also be set. The
general form of an irregular note group is:
.display
&`{`&&'s'&&`/`&&'n'&&` `&<&'notes...'&>&`}`&
.endd
The number of notes in the irregular group is &'n'&, and &'s'& controls the
size of the group that is being divided. If &'s'& (and its slash) are
omitted, as in the simple examples above, a default value is chosen that works
well in most common cases:
.ilist
If &'n'& is a power of two (2, 4, 8, 16), &'s'& defaults to three. Thus,
the example &`{2`& &` g-a-}`& above is equivalent to &`{3/2`& &`g-a-}`&.
.next
Otherwise, the default is two, so the example &`{5`& &`c-d-e-f-g-}`& above is
equivalent to &`{2/5`& &`c-d-e-f-g-}`&.
.endlist
A note in an irregular group can be longer or shorter than a normal note of the
same type. For example, in a duplet, notes are longer, whereas in a triplet
they are shorter. PMW modifies the lengths of irregular notes as follows:
.olist
When &'n'& is less than 2*&'s'&, the lengths of the notes in the irregular
group are multiplied by &'s'&&`/`&&'n'&. In a triplet such as &`{g-g-g-}`&,
where &'s'& and &'n'& have their default values of two and three, respectively,
each quaver is shortened to 2/3 of its normal length, so three of them take up
the time of two normal quavers.
.next
When &'n'& is 2*&'s'& or more, but less than 4*&'s'&, the lengths of the notes
in the irregular group are multiplied by (2*&'s'&)/&'n'&. Thus every
note in the group &`{2/5`& &`c-d-e-f-g-}`& is multiplied by 4/5, giving a total
of four regular quavers, that is, two crotchets.
.next
When &'n'& is 4*&'s'& or more, the lengths of the notes in the irregular group
are multiplied by (4*&'s'&)/&'n'&.
.endlist
These rules are sufficient to handle most cases. For example, the group &`{7`&
&`f-g-a-b-f-a-g-}`& is a division of two crotchets into seven quavers.
However, a division of three crotchets into seven quavers is notated on the
music stave in exactly the same manner &-- music notation is ambiguous in this
respect. It is not possible to determine what a group of quavers with a `7'
above it actually means, without looking at the time signature or the rest of
the bar, and PMW is not capable of analysing bars in this detail. This is an
example of a case where it is necessary to specify &'s'& explicitly; the code
for dividing three crotchets into seven quavers is &`{3/7`&
&`f-g-a-b-f-a-g-}`&. Because of rule (2) above, this means that each note's
length is multipled by 6/7 instead of 4/7.
Published music is not always consistent in how some larger groups are notated.
PMW can handle some of the alternative requirements. A division of three
crotchets into 11 should use quavers, because 11 is less than 12, the number of
semiquavers in three crotchets. The normal coding would be:
.code
{3/11 g-g-g-g-g-g-g-g-g-g-g-}
.endd
However, if you want to notate three crotchets divided into eleven, but using
semiquavers instead of quavers, you can use this:
.code
{12/11 g=g=g=g=g=g=g=g=g=g=g=}
.endd
The length of each semiquaver is multiplied by 12/11, so the length of the
group is 12 semiquavers, that is, three crotchets. The illustration below shows
some of the examples discussed in this section, with regular groups on a
second stave to show how the irregular groups are interpreted.
.music "music48" 132 4,-20
&*Historical Note:*& The code for handling irregular note groups was re-written
for the 4.20 PMW release because it had got too complicated to easily
understand. The new behaviour, as described above, gives the same results in
most cases, but there may be differences for some less common irregular groups.
The old code also had an extra feature, which is retained for compatibility,
but for which I cannot now dream up a useful example. If a minus sign is
present before the slash that follows &'s'&, the size of the group that is
being subdivided is halved. To divide three quavers into eleven using quavers,
you could write this:
.code
{3-/11 g-g-g-g-g-g-g-g-g-g-g-}
.endd
However, this is not standard notation; because there are more than 6 notes in
the irregular group, semiquavers should normally be used.
.subsection "Options for irregular note groups"
By default, PMW prints the number for an irregular note group (for example,
the `3' for a triplet) on the same side of the noteheads as the stems. The
&%tripletfont%& directive is used to specify the size and type of font used. If
the notes are beamed, just the number is printed; if not, a horizontal
`bracket' is printed as well.
.index "irregular note groups" "suppressing the number"
.index "irregular note groups" "moving the number"
The whole mark can be moved, forced to be above or below the stave, and the
horizontal bracket can be omitted. The mark may also be totally suppressed.
The &%[triplets]%& directive can be used to set defaults for some of these
options. For individual groups, the following qualifiers may appear after the
opening curly bracket, following any numbers that may be present:
.itable none 0 0 2 60 left 200 left
.row &`/a`& "put mark above"
.row &`/a`&<&'n'&> "put mark <&'n'&> points above"
.row &`/b`& "put mark below"
.row &`/b`&<&'n'&> "put mark <&'n'&> points below"
.row &`/n`& "omit bracket"
.row &`/x`& "suppress mark altogether"
.row " "
.row &`/lx`& "invert left-hand jog"
.row &`/rx`& "invert right-hand jog"
.row " "
.row &`/d`&<&'n'&> "move mark down <&'n'&> points"
.row &`/l`&<&'n'&> "move mark left <&'n'&> points"
.row &`/r`&<&'n'&> "move mark right <&'n'&> points"
.row &`/u`&<&'n'&> "move mark up <&'n'&> points"
.row " "
.row &`/ld`&<&'n'&> "move left end of bracket down <&'n'&> points"
.row &`/lu`&<&'n'&> "move left end of bracket up <&'n'&> points"
.row &`/rd`&<&'n'&> "move right end of bracket down <&'n'&> points"
.row &`/ru`&<&'n'&> "move right end of bracket up <&'n'&> points"
.endtable
In fact, &`/x`& suppresses the mark in the default state only. If
&%[triplets]%& was used to suppress all irregular note group marks, &`/x`&
causes the mark to be printed. In other words, it inverts the mark printing
state. When a dimension is given after &`/a`& or &`/b`&, the value given is the
position above or below the stave of the baseline of the numerical text for a
horizontal bracket. Subsequent adjustment of either end of the bracket is then
possible, as described above. If no dimension is given after &`/a`& or &`/b`&,
the vertical position is computed from the positions of the notes that form the
group. The left and right movements are available only if no horizontal bracket
is being printed; they are ignored otherwise. Here are some examples of the use
of these options:
.code
{3/5/d1 a-a-a-b-b-} {/b a-b-c-} {/a/u3 dfg} {2/d2/n a-a-}
.endd
If either of the &`/a`& or &`/b`& options is specified, it is assumed that the
mark is being moved to the other side of the noteheads, and therefore the
bracket is automatically added. The &`/n`& qualifier must be used if a bracket
is not required in this circumstance.
By default, PMW draws the brackets for triplets and other irregular note groups
horizontal. Occasionally a sloping bracket is required; these can be
obtained by means of the &`/lu`&, &`/ld`&, &`/ru`&, and &`/rd`& options on the
opening curly bracket. They have the effect of moving the left or right hand
ends of the bracket up or down, respectively, by an amount specified after the
option.
.code
{/ld10 dfa}
.endd
This example moves the left hand end down by 10 points. Very occasionally, when
using coupled staves, it is useful to be able to alter the direction of the
`jog' at one end of a triplet bracket so that it points in the opposite
direction to the jog at the other end. The qualifiers &`/lx`& and &`/rx`&
request this, for the left-hand and right-hand jogs, respectively.
.subsection "Beam breaking in irregular note groups"
.index "irregular note groups" "beaming"
.index "beaming" "irregular note groups"
The appearance of an irregular note group does not of itself cause a break in
the beaming, and an explicit beam break must be specified if required.
Strictly, beam breaking indicators and the tie indicator are supposed to come
immediately after the final note, before the terminating } character, but in
fact PMW allows the } character to precede or follow the tie and beam
indicators. Thus the following are all permitted:
.code
{g=g=g=,}g= {g=g=g=},g= {g=g=g=_}g {g=g=g=}_g
.endd
When both a tie and beam break indicator are present, the } character must
come either before or after both of them, not in between.
.subsection "Treating certain regular groups as triplets" SUBSECTtripletize
.index "triplets" "assumed for alignment and MIDI"
.index "&%[tripletize]%&"
In some music, note pairs consisting of a dotted quaver followed by a
semiquaver are intended to be performed as triplets, that is, with the
semiquaver taken as a third of a crotchet, instead of a quarter. This notation
can be seen in some Telemann manuscripts, for example. In light popular music,
such groups may also be `swung' into triplets. This performance convention does
not cause any problems when printing a single part, but when a score is printed
and there are actual triplets in another part, semiquavers after dotted quavers
are not by default vertically aligned with the final triplet notes in other
parts. However, PMW has a facility for adjusting the output so that the
noteheads do line up. In the following example, the first bar shows what
happens by default; in the second bar the bass part has been `tripletized'.
.music "music56" 76 4,-20
The form of the printed notes remains the same, but their performance length
has been adjusted, which affects the horizontal position of the semiquavers.
The adjusted note lengths are also used when MIDI output is generated.
The &%[tripletize]%& directive controls this behaviour. It can be followed by
one of the words `on' or `off'. If neither is present, `on' is assumed. At the
start of a stave, tripletizing is turned off. When turned on, in addition to
dotted quaver pairs, groups consisting of a dotted crotchet followed by two
semiquavers (notes or rests) are also adjusted. For such groups, the
semiquavers are each treated as having the length of one third of a crotchet,
and the dotted crotchet's length is appropriately shortened.
.subsection "Ties and short slurs" SUBSECTshortslur
.index "ties" "specifying"
.index "slurs" "over two notes, specifying"
.index "short slurs (over two notes)"
Two adjacent notes may be tied, or a slur generated between them, by ending the
first note with an underline character. PMW does not distinguish between a tie
and a slur between two adjacent single notes, except that when the underline
represents a tie (the two notes have the same pitch), the stem direction of the
second note defaults to being the same as that of the first note, and if a MIDI
file is being generated, the tie is honoured. The stem direction defaulting
does not happen in the case of a short slur, when the two notes have different
pitches. In both cases, explicit stem directions can be specified if the
defaults are not what you want.
.index "chords" "tied"
In contrast to single notes, when an underscore follows a chord it causes tie
lines to be drawn only between notes of the same pitch in the chord and the
following chord. Thus an underscore always represents one or more ties when it
follows a chord. The &%[slur]%& directive must be used when slurs are required
between adjacent chords (and when slurs cover more than two single notes). If
two notes (or chords) that form part of a beam are tied, it does not cause the
beam to be broken. An explicit beam break must be specified if required.
.index "ties" "direction"
Ties are normally printed on the opposite side of the noteheads to the stems. A
tie on a single note can be forced to be above or below the notehead by adding
the qualifier &`/a`& or &`/b`& after the underline character.
.code
a_/a | a e'_/b | e'
.endd
In this example, the tie between the A notes is forced above, and the tie
between the E notes is forced below. Such an indication takes precedence over
the &%[ties]%& stave directive, which sets a default position for all
subsequent ties. The same qualifiers are also available for chords, where they
force &'all'& the tie marks to be drawn in the specified direction. It is also
possible, for a chord, to specify that only some of the tie marks are to be
drawn above or below the noteheads, the remainder appearing on the opposite
side. This is done by inserting a digit between the &`/`& character and the
letter that follows.
.code
(ace)_/1a (ace) (dfa)_/2b (dfa)
.endd
These examples show two different ways of specifying that one of the three tie
marks is to be drawn above the noteheads, with the other two below.
.subsection "Editorial and intermittent ties"
.index "editorial ties"
.index "ties" "editorial"
.index "dashed ties"
.index "ties" "dashed"
.index "dotted ties"
.index "ties" "dotted"
Ties can be marked editorial, or printed as dashed or dotted, by means of
the following qualifiers, which are the same options as for slurs:
.itable none 0 0 2 30 left 300 left
.row &`/e`& "editorial &-- a short line is drawn through the tie"
.row &`/i`& "intermittent &-- that is, dashed"
.row &`/ip`& "intermittent periods, that is, dotted"
.endtable
.subsection "Hanging ties" SUBSECThangingties
.index "hanging ties"
.index "ties" "hanging"
.index "invisible items" "notes"
.index "notes" "invisible"
Occasionally there is a requirement to print tie marks that do not end on
another note or chord, but simply extend some distance to the right to indicate
that the note or chord should be held on for some time. These can be notated by
making the second note or chord invisible using the stave directive &%[notes
off]%&. In the case of a chord, the ends of all the tie marks are vertically
aligned when this is done. To help with the positioning of the ends of this
kind of tie, tie marks are allowed to continue over rests (usually invisible
ones).
.code
(cde)_ | qq [notes off] (cde) [notes on] |
.endd
This example extends the ties to the position of the third crotchet in an
otherwise empty bar.
.subsection "Glissando marks"
.index "glissandos"
Glissando marks are available for single notes. They are not available for
chords. (PMW will accept the notation for chords, but will not do the correct
thing with it.) The glissando notation is an extension of the short slur
notation. If a short slur mark (underscore) is followed by &`/g`&, a glissando
line is drawn between the relevant notes. If both a slur and a glissando mark
are required, &`/s`& must be added. If the slur is being forced above or below
with &`/a`& or &`/b`&, it is not necessary to use &`/s`&.
.itable none 0 0 2 90 left 200 left
.row &`f_`& "slur only"
.row &`f_/g`& "glissando only"
.row &`f_/s/g`& "glissando and slur"
.row &`f_/g/a`& "glissando and slur, slur above"
.endtable
It may occasionally be necessary to insert extra space between notes that are
joined by glissando marks. There are examples of the use of glissandos in
sections &<<SECTtiesslurs>>& and &<<SUBSECTrottext>>&.
.subsection "Input short cuts" SUBSECTshortcuts
.index "input short cuts"
.index "repeated notes"
.index "repetition" "notes"
.index "notes" "repeated"
.index "notes" "short cut entry"
.index "short cut note entry"
A number of short cuts are available to reduce the amount of typing needed.
They do not affect the appearance of the output in any way.
.ilist
The previous note or chord can be repeated exactly, including its expression
marks or ornaments, by using the letter &`x`& instead of a note letter. An
optional number may follow &`x`& to indicate the number of repetitions. A beam
break (&R; &<<SECTbeaming>>&) or a tie may follow, and a subsequent &`x`& can
be used for further repetitions. For example, a bar of eight quaver chords,
broken in the middle, can be written like this:
.code
(e-gb) x3; x4 |
.endd
A rest may intervene between the original note and its copy, but there must be
no clef, octave, or transposition change between them.
.next
The previous note or chord's pitches can be copied, with a different note
length and with its own options, by using the letter &`p`& instead of a note
letter. The length of the note is determined by the case of the letter &`p`&
and any hyphens, equals, or plus signs that follow, and normal note options
such as staccato, etc., may follow as well. As in the case of &`x`&, there must
be no clef, octave, or transposition change between the original and the copy.
For example, a dotted crotchet chord followed by a quaver chord of the same
pitches can be notated like this:
.code
(d.fa) p-
.endd
.endlist
A note defined with the letter &`p`& can be followed by another &`p`&, possibly
with a different note length, and &`x`& may follow &`p`& and &'vice versa'&. In
earlier versions of PMW, they had to be in the same bar as the note or chord to
which they referred; this is no longer the case.
For both &`x`& and &`p`&, accidentals are not reprinted within a bar, though
they affect the pitch if a MIDI file is being generated. However, when &`x`& or
&`p`& is used at the start of a bar, and the note or chord is not tied to the
previous one (in the previous bar), the accidentals are repeated. If such a
note or chord is tied to the previous one, no accidentals are printed, but if
there is a subsequent use of &`p`& or &`x`&, the accidentals &'are'& then
repeated, according to the usual notation convention.
.code
a b #c_ | P p x
.endd
In this example, an accidental is not printed before the minim at the start of
the second bar, but one is printed before the following crotchet. For technical
reasons, &`x`& and &`p`& are not available after notes that print their
accidentals above or below.
.section "Note beaming" SECTbeaming
.index "notes" "beaming"
.index "beaming" "breaking a beam"
.index "breaking a beam"
PMW makes no beaming breaking decisions based on position in the bar or any
other criteria, but leaves it entirely up to the creator of the input file to
specify what is required. The &%beamthickness%& heading directive can be used
to set the thickness of line used for drawing beams.
.subsection "Beam breaking"
.index "semicolon" "beam breaking"
.index "; (semicolon)" "beam breaking"
.index "comma" "beam breaking"
.index ", (comma)" "beam breaking"
Notes and chords shorter than a crotchet are automatically beamed together
unless they are separated in the input by one of the following beam breaking
characters:
.display
&`;`& break all beams (semicolon)
&`,`& break secondary beams only (comma)
.endd
These characters are ignored if they follow longer notes.
.index "beaming" "across rests"
.index "rests" "beaming across"
PMW automatically beams across rests that are shorter than a crotchet, unless a
break in the beam is specified. A beam breaking character must be entered
immediately after the end of a note or after the closing parenthesis of a
chord, without any intervening space, though if the note or chord is tied (with
an underscore character), the beam break must follow the underscore. If any
other character follows a note or chord, no breaking happens. If the note or
chord is the last of an irregular group (for example, triplets), the beam break
may optionally appear after the closing curly bracket as long as there is no
space between the last note and the bracket. Three pairs of beamed quavers
could be notated like this:
.code
g-e-; f-a-; b-a-
.endd
A single digit may follow a comma to specify how many beams &'not'& to break
&-- no digit is equivalent to 1.
.code
g=-a=-b=-,2 c'=-d'=-e'=-
.endd
This example results in two solid beams, with a third that is broken in the
middle. A value that is too large causes no beams to be broken.
.index "beaming" "aligning adjacent beams"
A value of zero causes all beams to be broken; this is different to the normal
semicolon beam break, because it causes the beams on either side of the break
to align with each other. After a secondary beam break, a small amount of extra
horizontal space (1.3 points) is inserted. Without this, the gap that has only
a primary beam appears to be too narrow.
.subsection "Beaming over bar lines" SUBSECTbeamoverbar
.index "beaming" "over bar lines"
.index "bar lines" "beaming over"
Consistent syncopation employing beamed notes is more logical and more graphic
when the beaming is carried across the bar lines. This effect can be achieved
in PMW by following the bar character by the &`=`& character.
.code
[time 2/4] r- g g- |= g-; g g- |= g-; g r- |
.endd
This notation causes a beamed group to extend into the subsequent bar; in the
example above, two pairs of beamed quavers are printed, each straddling a bar
line. Without the &`=`& characters after the bars, each quaver would be printed
separately. A single beam can be carried over one bar line only; it cannot be
continued over a second bar line. However, as the example shows, a bar may have
carried-over beams at both ends.
When such a beamed group occurs at the end of a system, the beam is drawn to
the final bar line, and, on the next system, an `incoming' beam is drawn to
indicate the continuation. By default, this has the same slope as the first
part of the beam. This can, however, be altered by means of the &%[beamslope]%&
directive, placed at the start of the second bar. A &%[beammove]%& directive
can also be used in this position, where it will affect only the continued
portion of the beam.
&*Warning:*& Because PMW normally works on only one bar at a time, continued
beams are not handled in quite the same way as other beams. In particular, the
computation of stem directions for the notes takes place independently in each
bar, taking into account only the notes in that bar. This means that in some
cases the notes in the second bar will by default have their stems in the
opposite direction to the rest of the beam. This is not usually what is wanted,
and it can give rise to errors when PMW cannot fit the notes on both sides of
the beam. In these cases, it is necessary to specify an explicit stem direction
for the first note of the second bar.
.subsection "Beaming across rests at beam ends" SECTbeamendrests
.index "beaming" "across rests at beam ends"
.index "rests" "beaming across"
A recent innovation in notation is the continuation of beams over rests when
they are at the start or end of the beam. This is thought to be helpful in
indicating rhythmic groupings.
.index "&%beamendrests%&"
.index "&%nobeamendrests%&"
PMW handles rests in the middle of beams automatically, but does not by default
draw beams over rests at the ends of beams. If you want this to happen, you can
request it by specifying &%beamendrests%& in the heading. There is also
&%nobeamendrests%&, which can be used to cancel this effect in a subsequent
movement. Explicit beam breaks can be used to prevent an individual beam from
covering a rest.
Vertical movement of the rests is taken into account when computing the
position of the beam. As in all beams, this can be adjusted by means of the
.index "&%[beammove]%&"
&%[beammove]%& directive.
Beams covering rests at the end may be continued over bar lines, as described
in the previous section, but only if there is at least one non-rest in the
first bar.
.subsection "Accelerando and ritardando beams" SUBSECTaccritbeams
.index "beaming" "accel. and rit. "
.index "accelerando beams"
.index "ritardando beams"
.index "&%[beamacc]%&"
.index "&%[beamrit]%&"
In modern music, accelerandos and ritardandos are sometimes notated by beams
that fan out or in. PMW has some simple support for printing these. The stave
directives &%[beamacc]%& and &%[beamrit]%& specify that the next beamed group
in the bar is of the appropriate type. The notes of the group should normally
be input as quavers. In most cases they are an irregular group and need to be
enclosed in curly brackets, with an appropriate number. It is not usual to
print the number, so this is normally turned off by means of the &`/x`& option
on the irregular note group.
PMW prints accelerando and ritardando groups by drawing the primary beam as
normal, then drawing one or two more inside beams, with one end fixed and the
other getting nearer to the noteheads. By default, three beams in total are
drawn, but this number can be changed in the &%[beamacc]%& or &%[beamrit]%&
directive by following it with the number 2, in which case only two beams are
drawn. This setting lasts until the end of the stave, or until a subsequent
&%[beamacc]%& or &%[beamrit]%& directive containing the number 3 is
encountered.
The slope of the primary beam is the same as it would be for a conventional
beamed group. If this is horizontal, a `fanned' beam does not always look
right, and it is necessary to use the &%[beamslope]%& directive to change it.
.code
[beamslope 0.1] [beamacc] {5/x g-g-g-g-g-} |
[beamslope -0.1] [beamrit] {5/x g-g-g-g-g-} |
[beamslope 0.1] [beamacc 2] {5/x g-g-g-g-g-} |
[beamslope -0.1] [beamrit] {5/x g-g-g-g-g-} |
.endd
.music "music38" 32 4,-20
In some cases it is also necessary to move the beams away from the noteheads
using the &%[beammove]%& directive.
.subsection "Beams with notes on both sides" SUBSECTbeamsides
.index "beaming" "notes on both sides"
.index "notes" "on both sides of beam"
The stem direction that is determined for a beamed group by the rules
described in section &<<SECTstemdir>>& is the default, that is, it is the
direction used for those notes in the group whose direction is not otherwise
specified. It is possible to have notes on the non-default side of the beam by
requesting an explicit stem direction for them. This facility is of most use in
two-stave keyboard parts when the staves are `coupled' (see the &%[couple]%&
directive). If there is a run of notes on one side of the beam followed by a
run of notes on the other side, the note option &`\sw\`& can be used to swap
the default stem direction for the note on which it appears and for all
subsequent notes in the beam, but only if the first note of the beam has its
direction explicitly specified.
.code
[stave 1 treble 1 couple down]
g`-f`-a-\sd\ | e`-\su\f`-g`-g-\sw\a-b- |
[endstave]
[stave 2 bass 0]
q-q-q- | Q! |
[endstave]
.endd
.music "music40" 64 8,-20
In this example, the default stem direction for the first beam is upwards
because of the two low notes, but the third note has its stem forced downwards,
so is printed on the other side of the beam. The &`\su\`& option in the second
beam causes the first three notes to have their stems up, and the &`\sw\`&
option forces the last three to have their stems down. This option can be used
as many times as necessary in a beam. If &`\su\`& were not present on the first
note, &`\sw\`& could not be used on the fourth, because the default direction
is not known at the time &`\sw\`& it is processed (it depends on the pitches of
all the notes in the beam).
The arrangement of beams and beamlets for beams with notes on both sides
follows the general principle of attempting to avoid `beam corners' wherever
possible. Some variation in this arrangement can be obtained by making use of
secondary beam breaks. The &%[beamslope]%& and &%[beammove]%& directives, which
adjust the slope and vertical position of a beam, can be used as for any other
beam. When there are only two notes in a beam, it is almost always possible to
print them with their stems going in opposite directions, even though sometimes
this leads to extremely slanted beams. When there are more than two notes,
however, it is sometimes not possible to find a way of positioning the beam if
the notes are too close together in pitch. When this happens, PMW outputs an
error message.
.section "Stem directions" SECTstemdir
.index "stems" "direction"
.index "direction of stems"
.index "notes" "stem direction"
This section documents the default rules for choosing a stem direction for
a note or a chord. Some variation in the rules can be made by means of the
&%stemswap%& heading directive (&R; &<<SUBSECTstemswap>>&). The `stem swap
level' is normally the middle line of the stave, but can be changed by the
&%stemswaplevel%& directive (&R; &<<SUBSECTstemswaplevel>>&).
.subsection "Preliminary"
1. The `pitch' of a chord, for stem-decision purposes, is the average pitch of
its highest and lowest notes.
2. The `pitch' of a beamed group, for stem-decision purposes, is the pitch of
the note that is furthest away from the stem swap level.
3. Stem directions are computed for all notes, even breves and semibreves. In
the case of these long notes the notional stem direction can affect the stems
of subsequent or previous notes, and also the printing of chords containing
adjacent notes.
.subsection "Rules for non-beamed notes and chords"
These rules are given in order of priority. `The previous note' includes the
last note of a previous beamed group, if relevant. What happens to notes at the
stemswap level (rules N5 and N6) can be changed by use of the &%stemswap%&
directive (&R; &<<SUBSECTstemswap>>&).
N1. If an explicit stem direction is specified on a note, it is used.
N2. If a default is set by the stave directive &%[stems up]%& or &%[stems
down]%&, it is used.
N3. If the note is tied to the previous note, that is, the previous note is
followed by an underscore and has the same pitch, the same direction as
the previous note is used, even if this note is the first in a bar, provided
the previous note's direction does not depend on this note's.
N4. If the note is above or below the stem swap level, its stem goes down or
up, respectively.
N5. The note is at the stem swap level. If it is the first in the bar, or if
all preceding notes in the bar have used this rule, its stem goes the same way
as the next note in the bar that does not use this rule. If there are no more
such notes in the bar, its stem goes the same way as the last note of the
previous bar. If this is the first bar of the piece, the stem goes up.
N6. The stem goes the same way as the previous note.
.subsection "Rules for beamed groups"
.index "beaming" "default stem direction"
.index "stems" "direction in beamed groups"
B1. If the stem direction of the first note in the group is forced by N1, N2,
or N3 above, that direction is used as the default for the group.
B2. If the `pitch' of the beamed group is above or below the stem swap level,
the stems go down or up, respectively, by default.
B3. The default stem direction is taken from the previous note. If there is no
previous note, the stems go upwards.
Normally, all the notes in a beam are printed on the same side of the beam,
with their stems in the default direction for the beam, but it is possible to
specify that some are to be printed on the other side of the beam (&R;
&<<SUBSECTbeamsides>>&).
.section "Text strings in stave data" SECTtextitems
.index "text" "on staves"
.index "underlay"
.index "overlay"
.index "figured bass" "specifying"
Section &<<SECTunderlay>>& gives details of the special facilities that are
applicable only to underlay or overlay text, that is, the sung words (lyrics)
in a voice part. This section applies to text in general, with some particular
features that are relevant only for non-underlay/overlay text. By default, text
strings are printed below the stave in an italic font, and positioned according
to the following note. The &%[textfont]%& directive can be used to specify a
default font for ordinary (that is, not underlay, overlay, or figured bass)
text. Rehearsal marks are a special form of text and are specified in a
slightly different manner (&R; &<<SECTrehearse>>&).
The &%[text]%& directive provides a way of changing the default position of the
text to be above the stave, rather than below; it can specify a fixed position
(above or below the stave) or allow the position to be determined by PMW.
Alternatively, &%[text]%& can specify that unqualified strings are underlay,
overlay, or figured bass text. Any individual string can always be explicitly
qualified to indicate its type. Underlay, overlay, and figured bass text is by
default printed in the roman typeface. The directives &%[underlayfont]%&,
&%[overlayfont]%&, and &%[fbfont]%& can be used to change the default font for
these kinds of text on individual staves.
Text strings are coded in among the notes of a stave, and are, like all
strings, enclosed in double quote characters.
.index "strings" "limit on number of"
There may be no more than 50 text strings before any one note; this large limit
is intended to cover all possible applications. The escape character
conventions using the backslash character that apply to all PMW strings are
relevant (&R; &<<SECTtextstrings>>&). In particular, within any text string,
the font can be changed by the use of the appropriate escape sequences. The
closing double-quote of the string may be followed by one or more options,
separated from the quote and from each other by slash characters. The following
are available:
.index "text" "qualifiers"
. *** In this table, some of the entries overflow their cell width, so they
. *** have to have &~ instead of spaces. This doesn't matter, because the
. *** third column is used only for some lines that have narrow text in the
. *** second column.
.itable none 0 0 3 60 left 130 left 150 left
.row &`/a`& "print above the stave"
.row &`/a`&<&'n'&> "print&~at&~fixed&~distance&~above&~the&~stave"
.row &`/ao`& "print&~above&~the&~stave,&~at&~the&~overlay&~position"
.row &`/b`& "print below the stave"
.row &`/b`&<&'n'&> "print&~at&~fixed&~distance&~below&~the&~stave"
.row &`/bu`& "print&~below&~the&~stave&~at&~the&~underlay&~position"
.row &`/m`& "print&~below&~the&~stave,&~midway&~to&~the&~next&~stave"
.row "&~"
.row &`/ul`& "this text string is underlay"
.row &`/ol`& "this text string is overlay"
.row &`/fb`& "this&~text&~string&~is&~figured&~bass"
.row "&~"
.row &`/h`& "position&~halfway&~between&~notes"
.row &`/lc`&<&'n'&> "position&~left&~<&'n'&>&~crotchets"
.row &`/rc`&<&'n'&> "position&~right&~<&'n'&>&~crotchets"
.row "&~"
.row &`/bar`& "position at start of bar" "&BT12;"
.row &`/ts`& "position at time signature" "&BM12;"
.row &`/c`& "centre the text" "&BM12;"
.row &`/e`& "align end of text" "&BM12;"
.row &`/nc`& "do not centre" "&BM12;&~&~ignored for underlay/overlay"
.row &`/ne`& "do not align the end" "&BM12;"
.row "&~" "" "&BM12;"
.row &`/box`& "print enclosed in a box" "&BM12;"
.row &`/ring`& "print enclosed in a ring" "&BM12;"
.row &`/rot`&<&'n'&> "rotate by <&'n'&> degrees" "&BB12;"
.row "&~"
.row &`/s`&<&'n'&> "print&~using&~size&~<&'n'&>,&~where&~<&'n'&>&~is&~between&~1&~and&~20"
.row &`/u`&<&'n'&> "move up <&'n'&> points"
.row &`/d`&<&'n'&> "move down <&'n'&> points"
.row &`/l`&<&'n'&> "move left <&'n'&> points"
.row &`/r`&<&'n'&> "move right <&'n'&> points"
.row "&~"
.row &`/ps`& "insert&~raw&~PostScript&~(for&~experts&~only)"
.endtable
If any of the movement options are repeated on a string, their effect is
cumulative. This feature is useful when a repeated string with a movement
option is defined as a macro, but in some instances needs further adjustment.
These two examples have exactly the same effect:
.code
"allargando"/u6/d2
"allargando"/u4
.endd
If more than one of &`/a`&, &`/ao`&, &`/b`&, &`/bu`&, &`/m`&, &`/ul`&, &`/ol`&,
or &`/fb`& is present, the last one takes precedence. If none of them are
present, the string type is taken from the last &%[text]%& directive. If
&%[text]%& has not been used on the current stave, &`/b`& is assumed. There is
an important difference between &`/bu`& and &`/ul`&, and similarly between
&`/ao`& and &`/ol`&. When &`/bu`& is specified, the text is treated as
non-underlay text, but its default vertical position is the underlay level.
This contrasts with &`/ul`&, which indicates that the text &'is'& underlay, and
subject to special processing described in section &<<SECTunderlay>>&.
The &`/m`& option is like &`/b`&, except that the default vertical position of
the text is in the middle of the space between the current stave and the one
below it, provided this is lower than the normal &`/b`& position would be. This
is useful when printing dynamic marks in keyboard parts. If two over-printing
staves are being used for a keyboard part, text with the &`/m`& option may
appear with either of them, because if the space after the current stave is set
to zero, the space for the next stave is used when positioning such text.
.index "text" "vertical position"
The default vertical position of text is adjusted to take account of the next
note, unless the string is forced to the overlay or underlay level by &`/ol`&
or &`/ul`&, or to an absolute position by &`/a<&'n'&>`& or &`/b<&'n'&>`&.
.code
"at underlay level"/ul
"six points above the stave"/a6
"twenty points below the stave"/b20
.endd
By default, if two or more strings precede the same note or the end of a bar,
the default vertical position for the second and subsequent strings is an
appropriate distance above (for text above the stave) or below (for text below
the stave) the previous string. There is, however, a facility for horizontal
concatenation (&R; &<<SUBSECTfollowon>>&). The level of any string can always
be adjusted by the use of &`/u`& or &`/d`&.
.subsection "Horizontal alignment" SECThorizalign
.index "text" "horizontal alignmnent"
.index "text" "end alignment"
The horizontal alignment of underlay and overlay strings is described in
section &<<SECTunderlay>>&. Except for follow-on strings (&R;
&<<SUBSECTfollowon>>&), all other strings are printed by default with their
first character aligned with the left-hand edge of the next note or rest, or
with the bar line, if there are no following notes or rests in the bar.
If the &`/e`& qualifier is present on the text string, it is the end of the
string that is aligned with the alignment point. The &`/ne`& option can be used
on text strings to cancel the effect of a previous &`/e`&. This can be useful
for overriding options on strings defined as macros.
.index "text" "centred"
.index "text" "centred in bar"
If the &`/c`& qualifier is present, the text is centred at the alignment point.
If this is used on text immediately before a whole bar rest that is centred in
the bar, the text is centred in the bar. This applies to both visible and
invisible whole bar rests. The &`/nc`& option can be used on text strings to
cancel the effect of a previous &`/c`&. This can be useful for overriding
options on strings defined as macros.
The &`/l`& and &`/r`& qualifiers move a string left or right with respect to
the default position, and there are several qualifiers that can be used to vary
the position of the alignment point itself. If more than one of these is
present, the earliest described here takes precedence (for example, &`/bar`&
overrides &`/ts`& and &`/h`& overrides &`/rc`&).
If &`/bar`& is present, the alignment point is the previous bar line, or the
start of the system for the first bar in a system. If the &`/ts`& option is
present, the alignment point is the time signature at the start of the bar. If
there isn't one, the alignment point is the first note in the bar. For both
&`/bar`& and &`/ts`& the vertical position of the string still depends on the
note that follows it.
The &`/h`& option causes the alignment point to be halfway between the next
note or rest and the note or rest that follows, or the end of the bar if there
is only one note or rest following in the bar. The &`/e`& and &`/c`& options
can be combined with &`/h`& to specify end or centre alignment at the halfway
position, respectively. If no notes follow the text string in the bar, &`/h`&
has no effect, and it is also ignored if &`/bar`& or &`/ts`& are present.
Positions other than the halfway point can be specified by a number given after
&`/h`&. For example, &`/h0.75`& specifies the three-quarter point between the
next note or rest and the one following. The &`/h`& option can be used with
underlay and overlay strings, but it applies only to the first syllable of such
strings.
The alignment point can also be positioned with respect to the musical offset
in the bar. This is similar to the `offset' positioning that is used in
MusicXML; the feature was added to PMW in order to simplify translating
MusicXML into PMW input. Whereas &`/l`& and &`/r`& specify a distance in
points, &`/lc`& and &`/rc`& specify a distance in crotchets. For example:
.code
"some text"/rc1 a b
.endd
The text in this example is aligned with the second crotchet instead of the
first. The value given may be fractional, for example:
.code
"some text"/rc0.5 a b
.endd
In this case the text is aligned with where a quaver that follows the first
note would be. This is not necessarily halfway between the notes when there are
other staves that contain different note lengths. If &`/rc`& is used on text
that precedes the final note of a bar, or if &`/lc`& is used on text that
precedes the first note of a bar, the distance is calculated from the default
note spacing.
.subsection "Enclosed text (boxed or ringed)"
.index "text" "enclosed"
.index "text" "boxed"
.index "text" "ringed"
The longer the string is, the more elliptical a ring will be. For a single
character, the ring is approximately circular. If the &`/box`& or &`/ring`&
options are used with underlay or overlay, they apply to each individual
syllable.
.subsection "Text sizes"
.index "text" "sizes"
.index "size" "of text"
The &`/s`& option refers to the sizes of text defined by the &%textsizes%&
heading directive (&R; &<<SUBSECTtextsizes>>&); &`/s1`& specifies the first
size, &`/s2`& specifies the second size, and so on.
.code
"Some text string"/s2
.endd
This example uses the second size defined by &%textsizes%&. By default, text is
printed in the first size, unless it is underlay, overlay, or figured bass,
which have their own default sizes (set by the &%underlaysize%&,
&%overlaysize%&, and &%fbsize%& directives). The &`/s`& option can, however, be
used with underlay, overlay, and figured bass text to specify a non-default
size for an individual string.
.subsection "Rotated text" SUBSECTrottext
.index "text" "rotated"
.index "rotated text"
.index "fonts" "rotating"
Stave text strings that are not underlay or overlay can be rotated through any
angle by following the string with &`/rot`& and a number in degrees. Positive
rotation is anticlockwise.
.code
"gliss"/rot40/a0/r4 c'_/g [space 8] c''
.endd
.music "music41" 32 8,-22
The centre of rotation is on the text baseline, at the left-hand end of the
string. If the string is centred or right-aligned (the &`/c`& or &`/e`&
qualifiers), this position is computed from the length of a horizontal string,
before rotation. That is, rotation happens last.
.subsection "Follow-on text" SUBSECTfollowon
.index "text" "follow-on"
.index "follow-on text"
By default, a string that immediately follows another string is printed above
or below the previous string and may have its own horizontal positioning. There
is, however, a facility for horizontally concatenating two or more strings.
This is useful when the strings use fonts of different sizes, or are rotated by
different amounts. Follow-on strings are characterised by the &`/F`& qualifier.
The first string and any follow-on strings must not be PostScript strings, nor
may they use the &`/box`& or &`/ring`& qualifiers. The first string may use any
of the available positioning qualifiers, but a follow-on string must not have
any explicit positioning qualifiers such as &`/a`&, or &`/ts`&. The starting
point for a follow-on string is the endpoint of the preceding string. The only
qualifiers that are permitted for follow-on strings are those for relative
movement (&`/u`&, &`/d`&, &`/l`&, &`/r`&), &`/s`& to select a font size, and
&`/rot`& to specify a text rotation. A follow-on string that follows a rotated
string starts from the rotated end point.
.subsection "PostScript text"
.index "PostScript" "including in PMW output"
If the &`/ps`& qualifier appears on a text string, the contents are assumed to
be raw PostScript that is to be inserted at the point where a text string would
have been output. This facility is provided for PostScript experts; it is not
likely to be of interest to most users. The string is preceded by a call to the
PostScript &%gsave%& operator and followed by &%grestore%&. The origin is the
x-coordinate at which a text string would have been output, and the bottom line
of the stave plus any vertical adjustment that is specified for the string. No
processing is done on the string; any backslash characters it may contain are
not treated specially.
.section "Fingering indications"
.index "fingering indications"
The small caps feature of text strings is useful for selecting a smaller than
normal font for printing fingering indications. Alternatively, a specific font
size can be defined, and used with the &`/s`& text option. The music font
contains the special characters &{a}&&~&~ and &{b}&&~&~ for indication
the use of the thumb in cello parts. The use of macros is suggested when
setting music with lots of fingering. Note the use of the &`/c`& option in this
example, to centre the text below each note:
.code
define 1 "\rm\\sc\1"/b/c
define 2 "\rm\\sc\2"/b/c
define 3 "\rm\\sc\3"/b/c
define 4 "\rm\\sc\4"/b/c
[stave 1 alto]
&1 d- &3 c'= &2 b=; &4 d'- &3 f-;
&1 d= &2 b= &3 f= &4 d'=; &2 b= &3 f= &1 d- |
.endd
.music "music45" 32 8,-18
.section "Rehearsal marks" SECTrehearse
.index "rehearsal marks"
Rehearsal marks are specified as text items enclosed in square brackets. The
text may be longer than one character. It is printed above the stave, and by
default is printed in bold type and enclosed in a rectangular box. The
&%rehearsalmarks%& directive can be used to change the size and the font, and
to specify printing inside a ring instead of a box, or printing with no
enclosure at all. If necessary, a rehearsal mark can be moved up, down, left or
right, in the same manner as other text.
.code
["A"/u2]
.endd
This example moves the mark two points upwards. Normally, a rehearsal mark is
given at the start of a bar, and in this case it is printed immediately to the
right of the preceding bar line when the bar is not the first in a system (that
is, not the first in a line). At the start of the first bar in a system, a
rehearsal mark is by default aligned with the first note in the bar, but the
&%rehearsalmarks%& directive can be used to move it to the left edge of the
system instead. If a rehearsal mark is given in the middle of a bar, it is
aligned horizontally with the next note, exactly as for other text.
Rehearsal marks are normally printed above the top stave of a score only,
though in very large scores they are sometimes repeated part of the way down.
If parts are to be extracted from a score, the rehearsal marks should be
specified on stave 0 (&R; &<<SECTstave0>>&), so that they are always printed
above the top stave, whichever staves are selected for printing.
.section "Vocal underlay and overlay text (lyrics)" SECTunderlay
.index "text" "underlay"
.index "underlay"
.index "overlay"
.index "multi-syllable underlay"
.index "underlay" "multi-syllable"
PMW supports both underlay (words under the stave) and overlay (words over the
stave). Overlay is comparatively rare, and to save clumsy repetition of
`underlay or overlay' in what follows, the description is written mainly in
terms of underlay. However, all the features are equally applicable to overlay.
A text string is marked as underlay or overlay either by using the &`/ul`& or
&`/ol`& options, or by using the &%[text]%& directive to set underlay or
overlay as the default, and then not using any of the other text type options
(&`/a`&, &`/b`&, etc.) The usual escape character conventions apply to underlay
text, and in addition, the characters &`#`& (sharp), &`-`& (hyphen), &`=`&
(equals), and &`^`& (circumflex) have special meanings.
.subsection "Underlay syllables"
Underlay can be input one syllable at a time, each syllable preceding the note
to which it refers. This gives the maximum possible control, because each
syllable can be moved up, down, left or right as required. However, it is
normally easier to input underlay in longer strings. If a string of underlay
text contains space and/or hyphen characters, it is automatically split up by
PMW and allocated to the notes that follow. Rests are excluded from this
process (with one exception, which is described in section
&<<SUBSECTuolayother>>&). As a simple example of this facility, this is an
appropriate way to start the British National Anthem:
.code
"God save our" g g a |
.endd
Here, each space delimits a word, and each word is associated with one note.
.index "hyphen" "in underlay string"
.index "strings" "hyphen in underlay"
When a word consists of more than one syllable, the syllable breaks must be
delimited by hyphens.
.code
"God save our gra-cious Queen" g g a | f. g- a |
.endd
PMW prints one or more hyphens, depending on the distance between the
syllables. The heading directive &%hyphenthreshold%& can be used to specify the
distance between syllables at which more than one hyphen will be used. The
default value is 50 points. If the space is less than this, a single hyphen is
printed, centred in the space. Otherwise, a number of hyphens are printed, the
distance between them being the threshold value divided by three. It is
possible to cause PMW to print en-dash characters (or any other characters) as
`hyphens' between syllables of underlaid text. See the &%hyphenstring%& heading
directive for details. Whatever is printed, the syllable separator in the input
remains a single hyphen.
PMW does not check that the number of syllables matches the number of notes,
except that it warns if text is left over at the end of the stave. Each
syllable of underlay text is normally centred horizontally about the next note
in the bar. Sometimes it is necessary to move syllables slightly to the left or
right. A convenient way to do this is to include the character &`#`&
.index "# character in text"
in the underlay string. This character prints as a space, but does not count as
a space when PMW is splitting up the text. The width of a printed space is half
the size of the font.
.code
"God# save #our" g g a |
.endd
If the default, 10-point font is in use, this example prints `God' 2.5 points
to the left of where it would otherwise appear, and `our' 2.5 points to the
right.
.index "underlay" "syllable alignment"
Sometimes several words are required to be printed under a single note, and
only the first is to be centred on it. The &`#`& character can be used to
separate such words, to prevent them being assigned to separate notes. If the
character &`^`& (circumflex) appears in an underlay syllable, only those
characters to the left of it are counted when the string is being centred. The
circumflex itself is not printed.
.code
"Glory^#be#to#Thee, O God." G+ g #F
.endd
In this example, the words `Glory be to Thee' are all associated with the
semibreve, but because of the circumflex, `Glory' is centred under it, and the
rest stick out to the right. If a syllable starts with a circumflex, it is not
centred, but instead starts at the note position. If two circumflex characters
are present in a syllable, the text between them is centred at the note
position. This makes it possible to cause text to stick out to the left of a
note.
.index "underlay" "extension"
When a syllable extends over more than one note, equals characters must be
inserted into the input string, one for each extra note. This includes tied
notes, because PMW does not distinguish between ties and short slurs.
.code
"glo-==ri-a" F. | B`. | C. | E. | F. |
"glo-========ri-a" a-e-a- | b-c'=b=a=b= | c'- c'- b- |
.endd
PMW automatically draws an extender line after a word that ends with an equals,
finishing underneath the last note, provided that the line is of reasonable
length. The vertical position of the extender level is just below the baseline
of the text, but this can be altered (&R; &<<SECTextlevel>>&). By default, PMW
centres all underlay and overlay syllables at the position of their respective
notes. The &%underlaystyle%& directive (&R; &<<SUBSECTunderlaystyle>>&) can be
used to request PMW to align underlay and overlay multinote syllables flush
left with the initial note. The circumflex character can still be used to
specify that particular multinote syllables be centred.
Text for two or more verses can be specified in multi-syllable fashion before
the relevant notes by giving each verse as a separate string.
.code
"God save our gra-cious Queen"
"Thy choi-cest gifts in store"
g a a | f. g- a |
.endd
The vertical distance between verses can be altered by means of the
&%underlaydepth%& and &%overlaydepth%& directives, which control independent
values. For overlay, the second verse is printed above the first one, and so
on. If any positioning qualifiers are specified on an underlay input string
(&`/u`&, &`/d`&, &`/l`&, or &`/r`&), the same amount of movement applies to
each of the syllables in the string independently. Specifying vertical movement
in this way can sometimes be a convenient alternative to the use of the
&%[ulevel]%& directive.
The multi-syllable underlay feature in PMW is just an alternative input
notation. The effect is exactly as if the individual syllables were input
immediately preceding the notes under which they are printed. The following two
alternative examples produce the same output:
.code
"God= save our Queen" e'-c'- b a | G. |
"God=" e'- c'- "save" b "our" a | "Queen" G. |
.endd
If an underlay string ends with a hyphen, the equals characters can be omitted;
PMW automatically prints a sequence of hyphens up to the next underlay
syllable. This can be useful when syllables last for many notes, for example:
.code
"glo-" g=a=b=g=; a=b=c'=a=; b-. "ri-a" g= b
.endd
.music "music23" 40 4,-12
If the final syllable of a word extends over many notes, only a single equals
character is needed if it is at the end of an input string. However, because
extender lines are drawn only as far as the last note for the syllable, rather
than to the next underlaid word, it is necessary to supply the final equals
character at the start of the next string, to tell PMW which is the final note
for the syllable.
.code
"long=" b=a=g=a=; b=a=g=a=; "= time" g g
.endd
.music "music32" 40 4,-12
If there are more notes on the stave, but no more words, a syllable consisting
of just a &`#`& character can be used to stop PMW drawing an extender line
further than is required.
&*Warning*&: There is one important restriction on the use of multi-syllable
underlay text strings. Because they are processed during the input stage of
PMW, they cannot in general be used successfully with the square bracket
notation for repeating bars. Each syllable in such a string is allocated to
&'the next note read from the input'&, but a bar repeat count just duplicates
the bar in which it appears, without reading any more notes.
.index "string repetition" "with underlay"
.index "repetition" "of input string with underlay"
However, if you use the string repetition feature (&R;
&<<SUBSECTstringrepetition>>&) to repeat the bar's input characters, this
problem does not arise.
.display
&`"one two three four"/ul &&*2(ab|) `&this works as expected
&`"one two three four"/ul [2] ab | `&this does not
.endd
.subsection "Underlay and overlay fonts"
.index "fonts" "underlay"
.index "underlay" "fonts"
.index "fonts" "overlay"
Two separate sets of fonts are provided for underlaid and overlaid text, and
the size of these can be set independently of the other text fonts by the
&%underlaysize%& and &%overlaysize%& directives. However, individual underlay
or overlay strings can specify different sizes by means of the &`/s`& option.
.subsection "Underlay and overlay levels"
.index "underlay" "level"
.index "level" "of underlay"
Text that is marked as part of the underlay or overlay is always printed at the
same level below or above the stave in any one system of staves; the line of
words is always horizontal. PMW chooses an underlay and an overlay level for
each line of music according to the notes that appear on that line, but these
can be overridden by means of the &%[ulevel]%& and &%[olevel]%& directives.
Individual words or syllables can be moved up or down relative to the standard
level by means of the &`/u`& and &`/d`& qualifiers.
.subsection "Underlay and overlay spreading"
.index "underlay" "note spreading"
.index "notes" "spreading for underlay"
PMW spreads out the notes of a piece to take into account the
width of underlaid or overlaid words. This facility should be used with care,
because the music can become very poorly spaced if the width of the words is
allowed to have too much influence on the separation of the notes. The
spreading facility operates only within individual bars, and not between bars.
It applies only to underlay or overlay text, not to other kinds of text. `Hard
spaces' (notated by sharp sign characters) in the text are treated as printing
characters when examining the available space. The minimum space allowed
between syllables is one space character in the appropriate font.
There is a heading directive, &%nospreadunderlay%&, which disables this
facility for both underlay and overlay, and it is recommended that those who
place great importance on the spacing of notes should use it. The automatic
facility is intended as an insurance for less demanding users against the
occasional wide syllable. In order that it function in this way, it is
important that a suitable note spacing be set, and a suitable size of underlay
or overlay font be chosen, such that most of the syllables fit on the line
without the need for any adjustment of the notes. The default setup is not
always suitable for music with words; multiplying the note spacing by 1.2 and
choosing a font size of 9.5 usually gives better results.
&*Warning:*& If use of the &%layout%& heading directive (&R;
&<<SUBSECTlayout>>&) causes the bars in a system to be horizontally compressed
in order to fit them on the line, underlaid syllables may be forced into each
other, even though they were originally separate. Although some re-spacing is
done after a sufficiently large compression, in order to mitigate this problem,
it is best to avoid settings of &%layout%& that cause compression if possible.
.subsection "Other uses of underlay and overlay" SUBSECTuolayother
.index "underlay" "use for other text"
The underlay and overlay facilities can be used for printing things other than
the words of a vocal part. It is common, for example, for the word
&'crescendo'& to be printed in a stretched-out manner, in the style of
underlay, or alternatively, for an abbreviation such as &'cresc.'& to be
followed by a number of hyphens. In the latter case, the final `syllable' of
the word does not exist, but it can be specified as a single sharp character,
which does not cause anything to be printed (because # prints as a space in
underlay). The text can be given as a single string, with equals characters for
each note under which hyphens are to be drawn, or each syllable can be given
with the relevant note. In the latter style, the final syllable can be moved
left or right to adjust the end point of the hyphens. Here is a simple example
of both kinds of approach:
.code
"\it\cresc-==en-==do"/ul gc'ga | gfgr |
"\it\dim.-"/ul gfef | G "#"/ul/r6 G |
.endd
.music "music24" 40 4,-10
PMW supports multiple verses, so there is no difficulty in mixing this kind of
usage with real vocal words, though usually the vocal line would be printed as
underlay and the other text as overlay. Underlay and overlay syllables cannot
normally be associated with rests, but because a final empty syllable is often
required when using underlay to print rows of dashes, and ending at a rest is
common, an exception has been made for the string &`"#"`&, which should not
occur in normal underlay usage. If this string is specified as underlay or
overlay, and immediately precedes a rest, it is associated with the rest rather
than the following note. This exception applies only to strings consisting of a
single &`#`& character.
Hyphen strings for underlay are printed with hyphens fairly far apart, and at
varying separations. Sometimes a more uniform hyphen separation is required,
and some editors prefer some other character to the hyphen after items like
&'cresc'&. Some additional features are provided for use in these cases. If a
second string is provided as an option to an underlay or overlay string,
separated by a slash, it is used instead of hyphens between the syllables of a
word. The string is repeated as many times as possible in the available space.
This option should be given after any other options for the main string; in
particular it must follow the &`/ul`& or &`/ol`& option.
The default font for the second string is the default underlay or overlay font,
as appropriate, and the default size is the size of the first string. However,
the second string may be followed by &`/s`& and a number to specify a different
size. The second string may also be followed by &`/u`& or &`/d`& to specify
that it is to be moved up or down, relative to the following syllable. In this
example, a space and a full stop is used as the repeating string, and it is
moved up so as to be approximately at the middle of the letters.
.code
"\it\cresc.-"/ul/" ."/u1.5 gc'ga | gf "#"/ul gr |
.endd
.music "music25" 32 4,-16
The second string is a normal PMW string, and may contain font changes and
other escape sequences. Hence it can be used to print trill signs followed by
wiggly lines, by selecting the appropriate characters from the music font.
.code
"\*136\-"/ol/"\*96\" E'+_ | "#"/ol/r8 E'R |
.endd
.index "trill" "with wiggly line"
.music "music26" 32 4,-22
Character 136 is the &{ˆ}& character, and character 96 is the tilde
&{`zzz}&, which gives a wiggly line when repeated. The invisible final
syllable is moved right eight points to ensure that the wiggly line covers the
final note. If such features are required in several places in a piece, the
best thing to do is to use the macro facility to save having to type the
complicated strings each time. This approach is taken in the next example.
.index "8va"
.index "octave marks"
The conventional octave mark of &'8va'& followed by a line of dashes can be
printed using an overlay string. However, it is normal to print a small `jog'
on the final dash to indicate the end of the section. To achieve this, an
additional feature is available. If an underlay or overlay option string
contains a vertical bar character, only those characters to the left of the
vertical bar are used as the repeating sequence, but the characters to the
right of the bar are printed at the end of the sequence, once. (If, by some
chance, a real vertical bar is required to be repeated, it can be specified as
character number 124.) There are some angle-shaped characters in the music font
that can be used for printing the `jogs'.
.code
define s8 "\it\8va-"/ol/" -| \mf\\159\"/u0.3
define e8 "#"/ol/r8
&s8 c'.d'-e'd' | g'g' &e8 G' |
.endd
.music "music27" 30 4,-22
In this example, the macros &%s8%& and &%e8%& contain the strings needed to
start and end an &'8va'& mark, respectively. Notice that &%e8%& is used
before the final note under the mark. The repeated character string is a space
and a hyphen (specified before the vertical bar), and at the end, a space
followed by character 159 from the music font is printed.
One further feature is available to cope with repeated strings that extend over
the end of a music system. If yet another optional string is given, it is
printed at the start of each continuation line, before the start of the
repeating strings. The only option permitted after this string is &`/s`&, to
set its size (which defaults to the size of the original underlay or overlay
string). Using this feature to cause a small `8' to be printed at the start of
continuation lines, the macro definition from the above example becomes:
.code
.endd
It is assumed that size 2 is suitably defined using the &%textsizes%&
directive.
.index-to I06
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.tocsubsectoff
.chapter "Stave directives" CHAPstavedirectives
.index-from I07 "directives" "stave"
.index-from I08 "stave directives"
This chapter describes the directives that can appear interspersed with the
notes and rests of a stave. Each directive must be enclosed in square brackets,
though if there are several in a row, a single set of brackets suffices. There
are three other items that can appear between square brackets: repeated
expression marks (&R; &<<SECTrepexpr>>&), repeated bar counts (&R;
&<<SECTrepeatbars>>&), and rehearsal marks (&R; &<<SECTrehearse>>&).
.section "Clef directives" SECTclef
.index "clefs" "list of"
Clefs are specified by directives that are the names of the clefs. There are
two different styles for C and F clefs, controlled by the &%clefstyle%&
directive (&R; &<<SUBSECTclefstyle>>&). The following clefs are available:
.itable none 0 0 2 100 left 300 left
.row &`alto`& "C3"
.row &`baritone`& "F3"
.row &`bass`& "F4"
.row &`cbaritone`& "C5"
.row &`contrabass`& "F4 with &'8'& below"
.row &`deepbass`& "F5"
.row &`hclef`& "percussion H clef"
.row &`mezzo`& "C2"
.row &`noclef`& "nothing printed"
.row &`soprabass`& "F4 with &'8'& above"
.row &`soprano`& "C1"
.row &`tenor`& "C4"
.row &`treble`& "G2"
.row &`trebledescant`& "G2 with &'8'& above"
.row &`trebletenor`& "G2 with &'8'& below"
.row &`trebletenorb`& "G2 with &'(8)'& below"
.endtable
.music "music42" 40 4,-14
The last two clefs shown are the alternative forms for C and F clefs.
If a clef directive is given without an argument, no change is made to the
current default octave. However, the directive name may be followed by a number
to indicate a new setting for the current octave.
.code
[treble 1]
.endd
This example sets the default octave to start at middle C. A clef setting has
no bearing on the interpretation of the pitch of the notes that go to make up a
part (apart from the octave setting). Changing the clef directive at the start
of a part causes the music to be printed out in the new clef, but at the same
absolute pitch as before. Clef changes in the middle of a stave that are not in
the middle of a bar are normally notated immediately before a bar line rather
than immediately after. The &%clefsize%& heading directive is used to specify
the size of such clefs.
.section "Alphabetical list of stave directives" SECTstavedirectives
The stave directives are now described in alphabetical order.
.subsection "[1st], [2nd], etc." SUBSECTfirstsecond
.index "first time bar"
.index "second time bar"
First and second time bars (and third and fourth, etc. if needed) are specified
by enclosing the number, followed by one of the sequences `st', `nd', `rd' or
`th' in square brackets at the start of a bar. The mark for the final one is
terminated by the appearance of the directive &%[all]%&.
.code
[1st] g a b g :) | [2nd] g a b c' | [all] b a g f
.endd
There is an example of the output in section &<<SECTrepeats>>&. More than one
bar of music may appear between the items. The &%[all]%& directive is not used
if the piece ends with the second time bar. Often these marks are printed
above the top stave of a score only. If parts are to be extracted from a score,
first and second time marks should be specified on stave 0 (&R;
&<<SECTstave0>>&), so that they will be printed above the top stave, whichever
staves are selected for printing.
It is possible to specify vertical movements for 1st and 2nd time bar marks,
to cope with unusual cases. This is done by entering &`/u`& or &`/d`&, followed
by a number, in the directive. The left-hand ends of these marks can also be
moved left and right by means of &`/l`& and &`/r`& qualifiers.
.code
[1st/u4]
.endd
This example specifies a first time bar whose mark is to be 4 points higher
than it would be by default. PMW normally puts the second time mark at the same
level as the first, unless high notes in the second time bar force it upwards.
More than one of these marks can be given in the same bar.
.code
[1st] [2nd] Grg :) | [3rd] GR |
.endd
When this is done, the numbers are printed with a comma and a space between
them. Any movement qualifiers must be specified on the first number. It is also
possible to change the text that is printed by supplying a text string after a
slash.
.code
[1st/"primero"]
.endd
If there are several marks in the same bar, separate strings can be supplied
for each of them. The font size is set by the &%repeatbarfont%& directive,
which also sets the default font.
.subsection "[All]"
See the immediately preceding section.
.subsection "[Alto]"
.index "&%[alto]%&"
This specifies a C clef with its centre on the third stave line (&R;
&<<SECTclef>>&).
.subsection "[Assume]"
.index "&%[assume]%&"
.index "clefs" "assuming"
When an overprinted stave contains a sequence of skipped bars (see &%[skip]%&),
the clef, key signature, or time signature for its partner stave may have
changed before the skipping stave resumes. The &%[assume]%& directive can be
used to set these things without causing anything to be printed.
.code
[skip 60] [assume bass 0] gbc |
.endd
This example has the effect of changing the stave into the bass clef so that
`gbc' are printed in this clef, and a bass clef is printed at the next start of
line, but no clef is printed where the directive occurs. Similar syntax is used
for setting the key and the time.
.code
[assume key E$]
[assume time 3/4]
.endd
The use of this directive is not confined to overprinted staves.
.subsection "[Baritone]"
.index "&%[baritone]%&"
This specifies an F clef based on the third stave line (&R; &<<SECTclef>>&).
.subsection "[Barlinestyle]"
.index "&%[barlinestyle]%&"
This directive must be followed by a number, and it sets the bar line style for
subsequent bar lines in the stave (&R; &<<SUBSECTbarlinestyle>>&).
.subsection "[Barnumber]" SUBSECTstavebarno
.index "&%[barnumber]%&"
.index "bar numbers" "requesting"
.index "bar numbers" "suppressing"
.index "bar numbers" "moving"
.index "bar numbers" "forcing"
.index "numbering bars"
The heading directive &%barnumbers%& (&R; &<<SUBSECTheadbarno>>&) is used to
request automatic bar numbering. The stave directive &%[barnumber]%& is used to
control the printing of numbers for individual bars. If &%[barnumber]%& appears
without any arguments, a number is printed for the current bar, independently
of the overall setting. The size of font used and whether or not the number is
printed in a box or ring is controlled by the heading directive. (The default
is not to use boxes, and the default size is 10 points.)
The position of the bar number can be altered by following the directive with a
slash, one of the letters &`l`&, &`r`&, &`u`&, or &`d`&, and a number. This is
sometimes necessary when there are notes on high ledger lines at the start of a
numbered bar.
.code
[barnumber/l10/d5]
.endd
This example prints a number on the current bar, 10 points to the left and 5
points down from where it would appear by default. If &%[barnumber]%& appears
followed by the word `off', no bar number is printed for the current bar, even
if the heading directive implies there should be one.
.subsection "[Bass]"
.index "&%[bass]%&"
This specifies a bass clef, that is, an F clef on the fourth stave line (&R;
&<<SECTclef>>&).
.subsection "[Beamacc]"
.index "&%[beamacc]%&"
This directive causes the next beam to be drawn as an accelerando beam (&R;
&<<SUBSECTaccritbeams>>&).
.subsection "[Beammove]"
.index "&%[beammove]%&"
.index "beaming" "moving a beam"
This directive, which takes a single number as its argument, causes the
following beam to be moved vertically without altering its slope. A positive
number moves it upwards, and a negative one downwards. An attempt to move a
beam too near the noteheads may give strange results. Use of this directive is
preferable to adjusting the stem length of one or more notes in the beam,
because it is not always clear which notes in the beam are those whose stems
control the beam position.
.subsection "[Beamrit]"
.index "&%[beamrit]%&"
This directive causes the next beam to be drawn as an ritardando beam (&R;
&<<SUBSECTaccritbeams>>&).
.subsection "[Beamslope]"
.index "&%[beamslope]%&"
.index "slope of beams"
.index "beaming" "slope"
PMW contains rules for choosing the slope of a beamed group which usually have
the right effect. However, it is possible to override them by means of the
&%[beamslope]%& stave directive. This directive takes as its argument a number
specifying the slope of the next beamed group on the current stave.
.code
[beamslope 0.2] g-g-
[beamslope 0] c-g-
[beamslope -0.1] g-c'-
.endd
Positive slopes go upwards to the right, negative ones downwards. A slope of
zero specifies a horizontal beam. The values given are in the conventional form
for gradients, with a slope of 1.0 giving an angle of 45 degrees. When a beam's
slope is specified explicitly, this overrides the setting of the maximum beam
slope (see &%maxbeamslope%&). When a beam has notes on either side of it, it
may not be possible to use the specified slope because of the position of the
notes. In this case, the default rules come into play again and a smaller slope
is chosen.
.subsection "[Bottommargin]"
.index "&%[bottommargin]%&"
.index "page" "bottom margin"
.index "margin" "bottom"
This directive provides a way of changing the value given by the
&%bottommargin%& heading directive for a single page only. If there is more
than one occurrence on the same page, the last value is used.
.code
[bottommargin 30]
.endd
This example, which may appear in any bar on the page, sets the margin for that
page to 30 points.
.subsection "[Bowing]"
.index "&%[bowing]%&"
.index "bowing marks"
String bowing marks are normally printed above the stave. The &%[bowing]%&
directive is provided for changing this. It must be followed by one of the
words `above' or `below'.
.subsection "[Breakbarline]"
.index "&%[breakbarline]%&"
An occurrence of this directive causes the bar line at the end of the current
bar not to be extended downwards onto the stave below, unless it is at the end
of a system. See also &%[unbreakbarline]%&.
.subsection "[Cbaritone]"
.index "&%[cbaritone]%&"
This specifies a C-clef on the 5-th stave line (&R; &<<SECTclef>>&).
.subsection "[Comma]"
.index "&%[comma]%&"
.index "pause" "comma"
The &%[comma]%& directive inserts a comma &{~N|{}& pause mark above the
current stave. See also &%[tick]%&.
.subsection "[Contrabass]"
.index "&%[contrabass]%&"
This specifies a bass clef with a little `8' printed below it (&R;
&<<SECTclef>>&).
.subsection "[Copyzero]"
.index "&%[copyzero]%&"
.index "stave zero"
This directive takes a dimension as an argument, and adjusts the vertical level
of any stave zero material in the current bar when stave zero (&R;
&<<SECTstave0>>&) is printed at the level of the current stave.
.code
[copyzero 4]
.endd
This example raises the stave zero material in the current bar by 4 points.
It is not necessary for there to be an instance of the &%copyzero%& heading
directive specifying the current stave for &%[copyzero]%& to take effect. In
the default case, &%[copyzero]%& takes effect whenever the stave in which it
appears is the top stave of a system.
When first and second time bar marks are specified in stave zero, and there
is a need to adjust their height for certain staves, it should be noted that
the marks are drawn when the bar in which their end point is determined is
processed. Consequently, it is that bar in which &%[copyzero]%& should appear.
The same applies to slurs and lines (though they are rarely specified in stave
zero).
.subsection "[Couple]"
.index "&%[couple]%&"
.index "coupled staves"
.index "treble/bass coupling"
.index "bass/treble coupling"
.index "staves" "coupled"
A single music part, notated as one PMW stave, can be spread across a pair of
bass and treble staves when actually printed. This is commonly found in
keyboard music. If &%[couple up]%& is given on a bass clef stave, it specifies
that notes higher than middle C should be printed on the stave above, which is
assumed to be a treble clef stave. Similarly, &%[couple down]%& couples a
treble clef stave to the bass clef stave below, and there is also &%[couple
off]%& to terminate the coupling. A stave can be coupled only one way at once.
However, there is no reason why a pair of staves should not both be
simultaneously coupled to each other. An example of music printed in this way
is given in section &<<SUBSECTcoupleintro>>&.
&*Warning 1:*& Coupling only works properly if the upper stave is using the
treble clef and the lower one is using the bass clef.
&*Warning 2:*& Coupling requires the spacing between the staves to be a
multiple of 4 points if it is to work properly in all circumstances. The
default spacing of 44 points satisfies this requirement.
Occasionally it is desirable to cause individual notes that would not normally
be printed on the coupled stave to be moved onto it. A notation for this is
provided in the form of the &`\c\`& note option.
.code
[treble 1 couple down] g-e-c-\c\g`-
.endd
The middle C in this beam would normally remain on the original (upper) stave,
but the use of &`\c\`& forces it down onto the lower one. If the &`\c\`& option
is used when coupling is not in force, the note is coupled upwards if it is on
or above the centre line of the stave; otherwise it is coupled downwards. When
coupling is in force, there is a note option &`\h\`& (for `here') that prevents
a note that would normally move onto the other stave from doing so.
.subsection "[Cue]" SUBSECTcue
.index "&%[cue]%&"
.index "cue bars"
The directive &%[cue]%& causes the subsequent notes of the current bar, on the
current stave, to be printed using the cue note font, instead of the normal
font. Typically, the note spacing needs to be reduced as well. This feature is
normally used only when single parts are being printed; the conditional
features of PMW can be used to control this, as in the following example:
.code
[35] R! | @ 35 bars rest
if score
R! | @ if full score, rest bar
else
[cue] [ns *1/2] @ cue bar with halved note spacing
"[flute]"/a @ print above stave
g a-g-f-e- e
| [ns] @ restore note spacing at next bar start
fi @ end conditional section
.endd
The effect of the &%[cue]%& directive is automatically cancelled at the end of
the bar in which it appears, but it can also be explicitly cancelled by
&%[endcue]%&.
.index "&%endcue%&"
.index "ornaments" "printing"
In addition to their use for cue bars, &%[cue]%& and &%[endcue]%& can be used
for printing complicated ornaments or optional notes. (Another way of handling
optional notes is to use the &`\sm\`& note option &R; &<<SUBSECTnoteheads>>&.)
.index "optional notes"
When cue notes are dotted, the dots are spaced horizontally in proportion to
the size of the cue notes. However, when printing small optional notes with
full-sized notes directly above or below on the same stave, it is sometimes
better to arrange for all the dots to be aligned. You can request this by
specifying &%[cue/dotalign]%&, which increases the space between the cue notes
and their dots.
.subsection "[Deepbass]"
.index "&%[deepbass]%&"
This specifies an F clef based on the fifth stave line (&R; &<<SECTclef>>&).
.subsection "[Dots]"
.index "augmentation dots" "inverted"
.index "&%[dots]%&"
Augmentation dots are normally printed in the space above when a note appears
on a stave line. The directive &%[dots]%& is provided for changing this. It
must be followed by one of the words `above' or `below', and it applies to all
subsequent notes on the stave, with the exception of certain adjacent notes in
chords. Note that the position of an individual note's dot can be overridden by
means of the &`\:\`& note option (&R; &<<SUBSECTnoteexpr>>&).
.subsection "[Doublenotes]" SUBSECTstavedoublenotes
.index "&%[doublenotes]%&"
.index "doubling note lengths"
.index "notes" "doubling length"
This directive causes the length of subsequent notes in the current stave to be
doubled. Unlike the heading directive with the same name (&R;
&<<SUBSECTdoublenotes>>&), it does not affect time signatures. It is, however,
cumulative with the heading directive and with &%[halvenotes]%&
(&R; &<<SUBSECTstavehalvenotes>>&).
.subsection "[Draw]"
The &%[draw]%& directive is described in chapter &<<CHAPdraw>>&.
.subsection "[Endcue]"
See &%[Cue]%& (&R; &<<SUBSECTcue>>&) above.
.subsection "[Endline]"
See &%[line]%& (&R; &<<SUBSECTline>>&) below.
.subsection "[Endslur]"
See &%[slur]%& (&R; &<<SUBSECTslurs>>&) below.
.subsection "[Endstave]"
.index "&%[endstave]%&"
The data for each stave of music must end with the directive &%[endstave]%&.
This can be followed only by the start of a new stave or the start of a new
movement or by the end of the file.
.subsection "[Ensure]"
.index "&%[ensure]%&"
.index "spacing" "ensuring sufficient"
The &%[space]%& directive always inserts extra space before a note. Sometimes
all that is needed is an assurance that a certain amount of space is available,
for example, when using the drawing facilities to print marks that PMW does not
know about. The &%[ensure]%& directive provides this facility. If the requested
amount of space is not available between the previous note (or the start of the
bar) and the next note (or the end of the bar), a suitable amount of space is
inserted.
.code
G [ensure 32] G
.endd
In this example, if this is the only stave, because minims are normally printed
20 points apart, the &%[ensure]%& directive has the effect of inserting 12
points of space. However, if there is another stave containing four crotchets,
which print 16 points apart, there is already 32 points between the two minims,
and no extra space is inserted. The additional space is inserted immediately
before the note, thus moving it further away from any other items, such as
clefs, which may lie between it and the previous note.
.subsection "[Fbfont]"
.index "&%[fbfont]%&"
.index "fonts" "default for figured bass"
.index "figured bass" "default font"
The default typeface for figured bass text is roman. It can be changed for an
individual stave by means of the &%[fbfont]%& directive. This directive takes
as its argument one of the standard font names.
.code
[fbfont extra 3]
.endd
This example assumes that the third extra font has been suitably defined for
use in figured bass text. In any given text string it is always possible to
change typeface by using the appropriate escape sequence.
.subsection "[Fbtextsize]"
.index "&%[fbtextsize]%&"
This directive must be followed by a number in the range 1 to 20. It selects
the default size to be used for figured bass text on the current stave. The
actual font sizes that correspond to the twenty available sizes are set by the
&%textsizes%& heading directive. If this directive is not used, the size used
is the one set by the &%fbsize%& heading directive (which is a different
parameter from any of the sizes set by &%textsizes%&). &%[Fbtextsize]%& is
normally needed only if you want different sizes of figured bass text on
different staves.
.subsection "[Footnote]" SUBSECTfootnote
.index "&%[footnote]%&"
.index "footnotes"
This directive usually defines a text string that is printed below the bottom
system of the page on which the current bar is printed. However, the syntax of
&%[footnote]%& is the same as the syntax of the &%heading%& and &%footing%&
directives (&R; &<<SUBSECTheading>>&), and therefore &%[footnote]%& may
alternatively define a drawing. Footnotes are different from footings, in that
the space in which they are printed is taken from the normal page length;
consequently the bottom system of music is printed higher up the page, in order
to leave room for footnotes. If a textual footnote is longer than the line
length, it is automatically split into several lines in the same was as
headings and footings.
.code
[footnote "A close friend of Schumann and Mendelssohn,
Sheffield-born Sterndale Bennett founded the Bach choir,
was for ten years the conductor of the Philharmonic Society,
and in 1866 became principal of the Royal Academy of Music."]
.endd
The initial font is roman, and the default size is 9 points, but this can be
changed by the &%footnotesize%& heading directive. An individual footnote may
override the default by including a number before the text string. If there are
several footnotes on one page, extra vertical white space is left between them.
The default amount of extra space is 4 points, but this can be changed by the
&%footnotesep%& heading directive. If there are several footnotes in one
system, they are ordered by stave, those for the lowest numbered stave being
printed first.
.subsection "[Hairpins]" SUBSECThairpinsstave
.index "&%[hairpins]%&"
.index "hairpin position"
Hairpins (&R; &<<SECThairpins>>&) are normally printed below the stave. The
&%[hairpins]%& directive is provided for changing this for an individual stave.
It must be followed by one of the words `above' or `below'. It can also be
followed by `middle', which causes hairpins to be printed below the stave, half
way between it and the following stave, unless low notes on the upper stave
force them lower still. Hairpins in fixed positions above or below the stave
can be made the default by following `above' or `below' in the &%[hairpins]%&
directive by a dimension.
.code
[hairpins above 10]
.endd
This example specifies that the `sharp end' of hairpins should be positioned 10
points above the top of the stave. Individual hairpins can be moved from this
position by the normal &`/u`& and &`/d`& qualifiers on the angle bracket
characters that specify hairpins. In addition, &`/a`& and &`/b`& can be used
without a dimension to specify the default type of hairpin, whose vertical
position depends on the notes it covers. It is also possible to set up a
default adjustment for variable-position hairpins, by giving a dimension
preceded by &`+`& or &`-`& in the &%[hairpins]%& directive.
.code
[hairpins below -4]
.endd
After this example, all hairpins are positioned as if they were followed by
&`/d4`&. Note the distinction between these two directives:
.code
[hairpins above 8]
[hairpins above +8]
.endd
The former causes all hairpins to be printed 8 points above the stave, whereas
the latter adds 8 points to whatever position PMW computes from the notes
under the hairpin.
.subsection "[Hairpinwidth]"
.index "&%[hairpinwidth]%&"
This directive, which must be followed by a dimension, sets the default width
of the open ends of any subsequent hairpins on the current stave. The overall
default is 7 points. The width of the open end of an individual hairpin can be
set by following the initial &`<`& or &`>`& character with &`/w`& and a
dimension.
.subsection "[Halvenotes]" SUBSECTstavehalvenotes
.index "&%[halvenotes]%&"
.index "halving note lengths"
.index "notes" "halving length"
This directive causes the length of subsequent notes in the current stave to be
halved. Unlike the heading directive with the same name (&R;
&<<SUBSECThalvenotes>>&), it does not affect time signatures. It is, however,
cumulative with the heading directive and with &%[doublenotes]%&
(&R; &<<SUBSECTstavedoublenotes>>&). For example, if there are many bars
consisting mostly of quavers in a stave, using &%[halvenotes]%& saves having to
type hyphens after each lower case note letter. &%[Doublenotes]%& can be used
to restore the previous state.
.subsection "[Hclef]"
.index "&%[hclef]%&"
.index "percussion clef"
This directive causes a percussion `H-clef' to be used on the current stave.
This behaves as a treble clef as far as note positioning is concerned (&R;
&<<SECTclef>>&).
.subsection "[Justify]"
.index "&%[justify]%&"
The justification parameters can be changed by the appearance of this stave
directive. Unlike the heading directive of the same name, it specifies
&'changes'& to the justification parameters, not complete settings. Its effect
lasts only until the end of the current movement. The directive name must be
followed by a &`+`& character (for adding a justification) or a &`-`& character
(for removing a justification) immediately preceding one of the words `top',
`bottom', `left', or `right'. For example, if the last page of a piece uses
only slightly more than half the page depth, and vertical justification is not
wanted, &%[justify -bottom]%& should be included in any bar on that page.
Changes of parameter take effect from the system in which they are encountered,
and persist until a subsequent change. More than one change may be given at
once.
.code
[justify -right -bottom]
.endd
This example might be used in the last system of a piece if the last line and
the last page are both too short to be sensibly justified.
.subsection "[Key]"
.index "&%[key]%&"
.index "key signatures" "changing"
This directive specifies a change of key signature. If this falls at the start
of a system, a cautionary key signature is printed at the end of the previous
line unless the word `nowarn' is included in the directive.
.code
[key E$ nowarn]
.endd
There is also a heading directive, &%nokeywarn%&, for suppressing all
cautionary key signatures. Key signature changes are printed in `modern style'.
That is, unless the new key signature is empty (C major, A minor, the
pseudo-key N, or an empty string from &%printkey%&), all that is printed is the
new signature. If `old style' is required, where the new key signature is
preceded by an explicit cancelling of the old one with naturals, the new
signature should be preceded by a change to a key with an empty signature. For
example, in the default configuration (no &%printkey%& settings):
.code
[key C key A]
.endd
This example prints a number of naturals to cancel the previous signature
before printing three sharps. When a bar starts with a new key signature and a
repeat mark, the order in which these are printed depends on the order in which
they appear in the input.
.code
[key G] (:
.endd
This example causes the key signature to be printed first, followed by the
repeat mark.
.code
(: [key G]
.endd
This example causes the repeat mark to be amalgamated with the previous bar
line, with the key signature following. If, at the same point in the music,
these items appear in different orders on different staves, the repeat sign is
printed first on all staves.
.subsection "[Line]" SUBSECTline
.index "lines, straight"
.index "straight lines"
.index "line over notes"
.index "line under notes"
.index "&%[line]%&"
.index "&%[xline]%&"
.index "bracket, horizontal"
.index "horizontal brackets"
There are a number of situations where it is required to draw a straight line
above or below a sequence of notes, with or without small `jogs' at the ends.
The directive &%[line]%& works exactly like &%[slur]%& (&R;
&<<SUBSECTslurs>>&), except that what is drawn is a straight line with a
vertical `jog' on each end, giving a sort of horizontal or near-horizontal
bracket. The angle of the line depends on the `shape' of the note sequence that
is above or below. The end of the line is marked by &%[endline]%& or &%[el]%&
and there are the same options as for &%[slur]%& &-- for example, &`/b`&,
&`/u`&, &`/d`&, &`/rr`&, etc. The &`/i`& and &`/ip`& qualifiers are available,
and cause a dashed or dotted line to be drawn, respectively. The &`/co`& and
&`/ci`& options affect the length of the `jogs'; however, the other options
starting with &`/c`&, which for a slur move the Bézier curve control
points, are ignored for lines. The following options can also be given with
&%[line]%& in addition to those available for &%[slur]%&:
.display
&`/ol`& requests that the line be `open on the left'
&`/or`& requests that the line be `open on the right'
.endd
An `open' line has no `jog' on the end. Unlike slurs, lines are by default
always positioned above or below the stave itself, never actually overprinting
it. However, like slurs, they can be positioned at fixed positions above or
below the staves or at the underlay or overlay levels. The fixed positions
refer to the main part of the line, excluding the jogs, if any. The
&%[linegap]%& directive can be used to leave gaps in lines and cause drawing or
printing to take place in the gap. For handling complicated overlapping lines,
there is an &%[xline]%& directive that corresponds to &%[xslur]%&, and lines
can also be `tagged' like slurs (&R; &<<SUBSECTtaggedslurs>>&). The &`/=`&
option that is used in &%[endslur]%& to identify tagged slurs is also available
in &%[endline]%& for tagged lines.
.subsection "[Linegap]" SUBSECTlinegap
.index "&%[linegap]%&"
.index "gaps" "in lines"
.index "lines, gaps in"
The directive &%[linegap]%& requests that a gap be left in a line that was set
up by the &%[line]%& directive. The following options are provided:
.ilist
&`/=`&<&'letter'&> is used to identify which line is being referred to, in
exactly the same way as it is used on the &%[endline]%& directive.
.next
&`/w`& followed by a number is used to specify the width of the gap; if it is
not given, a width of four points is used, unless there is an associated text
string (see below). The width is measured along the line. If a gap passes
either end of the line, the ending jog is never drawn, even if specified.
.next
&`/h`& specifies that the centre of the gap is to be halfway along the line. It
can be followed by a number in the range 0&--1.0 to specify a different
fraction of the length; for example, &`/h0.75`& specifies that the centre of
the gap is to be three-quarters of the way along the line. If &`/h`& is not
specified, the centre of the gap is aligned with the centre of the notehead of
the next note, or with the barline if there are no more notes in the bar.
If &`/h`& is used when a line is split between two systems, it is applied to
whichever part of the line the &%[linegap]%& directive falls in.
.next
&`/l`& and &`/r`& are used to move the position of the gap to the left or to
the right by a given number of points.
.next
.index "drawing facility" "in line gaps"
&`/draw`& <&'arguments'&> <&'name'&> specifies that the named drawing is to be
associated with the gap. &*Warning*&: take care not to leave out the &`/`& by
mistake. If a space is used instead, the drawing is no longer associated with
the line gap, but with the following note. When defining drawings that are to
be used with line gaps, it is useful to know that the width of lines drawn by
&%[line]%& is 0.3 points. The drawing code is obeyed with the origin of the
coordinate system set to the centre of the gap, and the variables &%linegapx%&
and &%linegapy%& containing the coordinates of the start of the right-hand
portion of the line relative to this origin. For a horizontal line,
&%linegapx%& is half the width of the gap, and &%linegapy%& is zero.
.next
.index "text" "in line gaps"
&`/"`&&'text'&&`"`& associates the text with the gap.
.code
[linegap/"\it\ad lib."]
.endd
This example prints the italic text &'ad lib.'& in the gap. The default font is
roman. If no width for the gap is given by the &`/w`& option, the width is set
to the length of the text plus a little bit. The text is printed centred in the
gap, rotated so that it has the same slope as the line. The text option must be
the last option for &%[linegap]%& because any further options are taken as
options that apply to the string. The following text options are available:
&`/u`&, &`/d`&, &`/l`&, &`/r`&, &`/s`&, &`/box`&, and &`/ring`&. The movements
are relative to a coordinate system whose `horizontal' axis lies on the line
joining the ends of the gap.
.endlist
A drawing or text string can be associated with the start or end of a line by
using &`/h0`& or &`/h1`&, respectively. To associate a drawing or string with a
particular point on a line, but without leaving a gap, &`/w0`& can be used. Any
number of gaps may be specified for a single line. They are processed from left
to right, and all the drawings for a single line on one system are processed
together in succession. Here is an example of a gap that is used to print some
text in the middle of a horizontal line:
.code
[line/a/h linegap/h/"unis. \it\ad lib"] efge | bag [el] r |
.endd
.music "music28" 36 4,-18
Because the &`/h`& option is used, the &%[linegap]%& directive can be given
right at the start of the line. Do not confuse &`/h`& as used with &%[line]%&,
where it means &'horizontal'&, with &`/h`& as used with &%[linegap]%&, where it
means &'halfway'&. This latter usage was chosen to be similar to the &`/h`&
option on hairpins.
.index "pedal marks"
Another use of the &%[linegap]%& facility is for drawing conventional piano
pedal marks. Because these appear often in a piece, it is sensible to
define macros for the relevant directives.
.code
draw blip
linegapx linegapy moveto
0 linegapx 2 mul lineto
linegapx neg linegapy neg lineto
0.3 setlinewidth stroke
enddraw
draw ped
0 0 moveto "\**163\ " show
enddraw
[stave 1 bass 0]
r- &ped %a &blip b-_; b-; e &blip a`-_ | a`- G` &ep r-r |
.endd
.music "music29" 40 0,-16
The &%ped%& macro starts the line, which is specified as horizontal and open
(that is, no jog) on the left. It is also moved down four points, to allow for
the height of the &{{£}}& text, which is printed at the start by means of
the immediately following &%[linegap]%& directive. The &%blip%& macro creates a
gap in the line at the next note, and causes a `blip' to be drawn. Notice that
the size of the blip is relative to the width of the gap. Thus the same drawing
could be used for different sized blips if required. The &%ep%& macro ends the
line. In simple cases it would be just as quick to type &%[el]%&, the
abbreviation for &%[endline]%&, but using the macro makes it clear that it is a
pedal line that is terminating as well as using the &`/=`& option to specify
exactly which line is being referred to.
.subsection "[Mezzo]"
.index "&%[mezzo]%&"
This specifies a C clef with its centre on the second stave line (&R;
&<<SECTclef>>&).
.subsection "[Midichannel]" SUBSECTmidichannelST
.index "&%[midichannel]%&"
.index "MIDI" "changing channel"
The &%[midichannel]%& directive can be used to change the MIDI channel that the
current stave uses, from the next note onwards. It can also be used to change
the voice allocation of the new channel at the same time.
.code
[midichannel 5]
[midichannel 6 "flute"]
.endd
The voice change takes effect at the time of the next note (or rest), and of
course it affects any other staves that may be using the same channel.
A relative volume may be given after the voice name, separated by a slash.
.code
[midichannel 1 "trumpet"/12]
.endd
See the &%midichannel%& directive for how to set up channels at the start of a
piece.
.subsection "[Midipitch]" SUBSECTmidipitch
.index "&%[midipitch]%&"
.index "MIDI" "changing pitch"
The &%[midipitch]%& directive is used to alter the MIDI playing pitch for a
stave, for the purpose of selecting a different untuned percussion instrument.
Its argument takes the same form as the final argument of the &%midichannel%&
heading directive.
.code
[midipitch "bongo"]
.endd
To stop forcing the playing pitch on a stave, specify an empty string in
quotes. See &%[printpitch]%& for an alternative way of handling MIDI untuned
percussion.
.subsection "[Miditranspose]"
.index "&%[miditranspose]%&"
.index "transposition" "for playing"
The &%[miditranspose]%& directive can be used to change the playing
transposition of a stave, which is initially set from the &%miditranspose%&
heading directive. The value given in &%[miditranspose]%& is added to the
current playing transposition for the stave at the point it is encountered. One
use of this is to arrange for &'8va'& passages to be played at the correct
pitch. Changes made by &%[miditranspose]%& do not persist beyond the end of the
movement.
.subsection "[Midivoice]" SUBSECTmidivoice
.index "&%[midivoice]%&"
.index "MIDI" "changing voice"
The &%[midivoice]%& directive can be used to change the MIDI voice without
changing the channel.
.code
[midivoice "french horn"]
.endd
Note that this will affect any other staves that are using the same channel. If
&%[midivoice]%& with different arguments appears in multiple staves that are
using the same channel, the result is undefined. If you want different staves
to play using different voices, you must allocate them to different channels,
using either &%midichannel%& at the start of the piece, or &%[midichannel]%& on
each stave.
.subsection "[Midivolume]" SUBSECTmidivolumeST
.index "&%[midivolume]%&"
.index "MIDI" "changing volume"
This directive can be used to change the relative MIDI playing volume of a
particular stave part way through. Its single argument is number between 0 and
15, specifying the new relative volume for the current stave.
.subsection "[Move]"
.index "&%[move]%&"
.index "moved notes"
.index "notes" "moved"
.index "clefs" "moving"
If the &%[move]%& directive is followed by a single number, it causes the next
non-textual thing that is to be printed on the current stave, whether it be a
note or something else, to be moved horizontally by that number of points,
without affecting the position of anything else in the bar, except slurs or
ties that are attached to a moved note and any accents or ornaments that a note
may have. If the number is positive, movement is to the right; if negative, it
is to the left. Certain items can also be moved vertically, by specifying a
second number after a comma. The second argument may also be a positive or
negative number; positive movement is upwards. If two or more &%[move]%&
directives appear in succession on a stave, they act cumulatively.
.code
[move -2,4 treble]
.endd
This example prints a mid-stave clef two points to the left and four points
higher than normal. Vertical movement does not apply to notes and rests, and is
ignored if specified. (See section &<<SUBSECTchrele>>& for ways of moving rests
vertically.) When staves of different sizes are in use, any vertical movement
specified by &%[move]%& is scaled for the current stave, but horizontal
movements are not scaled. However, there is a related directive called
&%[rmove]%& that scales in both directions. Features such as text and slurs
have their own syntax for vertical movement.
Those items to which the &%[move]%& directive applies are: clefs, key
signatures, time signatures, dotted bar lines, repeat marks, caesuras, commas,
ticks, notes, and rests (for the last two, horizontal movement only). If
&%[move]%& directive is present in the first bar of a sequence of rest bars and
they are packed up into a single multi-bar rest, the &%[move]%& is applied to
the number that is printed above the long rest sign. See also &%[ensure]%&,
&%[rmove]%&, &%[rsmove]%&, &%[rpace]%&, &%[smove]%& and &%[space]%&.
.subsection "[Name]" SUBSECTname
.index "&%[name]%&"
.index "naming staves"
.index "staves" "names for"
The &%[name]%& directive has two entirely separate functions. If its arguments
are one or more strings or calls to drawing functions, it is an alternative way
of defining text and/or drawings to be printed at the left-hand side of the
stave. This can be useful when portions of the text are being skipped
conditionally.
.code
[stave 1 treble 1]
if score
[name "Flute" "Fl."]
fi
.endd
This example prints the name in the score, but not in the part. In this form,
the arguments for &%[name]%& are exactly the same as the text and drawing
arguments of the &%[stave]%& directive (&R; &<<SUBSECTstave>>&). Each
occurrence of &%[name]%& adds to the list of strings and drawings.
The second form of &%[name]%& is used to change what is printed at the start of
a stave part-way through a piece, for example, if a double choir becomes a
single choir, or &'vice versa'&. In this usage, its argument is a single
number, which selects which string and/or drawing is to be used on the current
and subsequent staves. Each `item' for printing at the start of a stave
consists of a string or a call to a drawing function, or both, and the items
are numbered starting at one. For example, a stave might start with:
.code
[stave 2 "Alto" "A" "Alto I"]
.endd
By default in the first system the stave is labelled `Alto', and in all
subsequent systems it is by default labelled `A'. However, if &%[name 3]%& is
used at any point, the system in which it appears, and any subsequent ones,
use the text `Alto I' for this stave. A number greater than the number of
items can be used to suppress printing of anything at all; alternatively, empty
strings can be used.
.subsection "[Newline]"
.index "&%[newline]%&"
.index "forcing new lines"
The directive &%[newline]%& can be used to force a new line (system) of music
to be started for a particular bar. It should normally be at the start of a
bar, but it need only appear in one stave that is selected for printing. If a
stave is not selected for printing, an appearance of &%[newline]%& within it is
ignored. See also the &%layout%& heading directive.
.subsection "[Newmovement]" SUBSECTnewmovement
.index "&%[newmovement]%&"
.index "movement" "specifying"
This directive must always appear immediately after an &%[endstave]%&
directive. It signals the start of a new section of music, and is followed by
an optional set of new heading directives, and then more staves of data.
When &%[newmovement]%& is used without an argument, PMW looks to see if it can
fit the new heading lines (if any) and the first system of the new movement
onto the current page. If it cannot, a new page is started. In the case of a
system consisting of one stave only, PMW tries to fit two systems into the
current page, because a single line of music at the bottom of a page does not
look good. By specifying &%[newmovement newpage]%&, you can force PMW always to
start a new page. You can also specify &%[newmovement thispage]%& to stay on
the current page when only a single stave of music will fit.
Page headings specified in the new movement completely replace those set up in
the previous movement, but if nothing is specified, the old page headings
continue. This means that, for example, if page numbers are specified in the
first movement by a page heading, they are printed on all subsequent pages,
including pages that are the start of new movements. Section
&<<SUBSECTmovement>>& contains more details about the interaction of headings
and footings with new movements.
When a new movement starts at the top of a page, any page headings that are in
force (either carried over or newly specified) are printed, in addition to the
headings for the movement. Sometimes, however, it is required to suppress these
page headings, for example if they are being used to print the name of the
movement at the head of pages. This can be done by adding the keyword
`nopageheading' to the &%[newmovement]%& directive.
.code
[newmovement nopageheading]
.endd
This option can be used with or without the `newpage' option; it takes effect
only if the new movement actually starts at the top of a page.
.index "footing" "at end of movement"
The &%lastfooting%& directive sets up footings for the final page of a piece.
In some circumstances it may be desirable to print a special footing at the end
of an individual movement, and this can be done by specifying &%[newmovement
uselastfooting]%&. In this case, if the new movement starts on a new page, the
footing on the previous page is the &%lastfooting%& from the previous movement,
if present. To force a new page and cause the &%lastfooting%& text to be
printed, use:
.code
[newmovement newpage uselastfooting]
.endd
Use of this option does not cancel the &%lastfooting%& text; it is carried
forward to the new movement, but of course can be replaced by a new
&%lastfooting%& directive in the new movement.
Another possible form of the directive is &%[newmovement thisline]%&, which is
useful in some specialized circumstances. It has the effect of starting a new
movement without advancing the current vertical position on the page. If there
are no headings, the first system of the new movement prints with its first
stave at the same level as the first stave of the last system of the previous
movement. Two different uses are envisaged for this:
.ilist
Music for church services often contains very short sections of one or two
bars, and it is sometimes desirable to print two of them side by side.
.next
.index "incipits"
One style of printing incipits has white space between the incipit staves and
the start of the main system.
.endlist
In both cases it is necessary to specify left justification for the last system
of the first movement, and right justification for the first system of the
second.
.subsection "[Newpage]"
.index "&%[newpage]%&"
.index "forcing new pages"
The directive &%[newpage]%& can be used to force a new page of music to be
started at a particular point. It should always be at the start of a bar, but
need appear in only one stave. If a stave is not selected for printing,
however, an appearance of &%[newpage]%& within it is ignored. See also the
&%layout%& heading directive.
.subsection "[Nocheck]" SUBSECTstavenocheck
.index "&%[nocheck]%&"
.index "bar lengths"
.index "odd bar lengths"
.index "variable bar lengths"
It is sometimes useful to disable PMW's checking of bar lengths (at the start
or end of a piece, for example). The directive &%[nocheck]%& suppresses this
check, for the current bar only. (See the heading directive of the same name
for suppressing the check globally.) You can omit &%[nocheck]%& from completely
empty bars and bars in which nothing appears other than a whole bar rest
indication.
.subsection "[Noclef]"
.index "&%[noclef]%&"
.index "invisible items" "clefs"
.index "clefs" "invisible"
This specifies an invisible clef (&R; &<<SECTclef>>&). It acts as a treble clef
as far as note pitch is concerned. It is useful when setting incipits where no
clef is required. It is also useful when setting fragments and musical
examples.
.subsection "[Nocount]"
.index "&%[nocount]%&"
.index "uncounted bars"
.index "bar numbers" "counting"
.index "counting bars"
.index "bar counting"
In certain circumstances it may be necessary to prevent a bar in the middle of
a piece from being counted for the purposes of bar numbering, for example, when
using an `invisible bar line' to make PMW split a bar over two systems. Also,
if the first bar of a piece is incomplete, it is conventional not to include it
in the bar numbering. The directive &%[nocount]%& causes the current bar not to
be counted; such a bar never has its number printed. This directive need appear
in only one stave. If it appears in a bar whose contents are repeated by means
of a number in square brackets, all the repeated bars are uncounted. Section
&<<SECTident>>& explains how PMW identifies uncounted bars if it needs to refer
to them, for example, in an error message.
.subsection "[Noteheads]" SUBSECTnoteheadstave
.index "&%[noteheads]%&"
.index "noteheads" "invisible"
.index "noteheads" "alternative shapes"
.index "shape of noteheads"
.index "invisible items" "noteheads"
.index "harmonics"
.index "`direct' character for noteheads"
.index "noteheads" "`direct' character"
.index "pitch, indicating without duration"
Three alternative notehead shapes are supported: diamond-shaped for string
harmonics, cross-shaped, and invisible (that is, no noteheads at all). The
character &{{²}}& (which is called `direct') is sometimes seen on a stave
in musical extracts and examination papers to indicate a pitch without
specifying a time value. This character is in PMW's font and can be positioned
as a text item, and it is also available as an exotic fifth form of notehead.
It is also possible to print any of the noteheads without stems. The stave
directive &%[noteheads]%& is used to control these features. It must be
followed by one of the words `normal', `harmonic', `cross', `none', `direct',
or `only', and sets the style for subsequent notes.
For individual notes, the option settings &`\nh\`& and &`\nx\`& can be used to
override the default and force a harmonic (diamond) or cross-shaped notehead.
This makes it possible to have different noteheads within a single chord.
.code
a b [noteheads cross] c d | e\nh\ [noteheads normal] f
.endd
This example prints the second two notes in the first bar with cross-shaped
noteheads, and the first note in the second bar as a diamond. For printing
stemless notes, the directive &%[noteheads only]%&
.index "stemless notes"
.index "stems" "invisible"
.index "invisible items" "stems"
requests that all stems and beams be suppressed until another occurrence of
&%[noteheads]%& with a argument other than `only'. Because this is quite a
long directive to type, and one which might appear frequently in some music,
abbreviations are provided as follows:
.itable none 0 0 3 30 left 80 left 200 left
.row &`[o]`& "is equivalent to" "&`[noteheads normal]`&"
.row &`[h]`& "is equivalent to" "&`[noteheads harmonic]`&"
.row &`[x]`& "is equivalent to" "&`[noteheads cross]`&"
.row &`[z]`& "is equivalent to" "&`[noteheads none]`&"
.endtable
.index "ledger lines" "with alternate noteheads"
When &%[noteheads direct]%& is selected (to print notes as &{{²}}&),
ledger lines are printed as normal, but no stems or beams are printed. When no
noteheads are being printed (&%[noteheads none]%&), breves and semibreves are
completely invisible, but stems and beams are still drawn for other notes,
though no ledger lines are printed. See &%[notes]%& for a way of suppressing
noteheads &'and'& stems, but still drawing beams. With cross-shaped noteheads
there is no difference between the appearance of a crotchet and a minim. Breves
are distinguished from semibreves only when normal noteheads are being
printed.
.subsection "[Notes]"
.index "&%[notes]%&"
.index "invisible items" "noteheads"
.index "invisible items" "stems"
.index "stems" "invisible"
.index "noteheads" "invisible"
.index "beams without notes"
The directive &%[notes off]%& suppresses the printing of notes and their stems
(and ledger lines). However, if the notes would have been beamed, the beams are
still drawn. This can be used for placing beams in non-standard places. In
addition, if the ornaments or fermatas are specified, these are also printed.
Making the note or chord at the end of a tie invisible is a convenient way to
print `hanging' tie marks (&R; &<<SUBSECThangingties>>&). The effect of
&%[notes off]%& is reversed by &%[notes on]%&. See &%[noteheads]%& for a way of
suppressing noteheads while leaving both stems and beams.
.index "&%midifornotesoff%&"
.index "MIDI" "for invisible notes"
Notes that are suppressed with &%[notes off]%& are by default omitted from MIDI
output as well as from PostScript output. This can be changed by including the
heading directive &%midifornotesoff%&.
.subsection "[Notespacing]" SUBSECTstavens
.index "&%[notespacing]%&"
.index "&%[ns]%&"
.index "notes" "spacing"
.index "spacing" "notes"
The &%[notespacing]%& directive (abbreviation &%[ns]%&) specifies a temporary
change in the horizontal distances between notes. Internally, note spacings are
held to an accuracy of 0.001 of a point. If the directive is given with no
arguments, it resets to the values that were current at the start of the
movement. The most commonly used form of &%[notespacing]%& is the one that
changes each element in the note spacing table by a multiplicative factor. This
is done by following the keyword by an asterisk and a number (possibly
containing a decimal point) or a rational number, as in the following examples:
.itable none 0 0 2 80 left 300 left
.row "&`[ns *0.75]`&" "change to three-quarter spacing"
.row "&`[ns *3/4]`&" "change to three-quarter spacing"
.row "&`[ns *2]`&" "double the spacing"
.row "&`[ns *1.5]`&" "multiply the spacing by one and a half"
.row "&`[ns *3/2]`&" "multiply the spacing by one and a half"
.endtable
Alternatively, the directive name can be followed (in the brackets) by up to
eight numbers, which give the &'change'& in the note spacing, in points, for
notes of different lengths, starting with the value for breves. (See the
&%notespacing%& heading directive.) Trailing zero values can be omitted.
.code
[notespacing 0 0 3 -2]
.endd
This example specifies that minims are to be printed three points further
apart and crotchets are to be two points closer together. The
&%[notespacing]%& directive takes effect for the remainder of the current bar
on the stave where it occurs, and for all the notes in the same bar on staves
of higher number (that is, those that print below it on the page), and then for
all notes in subsequent bars. Of course, this may have the effect of moving
notes in previous staves, in order to keep the music properly aligned.
&*Warning*&: To avoid unexpected effects, &%[notespacing]%& is best used only
at the beginnings of bars, and preferably in the top part. When changing the
spacing for a single bar, it is all too easy to reset the note spacing within
the bar, for example:
.code
[notespacing *0.8] a-b- g d [ns] |
.endd
This may behave strangely because PMW processes bars stave by stave. It will
therefore obey the resetting directive before considering the other staves, and
only one bar on one stave will have been processed with the altered spacing.
It is usually better to use this form:
.code
[notespacing *0.8] a-b- g d | [ns]
.endd
In this case, the subsequent staves are also processed with the reduced
spacing. If a change of note spacing is always required, whatever combination
of staves is selected for printing, it can be given on stave 0.
.subsection "[Octave]" SUBSECToctave
.index "transposition" "octave"
.index "&%[octave]%&"
When a part is in the treble clef it may be easier to enter if the letters
C&--B represent the octave starting at middle C rather than the one below it
(which is the default). The &%[octave]%& directive, which must be followed by a
number, requests transposition by the number of octaves given. The octave can
also be specified at the same time as the clef (&R; &<<SECTclef>>&).
Each octave setting replaces the previous one; they are not cumulative. The
argument for &%[octave]%& may be positive or negative:
.display
&`[octave -1] `& C is the note two octaves below middle C
&`[octave 0] `& C is the note one octave below middle C
&`[octave 1] `& C is middle C
.endd
Octave transposition is in addition to any general transposition that is in
force.
.subsection "[Olevel] and [olhere]"
.index "&%[olevel]%&"
.index "&%[olhere]%&"
These directives control the position of the overlay level in exactly the same
way as &%[ulevel]%& and &%[ulhere]%& for the underlay level (&R;
&<<SUBSECTulevelhere>>&).
.subsection "[Oltextsize]"
.index "&%[oltextsize]%&"
This directive must be followed by a number in the range 1 to 20. It selects
the default size to be used for overlay text on the current stave. The actual
font sizes that correspond to the twenty numbers are set by the &%textsizes%&
heading directive. If this directive is not used, the size set by the
&%overlaysize%& heading directive (whose parameter is different from any of the
sizes set by &%textsizes%&) is used. &%[Oltextsize]%& is normally needed only
if you want different sizes of overlay text on different staves.
.subsection "[Omitempty]" SUBSECTomitempty
.index "&%[omitempty]%&"
.index "omitting empty staves"
.index "omitting empty bars"
.index "empty bars, omitting"
.index "empty staves, omitting"
.index "staves" "omitting if empty"
.index "bars" "omitting if empty"
When a stave is about to be suspended (&R; &<<SECTsuspend>>&,
&<<SUBSECTsuspend>>&), it is sometimes desirable not to print stave lines after
the final bar that contains notes, and similarly, when a stave is resumed,
empty bars preceding the resuming bar may not be required. If the directive
&%[omitempty]%& appears at the start of a stave's data, &'nothing at all'& is
ever printed for bars for which no data is supplied. Such bars can be set up by
means of the &%[skip]%& stave directive, or by omitting them at the end of a
stave's data. Note that a bar that is specified as a rest bar, visible or
invisible, counts as a bar for which there &'is'& data, and a clef
specification also counts as data. Therefore, if bars are to be omitted at the
start of a stave, the input should be as in this example:
.code
[stave 3 omitempty skip 20]
.endd
The clef specification (possibly made invisible by means of &%[assume]%&)
can then follow. It is not necessary for the suspend mechanism to be used with
this feature, though if is not, vertical white space is left for the stave,
even if nothing is printed in that space. When a non-empty bar follows an empty
bar in a stave for which &%[omitempty]%& has been set, and it is not the first
bar in a system, a bar line has to be printed at its start. By default, a
conventional solid bar line is printed, but it is possible to specify other bar
line styles, a double bar line, or an invisible bar line, by using the normal
PMW notations for these things at the end of the preceding empty bar.
.code
[omitempty] ggg |? [skip 3] |? aaa |
.endd
.music "music51" 32 8,-16
This example specifies that no bar line it to be printed at the end of the bar
before the skip, nor at the start of the final bar. Without the question marks,
there would be bar lines in both these places. Note that because of the way
&%[skip]%& works, this example contains 4 empty bars, not 3. The gap in this
case is quite small, because, in the absence of other staves, PMW has packed
them up into a single (invisible) `rest' bar.
.index "isolated bars"
One or more &%[omitempty]%& staves can be used for printing isolated bars on a
page, using empty bars between them to cause horizontal white spaces to appear.
The size of the white spaces can be controlled by the use of &%[space]%&
directives on stave 0 &-- they cannot be used in the empty bars, because that
causes PMW to treat them as not empty.
.subsection "[Overdraw]"
.index "&%[overdraw]%&"
.index "drawing facility" "drawing over everything else"
When a drawing is associated with a note or bar line by means of the &%[draw]%&
directive, the drawing output happens before the note or bar line is output.
The order does not matter when everything is black, but if the &%setgray%&
drawing operator is being used, the drawing may need to be done last to achieve
the correct effect. &%[Overdraw]%& acts just like &%[draw]%& except that it
saves up the drawn items, and outputs them only after everything else in the
system has been output. Using &%setgray%& and &%[overdraw]%& it is possible to
`white out' parts of staves.
.subsection "[Overlayfont]"
.index "&%[overlayfont]%&"
.index "fonts" "default for overlay"
The default typeface for overlay text can be set for an individual stave by
means of the &%[overlayfont]%& directive, which takes as its argument one of
the standard font names.
.code
[overlayfont italic]
.endd
The default typeface for overlay text is roman. In any given text string it is
always possible to change typeface by using the appropriate escape sequence.
.subsection "[Page]"
.index "&%[page]%&"
.index "page" "skipping a number"
Occasionally there is a requirement to skip a page in the middle of a piece &--
to insert commentary in a critical edition, for example. The &%[page]%&
directive can be used to set the page number for the page on which it appears,
but it is not possible to decrease the page number. You can specify an absolute
page number, or an increment of the page number preceded by a plus sign.
.code
[page 45]
[page +1]
.endd
.subsection "[Percussion]"
.index "percussion staves"
.index "&%[percussion]%&"
&'The'& &%[percussion]%& &'directive is deprecated, having been superseded by
the'& &%[stavelines]%& &'directive, which should be used instead in all new
input files.'&
The &%[percussion]%& directive, which has no arguments, specifies that the
current stave is for untuned percussion. It has the following effects:
.ilist
The stave is printed as a single line instead of five. The line is positioned
where the middle line of a five-line stave would be.
.next
No clef or key signature is printed at the start of the stave.
.index "clefs" "percussion"
.next
Whole bar rests are printed under the third line (that is, under the line that
is printed) instead of under the (invisible) fourth line of the stave.
.next
No ledger lines are printed for notes off the stave.
.endlist
Otherwise the stave behaves as normal. Ordinary noteheads are printed.
Although no clef is printed, the vertical positioning of notes is relative to
the current clef.
.code
[stave 5 "Side Drum" "S.D." bass 0]
[10] d d-d- | [20]R! |
.endd
The use of the bass clef ensures that the note &`d`& prints on the middle line
of the stave, that is, the single line of the percussion stave.
.subsection "[Playtranspose]"
.index "&%[playtranspose]%&"
This directive is a synonym for &%[miditranspose]%&. It dates from the early
days of PMW running on Acorn hardware, when playing was possible without using
MIDI.
.subsection "[Playvolume]"
.index "&%[playvolume]%&"
This directive is a synonym for &%midivolume%&. It dates from the early days of
PMW running on Acorn hardware, when playing was possible without using MIDI.
.subsection "[Printpitch]" SUBSECTprintpitch
.index "&%[printpitch]%&"
.index "MIDI" "untuned percussion"
When inputting a file that is both to be printed and played on a MIDI
instrument, the &%[midipitch]%& directive can be quite cumbersome to use if a
percussion part changes instruments frequently, even though the amount of
typing can be reduced by using macros. An alternative facility that forces the
printing pitch instead of the playing pitch is therefore provided. The
&%[printpitch]%& directive takes a note letter and optional octave indication
as its argument. It causes all subsequent notes on the stave to be printed on
the corresponding line or space, whatever pitch is specified for the note in
the input. The input pitch can then be used to select different percussion
instruments for MIDI output. To do this, you need to know that middle C
corresponds to MIDI note 60, C-sharp is 61, B is 59, and so on.
Of course, some indication in the printed music is also required to tell a
human player what to do &-- this can take the form of graphic signs above the
notes, or different noteheads or stem directions can be used. Here is an
invented example, where the first three beats of the bar are played on a snare
drum (General MIDI pitch 38), and the last beat on the cowbell (General MIDI
pitch 56), indicated by a downward pointing stem.
.code
[stave 8 hclef 0 stavelines 1]
[printpitch b' stems up] d`d`d` $a-\sd\$a- |
.endd
.music "music44" 26 4,-20
The effect of &%[printpitch]%& can be cancelled by supplying an asterisk as its
argument. When a percussion stave with more than one line is used to separate
different instruments, or if notes are placed above and below the line, it is
probably easiest to input each instrument's part on a separate PMW stave, and
arrange for them to overprint each other. Then the appropriate MIDI sound can
be permanently set for each stave.
.subsection "[Reset]"
.index "&%[reset]%&"
.index "overprinting" "single bars"
Sometimes it is convenient to notate a bar as two different sequences of notes,
to be overprinted on the stave. The stave directive &%[reset]%& has the effect
of resetting the horizontal position to the start of the current bar. Anything
that follows it is overprinted on top of whatever has already been specified.
If a large number of bars require overprinting, it may be more convenient to
set up an entire overprinting stave by specifying a stave spacing of zero.
&%[Reset]%& should in any case be used with caution, because it can cause
unexpected effects if items such as slurs are in use.
.code
[stems up] gabc' [reset] [stems down] efga |
.endd
This example prints a bar containing the chords &`(eg)`&, &`(fa)`&, &`(gb)`&
and &`(ac')`&, but with the stems of each component of the chord drawn in
opposite directions. More than one &%[reset]%& may appear if necessary, and
only one set of notes need be of the correct length to satisfy the time
signature. The facility for printing invisible rests, notated by the letter Q,
can be useful in conjunction with &%[reset]%&.
Because PMW processes bars from left to right, &%[reset]%& must not appear
between two notes that are connected in some way, for example, between two tied
or slurred notes. It must also not appear between any other printing item and
the note or bar line that follows, because such items are always `attached' to
the following note or bar line. Specifically, &%[reset]%& must not follow any
of the following: a clef, a tied note, the first note of a glissando, the start
of a hairpin, a mid-bar dotted line, a repeat sign, a caesura, a text item,
&%[slur]%&, &%[xslur]%&, &%[line]%&, &%[xline]%&, &%[key]%&, &%[time]%&,
&%[comma]%&, &%[tick]%&, &%[move]%&, &%[smove]%&, &%[space]%&, or a rehearsal
mark. Also, &%[reset]%& may not occur in the middle of an irregular note group.
.subsection "[Resume]"
.index "&%[resume]%&"
This directive forces a resumption of a suspended stave &-- see &%[suspend]%&
for details.
.subsection "[Rlevel]"
.index "&%[rlevel]%&"
.index "rests" "level"
.index "level" "of rests"
Rests are normally printed centrally on the stave, as is conventional for
single parts. When two staves are being overprinted to combine two different
parts, it may be necessary to move rests up or down. There is a note option
that can be used to do this for individual rests (&R; &<<SUBSECTnoteexpr>>&).
The &%[rlevel]%& directive specifies an adjustment that applies to all
subsequent rests. Any adjustment specified for individual rests is added to the
current rest level as set by this directive. The argument for &%[rlevel]%& may
be positive or negative; it specifies a number of points by which the rest is
moved vertically. A positive number moves upwards, and a negative one moves
downwards.
.code
[rlevel -12]
.endd
This example causes rests to be printed 12 points lower than normal, so that a
whole bar rest, which normally prints below the fourth line, now prints below
the bottom line of the stave.
.index "ledger lines" "for rests off the stave"
Semibreve and minim rests that are moved off the
stave are printed with a single ledger line to indicate which they are. Each
occurrence of &%[rlevel]%& sets a level relative to the default position. They
are not cumulative.
.subsection "[Rmove]"
.index "&%[rmove]%&"
This directive operates exactly as &%[move]%&, except that horizontal movements
are scaled to the relative stave size.
.subsection "[Rsmove]"
.index "&%[rsmove]%&"
This directive operates exactly as &%[smove]%&, except that horizontal
movements are scaled to the relative stave size.
.subsection "[Rspace]"
.index "&%[rspace]%&"
This directive operates exactly as &%[space]%&, except that horizontal
dimensions are scaled to the relative stave size.
.subsection "[Sghere], [sgabove], and [sgnext]" SUBSECTsg
.index "&%[sghere]%&"
.index "&%[sgnext]%&"
.index "&%[sgabove]%&"
.index "system gap"
.index "spacing" "systems"
.index "gaps" "between systems"
These directives affect the system gap value, that is, the amount of vertical
space that is left between systems. Note that when just one stave is being
output (typically for a single part), it is the system gap that determines the
spacing. When vertical justification is enabled (&R; &<<SUBSECTjustify>>&), the
system gap is a minimum amount of space.
&%[Sghere]%& changes the spacing below the current system (that is, the one in
which the current bar is to appear), &%[sgabove]%& changes the spacing above
the current system, and &%[sgnext]%& makes the change for all systems that
follow the current one, but not for the current system itself. These directives
can be placed on any of the staves that comprise the system. For all of them, a
single number is required as an argument. It can be preceded by a plus or a
minus sign to indicate a relative change from the existing value.
If there is more than one occurence of any of these directives in a system,
those in stave 1 are processed first, in bar number order, followed by those in
the following staves. The last absolute setting (if any) is used, with any
relative changes acting cumulatively. Thus, for example, an absolute setting in
stave 2, bar 1 will override a relative setting in stave 1, bar 4.
The system gap is used only between systems, not at the top or bottom of a
page. If &%[sghere]%& is present in the last system on a page, or &%[sgabove]%&
in the first system on a page, they have no effect.
.subsection "[Skip]"
.index "&%[skip]%&"
.index "overprinting" "sparse staves"
.index "skipping bars"
.index "bars" "skipping"
When setting vocal or keyboard music it is common to use two overprinting
staves for notes with stems in different directions. Frequently, though, there
are long sequences of bars for which the second stave is not required.
Such a sequence can be notated using invisible whole bar rests, but if this is
done it is still necessary to keep the clef and key signature in step with the
other stave so that they are printed correctly at the beginnings of lines, and
at least the final time signature change must appear in the correct place so
that it is available for checking when notes resume.
.index "&%skip%&"
An alternative approach is to use the &%[skip]%& stave directive, which should
appear at the beginning of a bar, and which causes PMW to leave a given number
of bars totally empty.
.code
[stave 2] gg | [skip 50] aa | [endstave]
.endd
This example defines a stave in which only bars 1 and 52 are defined. When a
totally empty bar occurs at the start of a system, the clef and key signature
are not printed. Otherwise such bars are treated as if they contained invisible
whole bar rests. If &%[skip]%& is used at the very start of a stave, no clef
directive should be given, because otherwise the clef directive is taken as
part of the resumed bar after the skip. See also the &%[assume]%& and
&%[omitempty]%& directives.
.subsection "[Slur]" SUBSECTslurs
.index "&%[slur]%&"
.index "&%[endslur]%&"
.index "&%[es]%&"
.index-from I09 "slurs" "full specification"
Slurs between adjacent single notes can be input by inserting an underline
character after the first note (&R; &<<SUBSECTshortslur>>&). When a slur covers
chords, or spans several single notes, it must be coded using the &%[slur]%&
and &%[endslur]%& directives; &%[es]%& is an abbreviation for &%[endslur]%&.
The options for the &%[slur]%& directive are also applicable to the &%[line]%&
directive (&R; &<<SUBSECTline>>&).
.subsection "Normal slurs"
The &%[slur]%& and &%[endslur]%& directives enclose the notes and/or chords
that are to be slurred.
.code
a [slur] b-a-g-f- [endslur] g
.endd
This example causes a slur to be drawn over the four beamed quavers. Slurs are
drawn above the notes by default. The shape of slurs is correct in many common
cases, but when there is a large variation in pitch in the notes being slurred,
the slur mark may sometimes need manual adjustment. Various options are
provided for the &%[slur]%& directive for this purpose. The options are
separated from each other, and from the directive name, by slashes. The
following are available:
.itable none 0 0 2 76 left 300 left
.row &`/a`& "slur above the notes (default)"
.row &`/a`&<&'n'&> "slur above, at fixed position above stave"
.row &`/ao`& "slur above, at overlay level"
.row &`/b`& "slur below the notes"
.row &`/b`&<&'n'&> "slur below, at fixed position below stave"
.row &`/bu`& "slur below, at underlay level"
.row &`/h`& "force horizontal slur"
.row &`/ll`&<&'n'&> "move the left end left by <&'n'&> points"
.row &`/lr`&<&'n'&> "move the left end right by <&'n'&> points"
.row &`/rl`&<&'n'&> "move the right end left by <&'n'&> points"
.row &`/rr`&<&'n'&> "move the right end right by <&'n'&> points"
.row &`/u`&<&'n'&> "raise the entire slur by <&'n'&> points"
.row &`/d`&<&'n'&> "lower the entire slur by <&'n'&> points"
.row &`/lu`&<&'n'&> "raise the left end by <&'n'&> points"
.row &`/ld`&<&'n'&> "lower the left end by <&'n'&> points"
.row &`/ru`&<&'n'&> "raise the right end by <&'n'&> points"
.row &`/rd`&<&'n'&> "lower the right end by <&'n'&> points"
.row &`/ci`&<&'n'&> "move the centre in by <&'n'&> points"
.row &`/co`&<&'n'&> "move the centre out by <&'n'&> points"
.endtable
Another way of specifying horizontal position for slur ends is to use &`/llc`&,
&`/lrc`&, &`/rlc`& or &`/rrc`& followed by a number that may have a fractional
part. These options specify a base horizontal position for a slur end as a
musical offset, in units of crotchets. At the start of a slur this offset is
relative to the next note. By default, at the end of a slur it is relative to
the previous note (that is, the last enclosed note). However, if the &`/cx`&
option is present, an ending offset is taken relative to the following note.
These features were added to PMW in order to simplify translating MusicXML into
PMW input. Here are some examples of the &%[slur]%& directive:
.code
[slur]
[slur/b]
[slur/u4]
[slur/lu2/co4]
[slur/rr6]
[slur/a/u4/ld2]
[slur/a/lu2/ru4]
.endd
Repeated movement qualifiers are accumulated. The options &`/u`& and &`/d`& are
shorthand for specifying an identical vertical adjustment of both ends of the
slur. Specifying &`/ci`& causes the slur to become flatter, and specifying
&`/co`& causes it to become more curved. The &`/h`& qualifier requests a
horizontal slur, that is, one in which both ends are at the same horizontal
level before any explicit adjustments are applied. This is implemented by
forcing the right-hand end to be at the same level as the left-hand end.
Use of the &`/a`& or &`/b`& options with a fixed position (for example,
&`/a8`&) initializes the vertical positions of both end points, as does the use
of the &`/ao`& or &`/bu`& options. This results in a horizontal slur by
default. The &`/h`& option is not relevant in these cases, and is ignored if
given. However, the options for moving the ends can be applied.
The &`/ao`& and &`/bu`& options are probably more useful with &%[line]%& than
with &%[slur]%&, for cases when several lines at the same level are required on
a single system. For example, if lines are being drawn for piano pedal marks
(see &%[linegap]%& for an example), using the &`/bu`& option causes them all to
be at the same level below a given stave, and to be positioned just below the
lowest note on that stave. If there is overlay or underlay text for a stave,
the overlay or underlay level is computed by taking into account only those
notes that actually have associated text or dashes or extender lines. If not,
all the notes on the stave are taken into account.
One particular use of the options for moving the ends of slurs horizontally is
for printing a slur (or tie) that extends from the last note of a bar up to the
bar line and no further, or from the bar line to the first note in a bar. These
are needed for some kinds of first and second time bar. A slur that includes
only one note provokes an error, because it is an attempt to draw a slur of
zero horizontal extent.
.code
[slur] a [endslur]
.endd
This example is incorrect. However, if one end of the slur is moved, all is
well.
.code
[slur/rr15] a [endslur]
.endd
This example is acceptable. The slur starts at the note, and extends for 15
points to the right. Slurs may be nested to any depth.
.code
a b [slur] c d | [slur/b] e f g [es] a | f e [es] d c |
.endd
This prints as a long slur extending from the middle of the first bar to
the middle of the third bar, with a shorter slur below three notes in the
second bar. In other words, the first &%[slur]%& matches with the last
&%[es]%&. A similar example, together with its output, is shown in section
&<<SECTtiesslurs>>&.
.subsection "Additional control of slur shapes"
.index "slurs" "control of shape"
.index "Bézier curves"
Slurs are drawn using Bézier curves, which are described in many books
on computer graphics. A Bézier curve is defined by two end points and
two control points. The curve starts out from its starting point towards the
first control point, and ends up at the finishing point coming from the
direction of the second control point. The greater the distance of the control
points from the end points, the more the curve goes towards the control points
before turning back to the end point. It does not, however, pass through the
control points.
For slurs, the control points are normally positioned symmetrically, giving
rise to a symmetric curve. The &`/co`& and &`/ci`& (`curve out' and `curve in')
options described above are used to move the control points further from or
nearer to the line between the endpoints, respectively. Occasionally,
non-symmetric slurs are needed, and so some additional options are provided to
enable the positions of the two control points to be independently moved.
.itable none 0 0 2 76 left 300 left
.row &`/clu`&<&'n'&> "move left control point up <&'n'&> points"
.row &`/cld`&<&'n'&> "move left control point down <&'n'&> points"
.row &`/cll`&<&'n'&> "move left control point left <&'n'&> points"
.row &`/clr`&<&'n'&> "move left control point right <&'n'&> points"
.row &`/cru`&<&'n'&> "move right control point up <&'n'&> points"
.row &`/crd`&<&'n'&> "move right control point down <&'n'&> points"
.row &`/crl`&<&'n'&> "move right control point left <&'n'&> points"
.row &`/crr`&<&'n'&> "move right control point right <&'n'&> points"
.endtable
Thus, for example, &%[slur/a/clu40]%& draws a slur that bulges upwards on the
left. Experimentation is usually needed to find out the precise values needed
for a given shape. The directions of movement for these options are not the
normal ones, except when a slur is horizontal. When a slur's end points are not
at the same level, the coordinate system is rotated so that the new
`horizontal' is the line joining the end points. In most cases this rotation is
small, and so the difference is not great. In all cases, the left control point
relates to the left-hand end of the slur, and the right control point relates
to the right-hand end, whichever way up the slur is drawn.
.subsection "Editorial and dashed slurs"
.index "slurs" "dashed"
.index "slurs" "editorial"
.index "dashed slurs"
.index "editorial slurs"
Three alternative forms of slur are provided: dashed slurs, dotted slurs, and
`editorial' slurs. The latter have a short vertical stroke through their
midpoint if they are symmetric in shape, or near the midpoint otherwise. The
alternatives are specified by qualifiers on the directive.
.display
&`/i `& draw an `intermittent' (dashed) slur
&`/ip`& draw an `intermittent points' (dotted) slur
&`/e `& draw an editorial slur
.endd
These qualifiers can be freely mixed with the other slur qualifiers. However,
if a slur is dashed or dotted, and also marked `editorial', no attempt is made
to ensure that the editorial mark coincides with a solid bit of slur.
.subsection "Wiggly slurs"
.index "slurs" "wiggly"
.index "wiggly slurs"
The option &`/w`& causes the curvature of the slur to change sides in the
middle. For example, a wiggly slur below some notes starts curving downwards,
but then changes to curving upwards. The slur may be solid, dashed, dotted, or
editorial. If a wiggly slur crosses the end of a system, the portion on the
first system curves one way, and the portion on the next system curves the
other way.
.subsection "Split slurs"
.index "split slurs"
.index "slurs" "split"
Slurs are correctly continued if they span a boundary between two systems. By
default, such slurs are not continued over warning key or time signatures at
the ends of lines, but PMW can be requested to do this by means of the
&%sluroverwarnings%& heading directive. The shape and positioning of the end of
the first part of a split slur are controlled by the &%endlineslurstyle%& and
&%endlinesluradjust%& directives.
The sections of a slur that extends over one or more line ends are numbered
from 1. An option in a &%[slur]%& directive that consists just of a number
means that subsequent options apply only to the given section. Thus, for
example, &%[slur/3/lu4/co4]%& moves the left-hand end of the third section
upwards, and increases its curvature. Spaces are allowed between options, and
these can be used to make a complicated slur more readable by separating the
various sections.
.code
[slur /1/co2 /2/lu4/rd6]
.endd
The only options that may appear after a section selector are those that move
endpoints or control curvature, that is, &`/u`&, &`/d`& and those options
beginning with &`/l`&, &`/r`&, and &`/c`&. If a section number is given that is
greater than the number of sections, its data is ignored, and when a slur is
not split, all section-specific options are ignored, even those for section 1.
Movement and curvature options that appear before the first section selector
are handled as follows:
.ilist
All options beginning with &`/c`& apply only when the slur is not split.
.next
The &`/u`& and &`/d`& options apply to all endpoints of all sections, whether
the slur is split or not.
.next
Options beginning with &`/l`& (the letter) apply to the starting point of the
slur, whether or not it is split. To move the starting point only when the slur
is split (but not if it is not) these options can be given after &`/1`& (the
digit), in which case they are added to any values given before the selector.
.next
Any vertical movement specified with &`/lu`& or &`/ld`& is also applied to the
right-hand end of the first section of a split slur. To affect only the
left-hand end, put these options after &`/1`& (the digit).
.next
Options beginning with &`/r`& apply to the final endpoint of the slur, whether
or not it is split. To move the endpoint only when the slur is split (but not
if it is not) these options can be given after &`/`&<&'n'&>, where <&'n'&> is
the number of the final section, in which case they are added to any values
given before the selector.
.next
Any vertical movement specified with &`/ru`& or &`/rd`& is also applied to the
left-hand end of the final section of the slur. To affect only the right-hand
end, put these options after &`/`&<&'n'&>.
.endlist
If &`/ao`& or &`/bu`& is specified for a slur that is split, each section of
the slur is positioned at the overlay or underlay level for its own stave, but
can of course be moved by suitable options after a section selector. Similarly,
&`/a`& and &`/b`&, if given with a dimension, cause all sections of a split
slur to be positioned at the given vertical position. If a wiggly slur is
split, the first section curves one way, and all subsequent ones curve the
other way.
Earlier versions of PMW used a more restricted set of options starting with
&`/s`& to control split slurs. These are still supported, but are no longer
documented and should not be used in new files.
.subsection "Overlapping nested slurs" SUBSECTxslur
.index "slurs" "overlapping"
.index "overlapping slurs"
.index "&%[xslur]%&"
Usually slurs are properly nested, that is, if a second slur starts within a
slur, the inner slur ends before the outer slur. The slur notation in PMW is
naturally nested, and automatically ensures that this convention is followed.
Any number of slurs may be started at any one time on a stave. The data for a
given slur (starting coordinates, etc.) are placed on a stack when the
&%[slur]%& directive is obeyed. If another slur is started before the first one
is complete, its data goes on top of the stack, temporarily `hiding' any
previous data that may be already there. When &%[endslur]%& is obeyed, it
terminates the slur whose data is on the top of the stack (and that data is
removed). By default, therefore, &%[endslur]%& always terminates the most
recently started slur.
Very occasionally, it is useful to be able to start a second slur
within a slur and have it cross over the outer slur. More commonly, it is
sometimes necessary to have one slur ending and the next beginning on the same
note &-- a situation that is not possible using the normal PMW slur notation,
because slur starts are notated before notes and slur ends afterwards.
.index "crossing slurs"
.index "slurs" "crossing"
To make this possible, the &%[xslur]%& (`crossing slur') directive causes an
innermost nested slur cross over the one immediately outside it.
.code
[slur] a [xslur] b [es] c [es]
.endd
This example draws one slur covering the first two notes, and the next slur
covering the second and third notes. The &%[xslur]%& directive does not place
its data on the top of the stack (unless the stack is empty). Instead, it
places it one position down in the stack. Thus, the next &%[endslur]%&
terminates the previously started slur, leaving the latest one still
incomplete, and in the example above, the first &%[es]%& is thereby made to
refer to the &%[slur]%& directive and the second to the &%[xslur]%& instead of
the other way round. This facility is available for the innermost nested slur
only.
.subsection "Tagged slurs" SUBSECTtaggedslurs
.index "tagged slurs"
.index "slurs" "tagged"
In very complicated music, even the &%[xslur]%& facility is not powerful enough
to describe what is wanted, and it is necessary to use `tagged' slurs. The
qualifier &`/=`& can be used within a &%[slur]%& directive to `tag' a slur. It
must be followed by a single identifying character. It is recommended that
capital letters normally be used, as they are visually distinctive. A tagged
slur is placed on top of the stack as normal. The &%[endslur]%& directive may
also contain a tag, using the same syntax. When a tagged &%[endslur]%&
directive is obeyed, the stack of unterminated slurs is searched for a slur
with a matching tag, and if one is found, that slur is terminated. If no
matching slur is found, an error message is given and the slur on the top of
the stack is terminated. When &%[endslur]%& does not contain a tag, the topmost
slur is terminated, whether or not it is tagged. Here is an example of the use
of tagged slurs:
.code
[slur/=A] [slur/b/=Z] ggg [slur/=B] a [es/=A] a [es/=Z] a [es] |
.endd
.music "music43" 32 4,-20
.index-to I09
.subsection "[Slurgap]" SUBSECTslurgap
.index "&%[slurgap]%&"
.index "slurs" "gaps in"
.index "gaps" "in slurs"
The &%[slurgap]%& directive has the same options as &%[linegap]%&, and can be
used to leave gaps in slurs where they would otherwise cross over other items.
For example, to avoid drawing a slur through a key signature:
.code
r [slur/co3/lu2] G`+ [slurgap/w30/r10] | [key e$] c G' [es] |
.endd
.music "music52" 34 4,-14
Specifying a gap associated with a text string or a drawing function provides a
way of adding arbitrary annotation to a slur &-- a width of zero can be given
if no actual gap in the slur is required. When an associated drawing function
is obeyed, the origin is halfway along the straight line joining the edges of
the gap, and the &%linegapx%& and &%linegapy%& variables are set as for
&%[linegap]%&. Bracketed slurs can be done using a drawing function, but the
text option is probably easier.
.code
[slur slurgap/h0/w0/"( " slurgap/h1/w0/" )"]
.endd
In this example, the &`/h0`& and &`/h1`& options specify the start and end of
the slur, respectively, and &`/w0`& specifies a gap of zero width. String
options can be used to alter the size or position of the text as required. A
gap specified for a dashed slur is liable to result in partial dashes being
drawn, unless its length is carefully adjusted.
.subsection "[Smove]"
.index "&%[smove]%&"
This directive is a shorthand for combining a &%[move]%& and a &%[space]%&
directive. The following two lines of input are equivalent:
.code
[move 6] a [space 6]
[smove 6] a
.endd
This is common usage when adjusting the position of notes on overprinting
staves. The space is not scaled by the stave size &-- use &%[rsmove]%& if you
want scaled space.
.subsection "[Soprabass]"
.index "&%[soprabass]%&"
This specifies a bass clef with a little `8' printed above it (&R;
&<<SECTclef>>&).
.subsection "[Soprano]"
.index "&%[soprano]%&"
This specifies a C clef with its centre on the bottom stave line (&R;
&<<SECTclef>>&).
.subsection "[Space]"
.index "&%[space]%&"
.index "space" "inserting in staves"
The &%[space]%& directive, which has a single number as an argument, causes
space to be inserted before the next note or rest in the bar, or before the bar
line if there are no more notes or rests. The remainder of the bar, including
appropriate items on other staves, is adjusted accordingly. The number can be
positive or negative; a negative value removes space from the bar. The space is
not scaled by the relative stave size. If you want to insert scaled space, use
&%[rspace]%&. When there are two or more occurrences of &%[space]%& at the same
position in a bar, PMW takes the largest if previous ones specify a positive
amount of space, and the smallest if they specify a negative amount. This
normally gives the right effect if extra space is accidentally specified in two
different staves.
&*Note*&: unlike &%[move]%&, &%[space]%& always affects the position of the
next note, rest, or bar line, even if some other item intervenes. Other items
are always printed in relation to the note, rest, or bar line that follows
them. Therefore, adjusting the position of a note, rest, or bar line with
&%[space]%& affects these items too. The following two examples have exactly
the same effect:
.code
[comma] [space 6] A
[space 6] [comma] A
.endd
This is because &%[space]%& does not affect non-note items such as commas. The
&%[move]%& directive can be used in conjunction with &%[space]%& to insert
space between a non-note item and the note to which it is related.
.code
[space 6][move -6][comma] A
.endd
In this example, &%[space]%& moves both the note and its attached comma (and
everything that follows) to the right; &%[move]%& then moves the comma back to
where it would have been without the inserted space. &%[Space]%& is obeyed when
PMW is figuring out where to position the notes in the bar, whereas &%[move]%&
is obeyed when the bar is output. See also &%[ensure]%&, &%[move]%&,
&%[smove]%&, &%[rspace]%&, &%[rmove]%&, and &%[rsmove]%&.
.subsection "[Ssabove], [sshere], and [ssnext]" SUBSECTss
.index "&%[ssabove]%&"
.index "&%[sshere]%&"
.index "&%[ssnext]%&"
.index "staves" "spacing"
.index "spacing" "staves"
These directives affect stave spacing. See section &<<SUBSECTstavespacing>>&
for how to set defaults for the whole movement. &%[Ssabove]%& differs from the
other two in that it sets a minimum spacing &'above'& staves; the other two
adjust the actual settings for spacing below staves. For example, if the
spacing for stave 2 has been set to 50, an occurrence of &`[ssabove 40]`& in
stave 3 would have no effect, but &`[ssabove 60]`& would increase the distance
between staves 2 and 3.
The difference between the other two directives is that &%[sshere]%& changes
the spacing for the current system only (that is, the one in which the current
bar appears), whereas &%[ssnext]%& makes the change for all systems that follow
the current one.
If any of these directives is followed by a single number, the setting applies
to the current stave only, except when the current stave is number zero, in
which case the value applies to all staves. For example, a bar with very low
notes might require notating thus:
.code
[treble 1] [sshere 60] f` a` c e |
.endd
This example has the effect of setting the stave spacing to 60 points, for the
current stave in the current system only. If the number is preceded by a plus
or minus sign, it is interpreted as a change to the existing spacing.
.code
[sshere +10]
.endd
This example adds 10 points to the stave spacing for the current stave in the
current system. The argument for these directives can also take the form of two
numbers separated by a slash, in which case the first is a stave number and the
second is a spacing (which may be preceded by a plus or minus sign). More than
one pair may be present. This makes it possible to encode all stave spacing
changes in the same stave.
.code
[ssnext 2/+8 3/-10 4/44]
.endd
If zero is given as a stave number, the spacing setting is applied to all the
staves. If there is more than one occurence of any of these directives in a
system, those in stave 1 are processed first, in bar number order, followed by
those in the following staves. For any given stave, the last absolute setting
(if any) is used, with any relative changes acting cumulatively. Thus, for
example, an absolute setting in stave 2, bar 1 will override a relative setting
in stave 1, bar 4.
When &%[ssnext]%& is used with a plus or minus sign, without a preceding
absolute setting, the value is relative to the original spacing for the
stave, ignoring any changes that might have been made with &%[sshere]%&.
.subsection "[Stave]" SUBSECTstave
.index "&%[stave]%&"
The first thing in each stave's data must be the &%[stave]%& directive. In its
most basic form, the name is followed by just a stave number. Further
arguments may be given to specify text or drawings to be output at the lefthand
side of the stave. Most commonly, &%[stave]%& is used just with text, and this
form is described first.
.subsection "Text at stave starts"
The text-only form of &%[stave]%& has the following format:
.display
&`[stave `&<&'n'&>&` "`&<&'string1'&>&`" "`&<&'string2'&>&`" ...]`&
.endd
.index "part names"
.index "staves" "names for"
There may be any number of string arguments. By default, the first one is used
in the first system of the movement, and the second one for subsequent systems
(see the next section for multiple strings for the same system). These strings
are normally used for the name of the instrument or voice for which the stave
is intended.
.code
[stave 1 "Soprano" "S"]
.endd
This example prints `Soprano' at the start of the first system, and `S' on all
the others. If there is only one string, only the first system has text printed
at the start of this stave. The third and subsequent strings in &%[stave]%&
directives are not used automatically, but can be selected at any point in the
.index "&%[name]%&"
piece by means of the &%[name]%& stave directive (&R; &<<SUBSECTname>>&), which
also provides an alternative way of specifying text and drawings for the
beginnings of staves.
.index "| (vertical bar) in strings"
If a vertical bar appears in one of the strings, it specifies the start of a
new line of text.
.code
[stave 5 "Trumpet|in G"]
.endd
This example prints two lines at the start of the stave 5 in the first system.
The options &`/c`& and &`/e`& can be used on any string to cause the text to be
printed horizontally centred or right-justified, respectively. If both &`/c`&
and &`/e`& are given, and the text consists of multiple lines (delimited with
&`|`& characters), the longest line is right justified, and all the other lines
for the stave have their centres aligned with the centre of the longest line.
.index "text" "halfway between staves"
It is also possible to request that text be vertically positioned halfway
between two successive staves. This is specified by appending &`/m`& (for
`middle') to the text on the upper of the two staves.
.code
[stave 1 "Piano"/m]
.endd
If two over-printing staves are being used for a keyboard part, the text may
appear with either of them, because if the space after the current stave is set
to zero, the space for the next stave is used when positioning such text,
unless such a stave is suspended, in which case &`/m`& is ignored. It is also
ignored if the following stave is suspended. As an example of where this is
relevant, consider this input:
.code
[stave 1 "Horns"/m "Hn"/m]
...
[endstave]
[stave 2]
...
[endstave]
.endd
When both horn parts are being printed, the text is shown halfway between them,
but if the second stave is suspended, the text aligns with the first stave.
You can specify a size for text at the start of a stave by following the string
with &`/s`& and a number. The number selects a text size from the list given to
the &%textsizes%& directive, as for any other text on staves.
.code
[stave 1 "Flute"/s2]
.endd
The size is not affected by any relative magnification that may be applied to
the stave. If no size is specified, the text is printed using a 10-point font.
.index "text" "rotated stave names"
.index "staves" "rotated names"
Finally, it is possible to specify that the text be rotated through 90° so
that it prints vertically up the page. This is specified with the &`/v`&
option.
.code
[stave 3 "Chorus"/v]
.endd
When &`/v`& is combined with &`/m`&, the text is both rotated and moved down so
that its centre is at the midpoint of the staves. To make other adjustments to
the position, the space character and the moving characters in the music font
can be used. Only a single line of text is supported when printing is vertical,
and hence the vertical bar character has no special meaning in this case.
If more than one string is given for any stave, the &`/c`&, &`/e`&, &`/s`&,
&`/m`&, and &`/v`& qualifiers can be used on any of them, and apply only to
those strings for which they appear.
.subsection "Multiple strings at stave starts"
.index "staves" "names, multiple strings"
Sometimes it is useful to be able to specify two or more strings, possibly at
different sizes or with different options, to be output together at the start
of the same stave. This is notated by ending a string with a slash followed
immediately by the next string, with no intervening space. Here is an example
where this feature is useful:
.music "music57" 74 4,-14
The start of the input for stave 1 in this example is:
.code
[stave 1 "1"/e/"Horns in F"/m/s2 treble 1]
.endd
Both strings are output at the start of the stave, with &`/m`& being used to
move the second one down to the halfway point before the second stave, and
&`/s`& being used to select a different size. If &`/m`& had not been used, the
two strings would have overprinted each other. This facility is not confined to
the first string in a &%[stave]%& directive; it can be used with any string.
.subsection "Drawings at stave starts"
.index "drawing facility" "at stave starts"
.index "staves" "drawing at start"
It is possible to cause a drawing function (see chapter &<<CHAPdraw>>&) to be
obeyed at the start of a stave. This can be instead of, or as well as, a text
string. The amount of space to the left of the stave is controlled by the text
string, so a string consisting of blanks can be used to ensure that an
appropriate amount of space is left.
.index "guitar tablature"
The &%contrib%& directory in the PMW distribution contains an example where a
drawing function associated with a stave is used to print a special kind of
`clef' for guitar tablature. The full syntax of &%[stave]%& is as follows:
.display
&`[stave `&<&'n'&>&` `&<&'string'&>&` draw `&<&'arguments'&>&` `&<&'drawing name'&>&` ...]`&
.endd
This feature also available for the &%[name]%& directive. If both a string
and a call to a drawing function are present, the string must come first.
.code
[stave 3 " " draw thing]
.endd
As in all drawings, the arguments (which may be numbers or strings) are
optional. The origin of the coordinate system is at the left-hand margin of the
page and at the level of the bottom line of the stave. The drawing variable
&%stavestart%& contains the x-coordinate of the start of the stave itself. Just
as there may be more than one string specified, for use on different systems,
there may also be more than one drawing function. They are listed in order,
following the corresponding strings, if present.
.code
[stave 23 "Trumpet" draw 2.5 thing2 "Tr." draw "arg" thing3]
.endd
There is an ambiguity if an item that consists only of a string (with no
associated drawing) is followed by an item consisting only of a drawing. In
this case, an empty string must be specified for the second item, to prevent
the drawing being incorrectly associated with the first item. There is also a
possibility of ambiguity if the first item on the stave itself is a call to a
drawing function, and there is no other intervening directive. The drawing must
be put into a new set of square brackets to prevent this.
.code
[stave 35 "Flute"] [draw thing3]
.endd
In this example the &%stave%& directive is terminated by the closing square
bracket, so the &%draw%& directive is taken as part of the stave data and is
associated with the following note in the usual way.
.subsection "[Stavelines]"
.index "&%[stavelines]%&"
.index "staves" "number of lines"
.index "alternatives to 5-line staves"
.index "invisible items" "stave"
.index "staves" "invisible"
This directive specifies the number of lines to be drawn for the current stave.
Its argument is a number in the range 0&--6. A stave with no lines is an
invisible stave. Two-line and three-line staves have double the normal stave
line spacing, and are centred about the middle line of the normal five-line
position. They are designed for multiple percussion parts. A three-line stave
at the normal spacing can be obtained by overprinting a one-line and a two-line
stave.
.index "guitar tablature"
Four-line and six-line staves are five-line staves with the top line missing
or an additional line added above the top, respectively. When used for guitar
tablature they should normally be enlarged by means of the &%stavesize%&
heading directive. The &%contrib%& directory in the PMW distribution contains
an example of guitar tablature.
&%[Stavelines]%& applies to the entire stave, independently of where it
appears. It has no implications for the printing of key signatures or clefs.
.index "ledger lines" "with non-standard staves"
For staves with fewer than five lines, ledger lines are not printed for notes
that are off the stave. On one-line staves, whole bar rests are printed under
the single line, and on three-line staves they are printed under the top line.
In all other respects the behaviour of PMW is unchanged by the number of stave
lines.
The &%[percussion]%& directive is equivalent to &%[stavelines 1]%& except that,
in addition, it suppresses the printing of key signatures and clefs. This
directive is retained for compatibility, but its use is deprecated. New input
files should instead use one of these examples:
.display
&`[stavelines 1 noclef key C]`&
&`[stavelines 1 hclef key C]`&
.endd
.subsection "[Stemlength]"
.index "&%[stemlength]%&"
.index "stems" "length"
.index "length" "of stems"
The &%[stemlength]%& directive is used to set a default value for the stem
length adjustment on a stave.
.code
[stemlength -2]
.endd
This example specifies that subsequent notes should have stems that are 2
points shorter than normal. A value of zero resets to the initial state. Any
stem length adjustments that are given on individual notes are added to the
overall default. The name &%[sl]%& is a synonym for &%[stemlength]%&. The
default stem length can be changed as often as necessary. PMW can also be
instructed to automatically shorten the stems of notes whose stems point the
`wrong' way. See the &%shortenstems%& heading directive for details.
.subsection "[Stems]"
.index "&%[stems]%&"
.index "stems" "direction"
Normally PMW chooses for itself in which direction to draw note stems. Details
of the rules it uses are given in section &<<SECTstemdir>>&; some variation is
possible by means of the &%stemswap%& heading directive (&R;
&<<SUBSECTstemswap>>&). You can also force note stems to point upwards or
downwards, wherever the noteheads are on the stave. For individual notes there
are options to do this; the &%[stems]%& directive sets a default for any notes
that are not explicitly marked. It must be followed by one of the words `up'
(or `above'), `down' (or `below'), or `auto' &-- the last causing a reversion
to the default state.
.subsection "[Suspend]" SUBSECTsuspend
.index "&%[suspend]%&"
.index "suspending staves"
When a part is silent for a long time, it is often desirable in full scores to
suppress its stave from the relevant systems. The term `suspended' is used in
PMW to describe a stave that is not currently being printed. The &%[suspend]%&
directive tells PMW that it may suspend the current stave from the start of the
next system, provided that there are no notes or text items to be printed on
this stave in that system. The suspension ends automatically when a system is
encountered in which there are notes or text to be printed on this stave.
.code
[suspend] [108] R! |
.endd
This example specifies 108 bars rest, which can be suspended where possible.
If the &%[suspend]%& directive appears in the first rest bar, as in this
example, at least one rest bar is printed before the stave is suspended. If it
is desired that no rest bar need be printed before the suspension,
&%[suspend]%& should be placed in the preceding bar.
.code
abcd [suspend] | [108] R! |
.endd
.index "&%[resume]%&"
Suspension can be ended early by the &%[resume]%& directive. If at least one
rest bar is required when the stave is resumed, an explicit &%[resume]%& must
appear in the last rest bar, because by default the stave may resume with a
non-rest bar at the beginning of a system.
.code
[suspend] [107] R! | [resume] R! |
.endd
When a single part is being printed, &%[suspend]%& has no effect, because
a sequence of rest bars is automatically packed up into a single bar with a
multiple rest sign. Because &%[suspend]%& stave directive takes effect from the
start of the following system of staves, it cannot be used to cause suspension
right at the start of a piece. The &%suspend%& heading directive is provided
for this purpose.
.subsection "[Tenor]"
.index "&%[tenor]%&"
This specifies a C clef with its centre on the fourth stave line (&R;
&<<SECTclef>>&).
.subsection "[Text]"
.index "&%[text]%&"
.index "text" "default type"
The default type for text within a stave (which implies a default vertical
level and size) can be set for an individual stave by means of the &%[text]%&
directive. It takes a word as its argument.
.itable none 0 0 2 120 left 300 left
.row "&`[text above]`&" "print above the stave"
.row "&`[text above`& <&'n'&>&`]`&" "ditto, at a given level"
.row "&`[text below]`&" "print below the stave"
.row "&`[text below`& <&'n'&>&`]`&" "ditto, at a given level"
.row "&`[text underlay]`&" "default is underlay"
.row "&`[text overlay]`&" "default is overlay"
.row "&`[text fb]`&" "default is figured bass"
.endtable
To override a default with an absolute position (for example &%[text above
15]%&), the text options &`/a`& or &`/b`& without a following number can be
used (as well as &`/ul`&, &`/fb`&, or &`/m`&). Similarly, the appearance of
&%[text above]%& or &%[text below]%& without a number resets to the initial
state, where the default vertical position depends on the next note.
Ordinary text that is printed above or below the stave is by default printed at
size 1 (as specified by the &%textsizes%& heading directive). Underlay,
overlay, and figured bass text is printed by default at the sizes specified by
the &%underlaysize%&, &%overlaysize%&, and &%fbsize%& heading directives. The
default text type can always be overridden by explicit qualifiers following the
string. For example, if &%[text underlay]%& has been specified, an italic
dynamic mark to be printed above the stave is coded like this:
.code
"\it\ff"/a
.endd
The default text type can be changed many times within one stave.
.subsection "[Textfont]"
.index "&%[textfont]%&"
.index "fonts" "default for text"
.index "text" "default font"
The default typeface for text other than underlay, overlay, or figured bass can
be set for an individual stave by means of the &%[textfont]%& directive, which
takes as its argument one of the standard font names.
.code
[textfont extra 3]
.endd
This example supposes that the third extra font has been defined for some
special use in the stave's text. The default font for this kind of text is
italic. The defaults for underlay, overlay, and figured bass text are set by
&%[underlayfont]%&, &%[overlayfont]%&, and &%[fbfont]%&, respectively. In any
given text string it is always possible to change font by using the appropriate
escape sequence.
.subsection "[Textsize]"
.index "&%[textsize]%&"
This directive must be followed by a number in the range 1 to 20. It selects
the default size to be used for text that is neither underlay nor overlay nor
figured bass, which have their own size setting directives. The actual font
sizes that correspond to the twenty numbers are set by the &%textsizes%&
heading directive. If this directive is not used, the default size is size 1.
Individual text strings can have their sizes set by means of the &`/s`& option.
.subsection "[Tick]"
.index "&%[tick]%&"
.index "pause" "tick"
The &%[tick]%& directive causes PMW to insert a tick &{(y|€~{)}& pause
mark above the current stave. See also &%[comma]%&.
.subsection "[Ties]"
.index "&%[ties]%&"
.index "ties" "direction"
Normally PMW draws tie marks on the opposite side of the noteheads from the
stem. However, it is possible to force ties to be above or below the noteheads.
For individual ties there is an option qualifier to do this. In addition, the
&%[ties]%& directive is available for forcing the tie direction for all
subsequent ties that are not explicitly marked. The argument must be one of the
words `above', `below', or 'auto' &-- the last causing a reversion to the
default state.
.index "chords" "tied"
The effect of this directove on chords is to force &'all'& the tie marks for a
chord to the given side of the noteheads by default. However, when overriding
the default for an individual chord, you can specify that some are above and
some below the noteheads (&R; &<<SUBSECTshortslur>>&).
.subsection "[Time]"
.index "&%[time]%&"
.index "time signatures" "changing"
The time signature for a stave can be changed at the start of a bar by the
&%[time]%& directive. If the change of time falls at the start of a system, a
cautionary time signature is printed at the end of the previous line unless the
word `nowarn' is included in the directive.
.code
[time 6/8 nowarn]
.endd
There is also a heading directive, &%notimewarn%&, for suppressing all
cautionary time signatures.
.index "time signatures" "different on different staves"
PMW does not work sensibly by default if different time signatures are used on
different staves, unless they represent the same length of musical notes. For
example, if one stave is in 3/4 time and another is in 6/8 all will be well,
but PMW cannot cope with 2/4 against 6/8 without additional input (&R;
&<<SUBSECTstadiffsig>>&).
When a bar starts with a new time signature and a repeat mark, the order in
which these are printed depends on the order in which they appear in the input.
.code
[time 4/4] (:
(: [time 4/4]
.endd
The first example causes the time signature to be printed first, followed by
the repeat mark, whereas the second example causes the repeat mark to be
amalgamated with the previous bar line, with the time signature following. If,
at the same point in the music, these items appear in different orders on
different staves, the repeat sign is printed first on all staves.
Sometimes it is required to print two time signatures at the start of a piece
(for example, if there are alternate bars in different times). The simplest way
to do this is to make use of the &%printtime%& heading directive.
.subsection "Staves with differing time signatures" SUBSECTstadiffsig
.index "time signatures" "differing"
.index "differing time signatures"
PMW requires no special action to handle staves with different time signatures
if the actual barlengths (measured in notes) are the same. For example 3/4 and
6/8 bars both contain six quavers, and so are compatible. PMW can also handle
time signatures that are not compatible, for example, 6/8 in one stave and 2/4
in another, but because PMW handles just one stave at a time when it is reading
the music in, it is necessary to tell it what is going on by giving a second
time signature in the &%[time]%& directive, preceded by &`->`&.
.code
time 6/8
[stave 1 treble 1] a. b-a-g- | [endstave]
[stave 2 bass 0 time 2/4 -> 6/8] c-d-; e-f- | [endstave]
.endd
The first signature is the one printed, and this corresponds to the printed
notes in the bar; the second signature is the one from the other stave. The
notes are stretched or compressed (in position when printing and in time when
generating a MIDI file) to make the bar lengths match.
.subsection "[Topmargin]"
.index "&%[topmargin]%&"
.index "page" "top margin"
.index "margin" "top"
This directive provides a way of changing the value given by the &%topmargin%&
heading directive for a single page only. If there is more than one occurrence
on the same page, the last value is used. To leave 30 points at the top of one
particular page, for example, use &%[topmargin 30]%& in any bar on that page.
.subsection "[Transpose]"
.index "&%[transpose]%&"
.index "transposition" "for one stave"
The &%[transpose]%& directive specifies that the current stave is to be
transposed by a number of semitones. A positive number transposes upwards; a
negative number transposes downwards. This directive normally appears at the
beginning of a stave's data. If transposition is also specified at an outer
level (either in the heading, or by using the &%-t%& command line option), the
transposition specified here adds to, rather than replaces it. Octave
transposition, as specified in a clef-setting directive or by the &%[octave]%&
directive, is also added to any general transposition.
.index "key signatures" "after transposition"
.index "transposition" "control of keys"
PMW does not transpose the current key signature that is already set for the
current stave when it encounters the &%[transpose]%& directive, but it does
transpose any subsequently encountered key signatures, except for the
non-transposing pseudo-key N. To ensure a transposed key signature for a
stave which has its own transposition specified, you should include the key
signature after &%[transpose]%&, even if it is the same key signature that is
specified in a heading directive for the whole piece.
.code
key G
[stave 1]
...
[endstave]
[stave 2 transpose 1 key G]
...
[endstave]
.endd
Note that it is the &'old'& key signature that is specified. In this example it
is transposed to become A-flat. Further details about transposition of notes
are given in section &<<SECTtransposition>>&, and details of the transposition
of chord names are given in section &<<SUBSECTtranchordnames>>&.
.subsection "[Transposedacc]"
.index "&%[transposedacc]%&"
.index "accidentals" "forcing transposed"
This directive must be followed by one of the words `force' or `noforce'. It
changes the option for forcing the printing of an accidental on a transposed
note when there was an accidental on the original, even if the accidental is
not strictly needed (&R; &<<SECTtransposition>>&).
.subsection "[Treble]"
.index "&%[treble]%&"
This specifies a treble clef (&R; &<<SECTclef>>&).
.subsection "[Trebledescant]"
.index "&%[trebledescant]%&"
This specifies a treble clef with a little `8' printed above it (&R;
&<<SECTclef>>&).
.subsection "[Trebletenor]"
.index "&%[trebletenor]%&"
This specifies a treble clef with a little `8' printed below it (&R;
&<<SECTclef>>&).
.subsection "[TrebletenorB]"
.index "&%[trebletenorB]%&"
This specifies a clef that is exactly like the trebletenor clef, except that
the little `8' is printed enclosed in parentheses.
.subsection "[Tremolo]"
.index "&%[tremolo]%&"
.index "tremolo" "between notes"
.index "notes" "tremolo between"
It is possible to print tremolo marks that appear as beams between notes
that are not normally beamed, or as disconnected beams between notes.
This is requested by placing the stave directive &%[tremolo]%& between the two
notes. There are two optional qualifiers: &`/x`& followed by a number specifies
the number of beams to draw, and &`/j`& followed by a number specifies the
number of beams that are to be joined to the note stems. The default is to
draw two beams, neither of which is joined to the stems.
.code
g [tremolo] b
.endd
This example prints two crotchets, with two disconnected beams between them.
.code
G [tremolo/x3/j3] B
.endd
This example prints two minims, joined by three beams. The &`/j`& qualifier
should not be used with breves or semibreves. For the most commonly encountered
tremolos, it is necessary to print a note of the `wrong' length. For example, a
tremolo that lasts for the length of a crotchet is printed as two crotchets, at
the positions two quavers would occupy, with tremolo bars between them. This
effect can be achieved by using the masquerading feature described in section
&<<SUBSECTnoteexpr>>&.
The &%[tremolo]%& directive must appear between two notes in a bar. It is
ignored if it appears at the beginning or end of a bar, or if it is preceded or
followed by a rest. It assumes that the notes are of the same kind, and have
their stems in the same direction. Notes with flags should not be used, though
tremolos can be added underneath the normal beams of a beamed group if
necessary.
.subsection "[Tripletize]"
.index "&%[tripletize]%&"
This directive enables and disables `tripletizing', which causes certain
groups of regularly notated notes to be positioned (and played if MIDI is
generated) as triplets. Details are given in section &<<SUBSECTtripletize>>&.
.subsection "[Triplets]" SUBSECTtriplets
.index "irregular note groups" "suppressing the number"
.index "irregular note groups" "forcing position"
.index "irregular note groups" "forcing brackets"
.index "&%[triplets]%&"
This directive is used to control the printing of triplet and other irregular
note group marks. Despite its name, it applies to all irregular note groups. It
must be followed by one of the words `on', `off', `above', `below', `bracket',
`nobracket, or `auto'. `On' and `off' are used to control the printing of the
`3', with or without a bracket, above or below a group of triplets (or
equivalent for other groups). When `off' is specified, nothing is printed. Note
that the qualifier &`/x`& can be used to suppress printing for an individual
triplet, or to enable it, if it has been disabled by the &%[triplets]%&
directive. The other words set default options for printing irregular note
groups, and they are independent of each other.
.code
[triplets above]
.endd
This example causes all the irregular note marks to be printed above the notes,
but (unlike the &`/a`& option on an individual group) it does not specify
whether a horizontal bracket should be drawn. The words `above' and `below' can
be followed by a dimension, to set a fixed vertical position for all subsequent
irregular note group marks. If the dimension is preceded by &`+`& or &`-`&,
this does not set a fixed position, but provides a default vertical adjustment
for subsequent irregular groups.
.code
[triplets above +4]
.endd
This example causes subsequent marks to be printed four points higher than they
would otherwise appear. Brackets can be forced or inhibited by means of
`bracket' and `nobracket'. If neither has been specified, a bracket is drawn
unless the note group is beamed.
The `auto' option resets both the position and the bracketing options to their
initial states, where the marks may be printed above or below the notes,
depending on their pitch, and the bracket is omitted if the notes are beamed.
Options given on an individual note group override the defaults set by the
&%[triplets]%& directive. Note that the use of &`/a`& or &`/b`& forces a
bracket to be drawn, unless followed by &`/n`&.
.subsection "[Ulevel] and [ulhere]" SUBSECTulevelhere
.index "&%[ulevel]%&"
.index "&%[ulhere]%&"
.index "underlay" "level"
.index "level" "of underlay"
For each stave that it prints, PMW computes a default level at which to print
underlay text. The standard position for this level (the base line level for
the text) is 11 points below the bottom line of the stave, but a lower level
may be chosen if there are low notes on the stave. There are two different ways
of changing this level. The &%[ulhere]%& directive specifies a temporary change
for the current line, and the &%[ulevel]%& directive sets an absolute level to
be used until further notice.
&%[Ulhere]%& takes a positive or negative number as an argument. This is
interpreted as a number of points to add to the automatically computed level
for the line in which the current bar appears.
.code
[ulhere -2]
.endd
This example has the effect of lowering the current underlay line by two
points. If a subsequent occurrence of &%[ulhere]%& appears in the same line for
the same stave, it is accepted if its argument is negative and specifies a
lower level than the previous one, or if its argument is positive and all
previous ones were positive and it is greater than any of them. &%[Ulhere]%&
has no effect if an absolute underlay level is being forced by means of the
&%[ulevel]%& directive, which sets a level relative to the bottom of the stave.
.code
[ulevel -15]
.endd
This example sets a level fifteen points the bottom of the stave. The
&%[ulevel]%& directive takes effect for the text that is printed under all the
notes that follow it, even if the text was input earlier as part of a
multi-syllable input string.
&%[Ulevel]%& may appear as often as necessary; its effect lasts until the end
of the movement or its next appearance. However, if &%[ulevel]%& appears with
an asterisk for an argument, the underlay level reverts to the value
automatically selected by PMW, and any subsequent &%[ulhere]%& directives are
honoured.
.subsection "[Ultextsize]"
.index "&%[ultextsize]%&"
.index "underlay" "text size"
This directive must be followed by a number in the range 1 to 20. It selects
the default size to be used for underlay text on the current stave. The actual
font sizes that correspond to the twenty numbers are set by the &%textsizes%&
heading directive. If this directive is not used, the size set by the
&%underlaysize%& heading directive (which is different from any of the sizes
set by &%textsizes%&) is used. &%[Ultextsize]%& is normally needed only if you
want different sizes of underlay text on different staves.
.subsection "[Unbreakbarline]"
.index "&%[unbreakbarline]%&"
.index "bar lines" "breaking"
An occurrence of this directive causes the bar line at the end of the current
bar to be extended downwards onto the stave below. This could be used, for
example, to print a double barline right through a system at the end of a verse
or other important point in a choral piece, where the barlines are normally
broken after each stave. See also &%[breakbarline]%&.
.subsection "[Underlayfont]"
.index "&%[underlayfont]%&"
.index "fonts" "default for underlay"
.index "underlay" "default font"
The default typeface for underlay text that is printed with a stave can be set
for an individual stave by means of the &%[underlayfont]%& directive. This
directive takes as its argument one of the standard font names.
.code
[underlayfont extra 3]
.endd
This example supposes that the third extra font has been defined for use in
underlay text. The default typeface for underlay text is roman. In any given
text string it is always possible to change typeface by using the appropriate
escape sequence.
.subsection "[Xline]"
See &%[line]%& (&R; &<<SUBSECTline>>&) and also section &<<SUBSECTxslur>>&.
.subsection "[Xslur]"
See section &<<SUBSECTxslur>>&.
.index-to I07
.index-to I08
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.tocsubsecton
.chapter "Characters in text fonts" CHAPunifont
.index "Unicode" "character list"
.index "fonts" "Unicode characters"
.index "PostScript" "Unicode characters"
.index "accented characters in strings" "list of"
PostScript text fonts such as &'Times-Roman'& that use the Adobe standard
encoding contain over 300 printing characters. From release 4.10, PMW gives
access to all these characters by making use of Unicode encoding, which allows
for character codes that are greater than 255. There are several ways in which
characters other than the standard ASCII set can be represented in PMW text
strings; these are described in section &<<SUBSECTescaped>>&. This chapter
lists all the characters in the PostScript standard text fonts, with their
Unicode values (in hexadecimal, as is conventional), their PMW escape sequences
when defined, and their PostScript character names. However, some of these
characters may be missing in older fonts.
The use of the escape sequence &`\fi`& for the `fi' ligature is no longer
necessary, because PMW now automatically uses the ligature for variable width
fonts when it is available. The escape sequence is retained for backwards
compatibility. PMW does not use the `fl' ligature automatically.
Printing characters whose code values are less than 007F (127) are ASCII
characters that correspond to the keys on the computer keyboard. However, in
PMW strings, the literal characters grave accent and single quote (codes 0060
and 0027) are converted into Unicode characters 2018 and 2019 so that they
print as opening and closing quotes, respectively. If you want to print a grave
accent or an ASCII single quote character, you can use the appropriate escape
sequences &`\``& and &`\'`& or a numerical escape sequence such as &`\x60\`&.
.rule
.leadon 2
.itable none 0 0 4 50 centre 60 centre 80 left 100 centre
.row &*Unicode*& &*Escape*& "&*PS name*&" &*Character*&
.row &`0020`& "" space ""
.row &`0021`& "" exclam !
.row &`0022`& "" quotedbl "
.row &`0023`& "" numbersign #
.row &`0024`& "" dollar $
.row &`0025`& "" percent %
.row &`0026`& "" ampersand &
.row &`0027`& &`\' `& quotesingle '
.row &`0028`& "" parenleft (
.row &`0029`& "" parenright )
.row &`002A`& "" asterisk *
.row &`002B`& "" plus +
.row &`002C`& "" comma ,
.row &`002D`& "" hyphen -
.row &`002E`& "" period .
.row &`002F`& "" slash /
.row &`0030`& "" zero 0
.row ↓ "" ↓ ↓
.row &`0039`& "" nine 9
.row &`003A`& "" colon :
.row &`003B`& "" semicolon ;
.row &`003C`& "" less <
.row &`003D`& "" equal =
.row &`003E`& "" greater >
.row &`003F`& "" question ?
.row &`0040`& "" at @
.row &`0041`& "" A A
.row ↓ "" ↓ ↓
.row &`005A`& "" Z Z
.row &`005B`& "" bracketleft [
.row &`005C`& &`\\ `& backslash \
.row &`005D`& "" bracketright ]
.row &`005E`& "" asciicircum ^
.row &`005F`& "" underscore _
.row &`0060`& &`\` `& grave `
.row &`0061`& "" a a
.row ↓ "" ↓ ↓
.row &`007A`& "" z z
.row &`007B`& "" braceleft {
.row &`007C`& "" bar |
.row &`007D`& "" braceright }
.row &`007E`& "" asciitilde ~
.row &`00A1`& "" exclamdown ¡
.row &`00A2`& "" cent ¢
.row &`00A3`& "" sterling £
.row &`00A4`& "" currency ¤
.row &`00A5`& "" yen ¥
.row &`00A6`& "" brokenbar ¦
.row &`00A7`& "" section §
.row &`00A8`& "" dieresis ¨
.row &`00A9`& &`\c)`& copyright ©
.row &`00AA`& "" ordfeminine ª
.row &`00AB`& "" guillemotleft «
.row &`00AC`& "" logicalnot ¬
.row &`00AE`& "" registered ®
.row &`00AF`& "" macron ¯
.row &`00B0`& "" degree °
.row &`00B1`& "" plusminus ±
.row &`00B2`& "" twosuperior ²
.row &`00B3`& "" threesuperior ³
.row &`00B4`& "" acute ´
.row &`00B5`& "" mu µ
.row &`00B6`& "" paragraph ¶
.row &`00B7`& "" bullet ·
.row &`00B8`& "" cedilla ¸
.row &`00B9`& "" onesuperior ¹
.row &`00BA`& "" ordmasculine º
.row &`00BB`& "" guillemotright »
.row &`00BC`& "" onequarter ¼
.row &`00BD`& "" onehalf ½
.row &`00BE`& "" threequarters ¾
.row &`00BF`& &`\? `& questiondown ¿
.row &`00C0`& &`\A``& Agrave À
.row &`00C1`& &`\A'`& Aacute Á
.row &`00C2`& &`\A^`& Acircumflex Â
.row &`00C3`& &`\A~`& Atilde Ã
.row &`00C4`& &`\A.`& Adieresis Ä
.row &`00C5`& &`\Ao`& Aring Å
.row &`00C6`& "" AE Æ
.row &`00C7`& &`\C,`& Ccedilla Ç
.row &`00C8`& &`\E``& Egrave È
.row &`00C9`& &`\E'`& Eacute É
.row &`00CA`& &`\E^`& Ecircumflex Ê
.row &`00CB`& &`\E.`& Edieresis Ë
.row &`00CC`& &`\I``& Igrave Ì
.row &`00CD`& &`\I'`& Iacute Í
.row &`00CE`& &`\I^`& Icircumflex Î
.row &`00CF`& &`\I.`& Idieresis Ï
.row &`00D0`& "" Eth Ð
.row &`00D1`& &`\N~`& Ntilde Ñ
.row &`00D2`& &`\O``& Ograve Ò
.row &`00D3`& &`\O'`& Oacute Ó
.row &`00D4`& &`\O^`& Ocircumflex Ô
.row &`00D5`& &`\O~`& Otilde Õ
.row &`00D6`& &`\O.`& Odieresis Ö
.row &`00D7`& "" multiply ×
.row &`00D8`& &`\O/`& Oslash Ø
.row &`00D9`& &`\U``& Ugrave Ù
.row &`00DA`& &`\U'`& Uacute Ú
.row &`00DB`& &`\U^`& Ucircumflex Û
.row &`00DC`& &`\U.`& Udieresis Ü
.row &`00DD`& &`\Y'`& Yacute Ý
.row &`00DE`& "" Thorn Þ
.row &`00DF`& &`\ss`& germandbls ß
.row &`00E0`& &`\a``& agrave à
.row &`00E1`& &`\a'`& aacute á
.row &`00E2`& &`\a^`& acircumflex â
.row &`00E3`& &`\a~`& atilde ã
.row &`00E4`& &`\a.`& adieresis ä
.row &`00E5`& &`\ao`& aring å
.row &`00E6`& "" ae æ
.row &`00E7`& &`\c,`& ccedilla ç
.row &`00E8`& &`\e``& egrave è
.row &`00E9`& &`\e'`& eacute é
.row &`00EA`& &`\e^`& ecircumflex ê
.row &`00EB`& &`\e.`& edieresis ë
.row &`00EC`& &`\i``& igrave ì
.row &`00ED`& &`\i'`& iacute í
.row &`00EE`& &`\i^`& icircumflex î
.row &`00EF`& &`\i.`& idieresis ï
.row &`00F0`& "" eth ð
.row &`00F1`& &`\n~`& ntilde ñ
.row &`00F2`& &`\o``& ograve ò
.row &`00F3`& &`\o'`& oacute ó
.row &`00F4`& &`\o^`& ocircumflex ô
.row &`00F5`& &`\o~`& otilde õ
.row &`00F6`& &`\o.`& odieresis ö
.row &`00F7`& "" divide ÷
.row &`00F8`& &`\o/`& oslash ø
.row &`00F9`& &`\u``& ugrave ù
.row &`00FA`& &`\u'`& uacute ú
.row &`00FB`& &`\u^`& ucircumflex û
.row &`00FC`& &`\u.`& udieresis ü
.row &`00FD`& &`\y'`& yacute ý
.row &`00FE`& "" thorn þ
.row &`00FF`& &`\y.`& ydieresis ÿ
.row &`0100`& &`\A-`& Amacron Ā
.row &`0101`& &`\a-`& amacron ā
.row &`0102`& &`\Au`& Abreve Ă
.row &`0103`& &`\au`& abreve ă
.row &`0104`& "" Aogonek Ą
.row &`0105`& "" aogonek ą
.row &`0106`& &`\C'`& Cacute Ć
.row &`0107`& &`\c'`& cacute ć
.row &`0108`& &`\C^`& Ccircumflex Ĉ
.row &`0109`& &`\c^`& ccircumflex ĉ
.row &`010A`& "" Cdotaccent Ċ
.row &`010B`& "" cdotaccent ċ
.row &`010C`& &`\Cv`& Ccaron Č
.row &`010D`& &`\cv`& ccaron č
.row &`010E`& &`\Dv`& Dcaron Ď
.row &`010F`& &`\dv`& dcaron ď
.row &`0110`& &`\D-`& Dcroat Đ
.row &`0111`& &`\D-`& dcroat đ
.row &`0112`& &`\E-`& Emacron Ē
.row &`0113`& &`\e-`& emacron ē
.row &`0114`& &`\Eu`& Ebreve Ĕ
.row &`0115`& &`\eu`& ebreve ĕ
.row &`0116`& "" Edotaccent Ė
.row &`0117`& "" edotaccent ė
.row &`0118`& "" Eognonek Ę
.row &`0119`& "" eogonek ę
.row &`011A`& &`\Ev`& Ecaron Ě
.row &`011B`& &`\ev`& ecaron ě
.row &`011C`& &`\G^`& Gcircumflex Ĝ
.row &`011D`& &`\g^`& gcircumflex ĝ
.row &`011E`& &`\Gu`& Gbreve Ğ
.row &`011F`& &`\gu`& gbreve ğ
.row &`0120`& "" Gdotaccent Ġ
.row &`0121`& "" gdotaccent ġ
.row &`0122`& "" Gcommaaccent Ģ
.row &`0123`& "" gcommaaccent ģ
.row &`0124`& &`\H^`& Hcircumflex Ĥ
.row &`0125`& &`\h^`& hcircumflex ĥ
.row &`0126`& "" Hbar Ħ
.row &`0127`& "" hbar ħ
.row &`0128`& &`\I~`& Itilde Ĩ
.row &`0129`& &`\i~`& itilde ĩ
.row &`012A`& &`\I-`& Imacron Ī
.row &`012B`& &`\i-`& imacron ī
.row &`012C`& &`\Iu`& Ibreve Ĭ
.row &`012D`& &`\iu`& ibreve ĭ
.row &`012E`& "" Iogonek Į
.row &`012F`& "" iogonek į
.row &`0130`& "" Idotaccent İ
.row &`0131`& "" dotlessi ı
.row &`0132`& "" IJ IJ
.row &`0133`& "" ij ij
.row &`0134`& &`\J^`& Jcircumflex Ĵ
.row &`0135`& &`\j^`& jcircumflex ĵ
.row &`0136`& "" Kcommaaccent Ķ
.row &`0137`& "" kcommaaccent ķ
.row &`0138`& "" kgreenlandic ĸ
.row &`0139`& &`\L'`& Lacute Ĺ
.row &`013A`& &`\l'`& lacute ĺ
.row &`013B`& "" Lcommaaccent Ļ
.row &`013C`& "" lcommaaccent ļ
.row &`013D`& &`\Lv`& Lcaron Ľ
.row &`013E`& &`\lv`& lcaron ľ
.row &`013F`& "" Ldot Ŀ
.row &`0140`& "" ldot ŀ
.row &`0141`& &`\l/`& Lslash Ł
.row &`0142`& &`\l/`& lslash ł
.row &`0143`& &`\N'`& Nacute Ń
.row &`0144`& &`\n'`& nacute ń
.row &`0145`& "" Ncommaaccent Ņ
.row &`0146`& "" ncommaaccent ņ
.row &`0147`& &`\Nv`& Ncaron Ň
.row &`0148`& &`\nv`& ncaron ň
.row &`0149`& "" napostrophe ʼn
.row &`014A`& "" Eng Ŋ
.row &`014B`& "" eng ŋ
.row &`014C`& &`\O-`& Omacron Ō
.row &`014D`& &`\o-`& omacron ō
.row &`014E`& &`\Ou`& Obreve Ŏ
.row &`014F`& &`\ou`& obreve ŏ
.row &`0150`& "" Ohungrumlaut Ő
.row &`0151`& "" ohungrumlaut ő
.row &`0152`& "" OE Œ
.row &`0153`& "" oe œ
.row &`0154`& &`\R'`& racute Ŕ
.row &`0156`& "" Rcommaaccent Ŗ
.row &`0157`& "" rcommaaccent ŗ
.row &`0158`& &`\Rv`& Rcaron Ř
.row &`0159`& &`\rv`& rcaron ř
.row &`015A`& &`\S'`& Sacute Ś
.row &`015B`& &`\s'`& sacute ś
.row &`015C`& &`\S^`& Scircumflex Ŝ
.row &`015D`& &`\s^`& scircumflex ŝ
.row &`015E`& &`\S,`& Scedilla Ş
.row &`015F`& &`\s,`& scedilla ş
.row &`0160`& &`\Sv`& Scaron Š
.row &`0161`& &`\sv`& scaron š
.row &`0162`& &`\T,`& Tcedilla Ţ
.row &`0163`& &`\t,`& tcedilla ţ
.row &`0164`& &`\Tv`& Tcaron Ť
.row &`0165`& &`\tv`& tcaron ť
.row &`0166`& "" Tbar Ŧ
.row &`0167`& "" tbar ŧ
.row &`0168`& &`\U~`& Utilde Ũ
.row &`0169`& &`\u~`& utilde ũ
.row &`016A`& &`\U-`& Umacron Ū
.row &`016B`& &`\u-`& umacron ū
.row &`016C`& &`\Uu`& Ubreve Ŭ
.row &`016D`& &`\uu`& ubreve ŭ
.row &`016E`& &`\Uo`& Uring Ů
.row &`016F`& &`\uo`& uring ů
.row &`0170`& "" Uhungrumlaut Ű
.row &`0171`& "" uhungrumlaut ű
.row &`0172`& "" Uogonek Ų
.row &`0173`& "" uogonek ų
.row &`0174`& &`\W^`& Wcircumflex Ŵ
.row &`0175`& &`\w^`& wcircumflex ŵ
.row &`0176`& &`\Y^`& Ycircumflex Ŷ
.row &`0177`& &`\y^`& ycircumflex ŷ
.row &`0178`& &`\Y.`& Ydieresis Ÿ
.row &`0179`& &`\Z'`& Zacute Ź
.row &`017A`& &`\z'`& zacute ź
.row &`017B`& "" Zdotaccent Ż
.row &`017C`& "" zdotaccent ż
.row &`017D`& &`\Zv`& Zcaron Ž
.row &`017E`& &`\zv`& zcaron ž
.row &`017F`& "" longs ſ
.row &`0192`& "" florin ƒ
.row &`0218`& "" Scommaaccent Ș
.row &`0219`& "" scommaaccent ș
.row &`021A`& "" Tcommaaccent Ț
.row &`021B`& "" tcommaaccent ț
.row &`0302`& "" circumflex ̂
.row &`0303`& "" tilde ̃
.row &`0306`& "" breve ̆
.row &`0307`& "" dotaccent ̇
.row &`030A`& "" ring ̊
.row &`030B`& "" hungrumlaut ̋
.row &`030C`& "" caron ̌
.row &`0326`& "" commaaccent ̦
.row &`0328`& "" ogonek ̨
.row &`0394`& "" Delta Δ
.row &`2013`& &`\--`& endash –
.row &`2014`& &`\---`& emdash —
.row &`2018`& "" quoteleft ‘
.row &`2019`& "" quoteright ’
.row &`201A`& "" quotesinglbase ‚
.row &`201C`& &`\<<`& quotedblleft “
.row &`201D`& &`\>>`& quotedblright ”
.row &`201E`& "" quotedblbase „
.row &`2020`& "" dagger †
.row &`2021`& "" daggerdbl ‡
.row &`2026`& "" ellipsis …
.row &`2027`& "" periodcentred ‧
.row &`2031`& "" perthousand ‱
.row &`2039`& "" guilsinglleft ‹
.row &`203A`& "" guilsinglright ›
.row &`2044`& "" fraction ⁄
.row &`20AC`& "" Euro €
.row &`2122`& "" trademark ™
.row &`2202`& "" partialdiff ∂
.row &`2211`& "" summation ∑
.row &`2212`& "" minus −
.row &`221A`& "" radical √
.row &`221E`& "" infinity ∞
.row &`2260`& "" notequal ≠
.row &`2264`& "" lessequal ≤
.row &`2265`& "" greaterequal ≥
.row &`25CA`& "" lozenge ◊
.row &`FB01`& &`\fi`& fi fi
.row &`FB02`& &`\fl`& fl fl
.endtable
.leadoff
.rule
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "The PMW music font" CHAPfont
.index "music font characters"
.index "fonts" "music font characters"
.index "fonts" "PMW-Music"
.index "PMW-Music font"
.index "PostScript" "music font"
This chapter contains a list of all the characters in the PMW-Music font.
Characters from this font can be referenced by number in character strings
(&R; &<<SUBSECTmusicchars>>&). Those with character codes less than 127 can
also be referenced by switching to the music font and entering the
corresponding ASCII character or giving the Unicode code point if there is one.
The following three examples produce the same effect:
.code
"\rm\this clef \*33\ is treble"
"\rm\this clef \mu\!\rm\ is treble"
"\rm\this clef \mu\\x1D11E\\rm\ is treble"
.endd
The second method is more convenient when a whole sequence of music font
characters is required. Character 33 in the music font (which corresponds to an
exclamation mark in ASCII) is the treble clef.
Most of the characters in the music font print `on the baseline' in the
typographic sense, though some have `descenders'. The only exceptions to this
are the constituent parts of notes, such as stems and quaver tails. The
typographic character widths, which may or may not be used by PMW when setting
music, are mostly set to values that are reasonable when these characters are
printed as part of a text string.
Here is a list of the characters in the font, giving both their numbers (in
decimal) and, where relevant, the corresponding ASCII characters and Unicode
code points. The printing width is also given, as a fraction of the font size.
For example, when a 10-point treble clef is printed, the printing position is
advanced to the right by 15 points.
.rule
.leadon
.itable none 0 0 6 36 centre &&&
36 centre &&&
48 right &&&
48 "char"" charoff=""40" &&&
40 centre &&&
210 left
.literal xml
<row>
<entry><emphasis role="bold">ASCII</emphasis></entry>
<entry><emphasis role="bold">Code</emphasis></entry>
<entry><emphasis role="bold">Unicode</emphasis></entry>
<entry align="centre"><emphasis role="bold">Width</emphasis></entry>
<entry><emphasis role="bold">Char</emphasis></entry>
<entry><emphasis role="bold">Comment</emphasis></entry>
</row>
.literal off
.row "" 32 &`00020`& 0.75 "" "space"
.row &`!`& 33 &`1D11E`& 1.5 &{{{w!x}}}& "treble clef"
.row &`"`& 34 &`1D122`& 1.5 &{{{www"xxx}}}& "bass clef"
.row &`#`& 35 &`1D121`& 1.5 &{{{ww#xx}}}& "alto clef"
.row &`
gemini - kennedy.gemi.dev
& 36 &`1D1AF`& 1.0 &{{vv$~}}& "piano end pedal sign"
.row &`%`& 37 &`0266F`& 0.6 &{{%}}& "sharp"
.row &`&&`& 38 &`1D12A`& 0.6 &{{&}}& "double sharp"
.row &`'`& 39 &`0266D`& 0.5 &{{vv'~}}& "flat"
.row &`(`& 40 &`0266E`& 0.45 &{{(}}& "natural"
.row &`)`& 41 &`1D110`& 0.0 &{{)}}& "fermata (over)"
.row &`*`& 42 &`1D13A`& 0.66 &{{*}}& "breve rest"
.row &`+`& 43 &`1D13B`& 0.66 &{{+}}& "semibreve rest"
.row &`,`& 44 &`1D13C`& 0.66 &{{,}}& "minim rest"
.row &`-`& 45 &`1D13D`& 0.66 &{{vv-~}}& "crotchet rest"
.row &`.`& 46 &`1D13E`& 0.59 &{{.}}& "quaver rest"
.row &`/`& 47 &`1D111`& 0.0 &{{/}}& "fermata (under)"
.row &`0`& 48 &`1D129`& 3.5 &{{0}}& "many bars rest"
.row &`1`& 49 &`1D15C`& 1.34 &{{1}}& "breve"
.row &`2`& 50 &`1D15D`& 0.84 &{{2}}& "semibreve"
.row &`3`& 51 &`1D15E`& 0.84 &~&~&{{3}}& "up minim"
.row &`4`& 52 "" 0.84 &{{4}}&&~ "down minim"
.row &`5`& 53 &`1D15F`& 0.84 &~&~&{{5}}& "up crotchet"
.row &`6`& 54 "" 0.84 &{{6}}&&~ "down crotchet"
.row &`7`& 55 &`1D160`& 1.2 &~&~&{{7}}& "up quaver"
.row &`8`& 56 "" 0.84 &{{8}}&&~ "down quaver"
.row &`9`& 57 &`1D161`& 1.2 &~&~&{{9}}& "up semiquaver"
.row &`:`& 58 "" 0.84 &{{:}}&&~ "down semiquaver"
.row &`;`& 59 "" 0.0 &{{ww;xx}}& "repeatable tail"
.row &`<`& 60 "" 0.0 &{{xx<ww}}& "repeatable tail"
.row &`=`& 61 "" 0.0 &{{=}}& "ledger line"
.row &`>`& 62 "" 0.0 &{{>}}& "vertical dot (above note on base line)"
.row &`?`& 63 "" 0.4 &{{?}}& "horizontal dot"
.row &`@`& 64 &`1D100`& 0.6 &{{@}}& "bar line"
.row &`A`& 65 &`1D101`& 0.76 &{{A}}& "double bar line"
.row &`B`& 66 "" 0.76 &{{B}}& "thick bar line"
.row &`C`& 67 &`1D11A`& 1.0 &{{wwCxx}}& "normal stave"
.row &`D`& 68 &`1D116`& 1.0 &{{wwDxx}}& "percussion stave"
.row &`E`& 69 &`1D16E`& 0.0 &{{wwExx}}& "up quaver tail"
.row &`F`& 70 "" 10.0 "" "long stave"
.row &`G`& 71 "" 10.0 "" "long percussion stave"
.row &`H`& 72 "" 0.0 &{{xxHww}}& "down quaver tail"
.row &`I`& 73 "" 0.6 &{{I}}& "for repeat marks"
.row &`J`& 74 &`1D165`& 0.0 &{{wJx}}& "upward note stem"
.row &`K`& 75 "" 0.0 &{{xKw}}& "downward note stem"
.row &`L`& 76 &`1D158`& 0.84 &{{L}}& "solid notehead"
.row &`M`& 77 &`1D157`& 0.84 &{{M}}& "minim notehead"
.row &`N`& 78 &`1D112`& 0.6 &{{N}}& "pause comma"
.row &`O`& 79 "" 0.0 &{{O}}& "mordent"
.row &`P`& 80 "" 0.0 &{{P}}& "double mordent"
.row &`Q`& 81 "" 0.0 &{{Q}}& "inverted mordent"
.row &`R`& 82 "" 0.0 &{{R}}& "double inverted mordent"
.row &`S`& 83 &`1D197`& 0.0 &{{S}}& "turn"
.row &`T`& 84 &`1D170`& 0.0 &{{T}}& "horizontal bar accent"
.row &`U`& 85 &`1D181`& 0.0 &{{U}}& "accent"
.row &`V`& 86 &`1D113`& 1.0 &{{V}}& "caesura"
.row &`W`& 87 &`1D19C`& 0.0 &{{W}}& "accent"
.row &`X`& 88 "" 0.0 &{{X}}& "accent"
.row &`Y`& 89 "" 0.0 &{{Y}}& "accent"
.row &`Z`& 90 &`1D17E`& 0.0 &{{Z}}& "accent"
.row &`[`& 91 &`1D104`& 0.6 &{{w[x}}& "dashed bar line"
.row &`\`& 92 "" 1.0 &{{w\x}}& "single-line caesura"
.row &`]`& 93 "" 0.0 &{{]}}& "for use with clefs"
.row &`^`& 94 &`1D134`& 1.0 &{{w^x}}& "`common' time"
.row &`_`& 95 &`1D135`& 1.0 &{{w_x}}& "`cut' time"
.row &```& 96 "" 0.4 &{{`}}& "suitable for following &{{ˆ}}&"
.row &`a`& 97 "" 0.0 &{{a}}& "thumb (above)"
.row &`b`& 98 "" 0.0 &{{b}}& "thumb (below)"
.row &`c`& 99 &`1D10C`& 1.5 &{{wcx}}& "dal segno"
.row &`d`& 100 &`1D10B`& 1.5 &{{wdx}}& "dal segno"
.row &`e`& 101 &`1D1AA`& 0.0 &{{e}}& "down bow"
.row &`f`& 102 "" 0.0 &{{f}}& "inverted down bow"
.row &`g`& 103 &`1D1AB`& 0.0 &{{g}}& "up bow"
.row &`h`& 104 "" 0.0 &{{h}}& "inverted up bow"
.row &`i`& 105 &`1D199`& 0.0 &{{i}}& "inverted turn"
.row &`j`& 106 "" 0.55 &{{j}}& "for figured bass"
.row &`k`& 107 "" 0.76 &{{k}}& "for figured bass"
.row &`l`& 108 &`1D1BA`& 0.84 &{{l}}& "solid diamond notehead"
.row &`m`& 109 &`1D1B9`& 0.84 &{{m}}& "diamond notehead"
.row &`n`& 110 "" 0.84 &{{n}}& "cross notehead"
.row &`o`& 111 "" 0.0 &{{wox}}& "up stem for cross"
.row &`p`& 112 "" 0.0 &{{xpw}}& "down stem for cross"
.row &`q`& 113 "" 0.0 &{{q}}& "up stem fragment, 0.2 to 0.4"
.row &`r`& 114 "" 0.0 &{{r}}& "down stem fragment, 0 to -0.2"
.row &`s`& 115 "" 0.5 &{{s}}& "for figured bass"
.row &`t`& 116 "" 0.55 &{{t}}& "dot for guitar grid"
.row &`u`& 117 "" 0.55 &{{u}}& "circle for guitar grid"
.row &`v`& 118 "" 0.0 "" "prints nothing; moves down by 0.1"
.row &`w`& 119 "" 0.0 "" "prints nothing; moves down by 0.4"
.row &`x`& 120 "" 0.0 "" "prints nothing; moves up by 0.4"
.row &`y`& 121 "" -0.1 "" "prints nothing; moves left by 0.1"
.row &`z`& 122 "" 0.1 "" "prints nothing; moves right by 0.1"
.row &`{`& 123 "" -0.33 "" "prints nothing; moves left by 0.33"
.row &`|`& 124 "" 0.0 "" "prints nothing; moves down by 0.2"
.row &`}`& 125 "" 0.55 "" "prints nothing; moves right by 0.55"
.row &`~`& 126 "" 0.0 "" "prints nothing; moves up 0.2"
.row "" 127 "" - "" "unassigned"
.row "" 128 "" 0.6 &{{w€x}}& "tick"
.row "" 129 "" 0.0 &{{wwxx}}& "accaciatura bar"
.row "" 130 "" 0.0 &{{xx~‚wwvv}}& "accaciatura bar"
.row "" 131 &`1D11C`& 0.0 &{{ww{{{{{{{ƒxx}}& "grid for guitar chords"
.row "" 132 &`1D1A0`& 0.6 &{{„}}& "short bar line"
.row "" 133 "" 0.0 &{{…}}& "breath"
.row "" 134 "" 0.0 &{{†}}& "ring above"
.row "" 135 "" 0.0 &{{‡}}& "cross"
.row "" 136 &`1D196`& 0.8 &{{ˆ}}& "trill"
.row "" 137 "" 0.6 &{{‰}}& "short vertical caesura"
.row "" 138 "" 0.6 &{{Š}}& "long vertical caesura"
.leadoff
.row &D15; &D15;139 "" &D15;0.35 &D15;&{{‹}}& "&{{w}}&&BT15;"
.row &D15; &D15;140 "" &D15;0.35 &D15;&{{Œ}}& "&BM15;&~&~&~brackets for accidentals"
.row &D15; &D15;141 "" &D15;0.35 &D15;&{{}}& "&BM15;"
.row &D15; &D15;142 "" &D15;0.35 &D15;&{{Ž}}& "&BB15;"
.leadon
.row "" 143 &`1D10D`& 0.5 &{{}}& "for bar repetition"
.row "" 144 "" 0.0 &{{}}& "for bar repetition"
.row "" 145 "" 0.0 &{{‘}}& "for arpeggios &-- moves upwards by 0.4"
.row "" 146 &`1D167`& 0.0 &{{’}}& "tremolo bar &-- moves upwards by 0.4"
.row "" 147 &`1D1C8`& 1.0 &{{w“x}}& "old time signature"
.row "" 148 &`1D1C9`& 1.0 &{{w”x}}& "old time signature"
.row "" 149 "" 0.0 &{{x•w}}& "slur"
.row "" 150 "" 0.0 &{{x–w}}& "slur"
.row "" 151 "" 0.0 &{{w—x}}& "for splitting/joining staves"
.row "" 152 "" 0.0 &{{x˜w}}& "for splitting/joining staves"
.row "" 153 "" 1.0 &{{™}}& "inverted `common' time"
.row "" 154 "" 1.0 &{{š}}& "inverted `cut' time"
.row "" 155 "" 1.58 &{{›}}& "unison breve"
.row "" 156 "" 0.0 &{{œ}}& "`start of bar' accent"
.row "" 157 "" 0.35 &{{}}& "for bracketing &{]}&"
.row "" 158 "" 0.35 &{{ž}}& "for bracketing &{]}&"
.leadoff
.row &D15; &D15;159 "" &D15;0.33 &D15;&{{Ÿ}}& "&{{w}}&&BT15;"
.row &D15; &D15;160 "" &D15;0.33 &D15;&{{ }}& "&BM15;&~&~&~for &'8va'& lines etc."
.row &D15; &D15;161 "" &D15;0.33 &D15;&{{¡}}& "&BM15;"
.row &D15; &D15;162 "" &D15;0.33 &D15;&{{¢}}& "&BB15;"
.leadon
.row "" 163 &`1D1AE`& 1.4 &{{£}}& "piano pedal"
.row "" 164 "" 0.0 &{{¤}}& "for arpeggios &-- moves upwards by 0.4"
.row "" 165 "" 0.0 &{{¥}}& "for arpeggios &-- moves upwards (sic) by 0.4"
.row "" 166 "" 0.0 &{{¦}}& "harp nail symbol"
.row "" 167 "" 0.333 &{{§}}& "alternate bracket angle"
.row "" 168 "" 0.333 &{{¨}}& "alternate bracket angle"
.row "" 169 &`1D117`& 1.0 &~&~&~&~&~&{{w©x}}& "2-line stave"
.row "" 170 &`1D118`& 1.0 &{{wªx}}&&~&~&~&~&~&~&~ "3-line stave"
.row "" 171 &`1D119`& 1.0 &~&~&~&~&~&{{w«x}}& "4-line stave"
.row "" 172 &`1D11B`& 1.0 &{{w¬x}}&&~&~&~&~&~&~&~ "6-line stave"
.row "" 173 &`1D125`& 1.5 &{{ww­}}& "percussion clef"
.row "" 174 "" 1.5 &{{ww®xx}}& "old-style F clef"
.row "" 175 "" 1.5 &{{w¯x}}&&~&~&~&~&~ "old-style C clef"
.row "" 176 "" 0.0 &{{w°x}}& "bracket top"
.row "" 177 "" 0.0 &{{w±x}}& "bracket bottom"
.row "" 178 "" 1.0 &{{²}}& "symbol for pitch without duration (`direct')"
.row "" 179 "" 0.55 &{{³}}& "for figured bass"
.row "" 180 "" 0.75 &{{´}}& "major chord sign (jazz notation)"
.row "" 181 "" 0.675 &{{µ}}& "diminished chord sign"
.row "" 182 "" 0.675 &{{¶}}& "`half diminished' chord sign"
.row "" 183 "" 0.55 &{{·}}& "cross for guitar grid"
.row "" 184 "" 0.0 &{{¸}}& "thicker ledger line"
.row "" 185 "" -0.42 "" "prints nothing; moves left 0.42, up 0.4"
.row "" 186 "" -0.76 "" "prints nothing; moves left 0.76, down 0.4"
.row "" 187 "" 0.0 "" "prints nothing; moves up 1.2"
.row "" 188 "" 0.0 "" "prints nothing; moves down 1.2"
.row "" 189 "" 0.424 &{{½}}& "half sharp, Egyptian style"
.row "" 190 "" 0.5 &{{¾}}& "half sharp, Turkish style"
.row "" 191 "" 0.6 &{{¿}}& "half flat, Egyptian style"
.row "" 192 "" 0.6 &{{À}}& "half flat, Turkish style"
.row "" 193 "" 0.6 &{{Á}}& "pause comma, inverted for R-to-L music"
.row "" 194 "" 0.0 &{{Â}}& "staccatissimo"
.row "" 195 "" 0.0 &{{Ã}}& "staccatissimo, inverted"
.row "" 196 &`1D198`& 0.0 &{{Ä}}& "reversed turn"
.row "" 197 "" 0.0 &{{Å}}& "inverted reversed turn"
.row "" 198 "" 0.0 &{{Æ}}& "top half circle"
.row "" 199 "" 0.0 &{{Ç}}& "bottom half circle"
.row "" 247 "" 10.0 "" "long 2-line stave"
.row "" 248 "" 10.0 "" "long 3-line stave"
.row "" 249 "" 10.0 "" "long 4-line stave"
.row "" 250 "" 10.0 "" "long 6-line stave"
.endtable
.leadoff
.rule
.index "non-printing music characters"
The characters numbered 118&--126 and 185&--188 do not cause anything to be
printed; instead they just cause the current printing position to be moved by a
distance that depends on the point size of the font. The values given above are
the factors by which the font's point size must be multiplied in order to get
the relevant distance. For example, if a 10-point font is in use,
character number 119 (w) moves the current printing position down by 4 points.
If a space character (number 32) is printed from the music font, it moves the
printing position by 0.75 units to the right.
There is a discussion on the use of the special characters for printing guitar
chord grids in section &<<SUBSECTguitargrids>>&. The larger round and square
brackets (characters 139&--142) are designed so that they can be printed
directly before and after an accidental, except that for a flat they need to be
raised by one note pitch (2 points). The large circle characters have a
diameter of two stave spaces, and are intended for printing original time
signatures (see the example in section &<<SUBSECTtimefont>>&). The slanting
arrows are for use at the ends of staves when a stave containing multiple parts
is about to be split into two or more staves, and &'vice versa'&.
The slur characters are not used by PMW itself, but are for printing ties when
using note characters in text. The first is the correct width for two
successive note characters; the second is the correct width when the first note
is followed by a dot. Because they have zero width, they should be printed
before the notes.
.code
"\**m.\ = \mf\\149\\51\\53\"
.endd
This example prints as:&~&~ &{3?}& = &{•35}&
. ////////////////////////////////////////////////////////////////////////////
. ////////////////////////////////////////////////////////////////////////////
.chapter "The PMW-Alpha font" CHAPpmwalpha
.index "fonts" "PMW-Alpha"
.index "PMW-Alpha font"
Richard Hallas contributed an auxiliary font for use with PMW and other
programs. It is called PMW-Alpha, because it is designed for printing music
symbols in conjunction with normal alphabetic text. The font was originally
designed as an Acorn RISC OS font; the PostScript version was generated
automatically from the original. The characters that PMW-Alpha contains fall
into four classes:
.ilist
There is a set of letters such as &{-f-}& and &{-p-}& which are in a style
commonly seen in music, and which can be used to print dynamic marks.
.next
There is a set of digits in a style commonly seen in time signatures, together
with a matching plus sign.
.next
There is a set of fractions, suitable for use in organ registrations. There are
also two sets of small digits, one raised and one lowered, that can be used to
build additional fractions.
.next
There are small versions of many music characters such as notes, accidentals,
and clefs. These are at appropriate sizes for mixing with text fonts of the
same nominal size, which makes it easier to include them with text when using
desktop publishing programs.
.endlist
.section "Use of PMW-Alpha from within PMW"
Here is an example of some heading directives that could be used to make use of
the PMW-Alpha font from within PMW:
.code
Textfont extra 1 "PMW-Alpha"
Timefont extra 1