summaryrefslogtreecommitdiff
path: root/macros/musixtex/doc/musixdoc/lyrics.tex
blob: 41d52fa221dfc1537096c592bfc25020fc4ffbf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
\chapter{Lyrics}\index{lyrics}\label{lyrics}
\musixtex{} itself doesn't manage lyrics very well. You should use
\verb+musixlyr+ instead, a \musixtex\ extension package for lyrics handling by Rainer Dunker.
The \TeX~source and
\href{http://icking-music-archive.org/software/musixtex/add-ons/mxlyrdoc.pdf}
{\underline{documentation}}~are included in the \musixtex~distribution.

But first we recall briefly the older methods, which may still be useful when
only a small number of words are involved.

\section{Native lyrics method: placing single words}
\subsection{Native \musixtex\ commands for lyrics}
 \begin{enumerate}\setlength{\itemsep}{0ex}
 \item An obvious solution is to use the commands
\keyindex{zcharnote} (expanded to the right),
\keyindex{lcharnote} (expanded to the left),
\keyindex{ccharnote} (centered), to post the text at any position (computed in
\verb|\internote|s) with respect to the lower line of the current staff.
The pitch should be usually negative, to have the text below the staff.

Example:\quad
\raisebox{0ex}[4ex][3ex]{\musicintextnoclefn{\notes\sk\zcharnote{N}{Word}\wh g\sk\en}}
\quad is coded by \quad
\verb|\zcharnote{N}{Word}\wh g|~.

\item The vertical position can also be given with a number in the commands
\keyindex{zchar} (expanded to the right),
\keyindex{lchar} (expanded to the left),
\keyindex{cchar} (centered). The number is internally multiplied by \verb|\internote|~.

Example:\quad
\raisebox{0ex}[4ex][3ex]{\musicintextnoclefn{\notes\sk\cchar{-4}{Word}\wh g\sk\en}}
\quad is coded by \quad
\verb|\cchar{-5}{Word}\wh g|~.

\item Of easier use are the commands \keyindex{zsong} (right of the note),
\keyindex{lsong} (left) and \keyindex{csong} (centered) which post the lyrics
at the lower staff line \ital{minus} the previous
\keyindex{interinstrument}~$n$ or the \keyindex{staffbotmarg} quantity. These
commands only have one argument, namely the lyrics text:
%\begin{center}
\keyindex{zsong}\verb|{|\ital{text}\verb|}|\quad
\keyindex{lsong}\verb|{|\ital{text}\verb|}|\quad
\keyindex{csong}\verb|{|\ital{text}\verb|}|
%\end{center}
 Depending on the values of the inter-instrument spacings and margins, the
resulting vertical position might be inappropriate. Then it can be changed for
any specific $n$-th instrument until further change using
\begin{quote}
\keyindex{setsongraise}~$n$\verb|{|\ital{any \TeX-dimension}\verb|}|
\end{quote}
As an example, the following French song\\
 \begin{music}
 \generalsignature{1}
 \startextract
 \geometricskipscale
 \NOtes\zsong{Au }\qu g\en
 \NOtes\zsong{clair }\qu g\en
 \NOtes\zsong{de }\qu g\en
 \NOtes\zsong{la }\qu h\en
 \bar
 \NOTes\zsong{lu- }\hu i\en
 \NOTes\zsong{ne, }\hu h\en
 \bar
 \NOtes\zsong{mon }\qu g\en
 \NOtes\zsong{a- }\qu i\en
 \NOtes\zsong{mi }\qu h\en
 \NOtes\zsong{Pier- }\qu h\en
 \bar
 \NOTes\zsong{rot, }\wh g\sk\en
 \endextract
 \end{music}

\noindent was coded as:
\begin{quote}\begin{verbatim}
 \generalsignature{1}
 \startextract
 \geometricskipscale
 \NOtes\zsong{Au }\qu g\zsong{clair }\qu g\en
 \NOtes\zsong{de }\qu g\zsong{la }\qu h\en\bar
 \NOTes\zsong{lu- }\hu i\zsong{ne, }\hu h\en\bar
 \NOtes\zsong{mon }\qu g\zsong{a- }\qu i\en
 \NOtes\zsong{mi }\qu h\zsong{Pier- }\qu h\en\bar
 \NOTes\zsong{rot, }\wh g\sk\en
 \zendextract
\end{verbatim}\end{quote}
\end{enumerate}

\subsection{Adapting note spacing for lyrics}

The command \keyindex{hardlyrics}\verb|{longword}| provides a spacing that is equal to the length
of the text argument \verb|{longword}|. In the same time the argument \verb|{longword}|
is saved in \keyindex{thelyrics}

As an example \quad
\raisebox{0ex}[5ex][4ex]%
{\musicintextnoclefn{\staffbotmarg2\Interligne%
\hardlyrics{clair}\notes\hsong{\thelyrics}\wh g\en\notes\wh{gg}\en}}
\quad is coded by:
\begin{tabular}{l}
\verb|\hardlyrics{clair}%|\\
\verb|\notes\hsong{\thelyrics}\wh g\en|\\
\verb|\notes\wh{gg}\en|\\
\end{tabular}

All notes with long lyrics need such a treatment. The commands only carry out on
\verb|\notes| (not on \verb|\Notes|, \verb|\NOtes|...).

If you want to go back to the normal placing on an easy way, you simply can replace
'\verb|\hardlyrics|' by '\verb|\softlyrics|'.

 A complete score is given in example {\tt glorias.tex}\label{glorias} and in
{\tt gloriab.tex}, the latter exhibiting not only the song tune but also the
organ accompaniment.

Alternate versions of \verb|\hsong| are \keyindex{dhsong} which has a fixed
length of \verb|2\noteskip| and \keyindex{thsong} whose fixed length is
\verb|3\noteskip|. These are useful when the text is set below (or above) a
collective coding of two or three notes.

\section{Musixlyr}\label{musixlyr}

Lyrics are best handled by the \texttt{musixlyr}\index{musixlyr} package by Rainer Dunker.
The package can be used by inserting a line in your source code:
\begin{quote}\begin{verbatim}
\input musixtex
\input musixlyr
...
\end{verbatim}\end{quote}

The manual, the input file and a few examples are in \musixtex\ distributions, or they 
may be downloaded 
\href{http://icking-music-archive.org/software/musixtex/add-ons/musixlyr21c.zip}
{\underline{for Windows}} or \href{http://icking-music-archive.org/software/musixtex/add-ons/musixlyr21c.tgz}
{\underline{for \unix}}. Look at the manual for a detailed description. Here is an overview
of the commands and an example of use.\pagebreak

\def\keyexample#1{\keyindex{#1}}

\noindent\begin{small}\begin{tabbing}
\verb|\NOtes|\keyexample{assignlyricshere}\verb|{alto}\qa c\en|\quad\= assigning without staff number\kill
Example\> Explanation 
\end{tabbing}
\vspace{-1ex}
\hrule
\vspace{-2ex}
\begin{tabbing}
\verb|\NOtes|\keyexample{assignlyricshere}\verb|{alto}\qa c\en|\quad\= assigning without staff number\kill
\keyexample{setlyrics}\verb|{sopr}{the ly_-ric words_}|\> defining the lyrics text\\
\keyexample{copylyrics}\verb|{sopr}{alto}|\> alto has same lyrics as soprano\\
\keyexample{appendlyrics}\verb|{alto}{more words}|\> alto lyrics is longer\\
\keyexample{assignlyrics}\verb|2{sopr,alto}|\>soprano and alto lyrics at staff $2$\\
\keyexample{assignlyricsmulti}\verb|{1}{2}{alto}|\>assign alto lyrics to staff $2$ of instrument $1$\\
\verb|\NOtes|\keyexample{assignlyricshere}\verb|{alto}\qa c\en|\>assigning without staff number\\
\keyexample{auxlyr}\verb|\assignlyrics{2}{sopr}|\> assign soprano above staff $2$\\[.8ex]
\keyexample{lyrrule}\verb|\qu c|...\keyexample{lyrruleend}\verb|\qu c|\>make a melisma by hand\\
\keyexample{beginmel}\verb|\qu c|...\keyexample{endmel}\verb|\qu c|\>melisma, same as word extension underline\\[.8ex]
\keyexample{lyr}\verb|\qu c|\>force a syllable from lyrics text at this note or rest\\
\keyexample{lyric}\verb|{word}\qu c|\>insert syllable 'word' at this note\\
\verb|\loffset{2}{|\keyexample{lyric*}\verb|{1.}}\qu c|\>combine \verb|1.| with regular syllable\\
\keyexample{lyrich}\verb|{syl}\qu c|\>same as \verb|\lyric|, but with hyphenation\\
\keyexample{lyrich*}\verb|{}\qu c|\>same as \verb|\lyric*|, but with hyphenation\\
\keyexample{lyricsoff}...\keyexample{lyricson}\>stop lyrics, then start again\\
\keyexample{nolyr}\verb|\qu c|\>no syllable at this note\\[.8ex]
\keyexample{llabel}\verb|{labelname}name|\>labelling a ``go to'' target in text\\
\keyexample{golyr}\verb|{labelname}\qu c|\>perform a jump, in music code\\[.8ex]
\keyexample{lyrpt}\verb|,\qu c|\>add a comma to the syllable under this note\\
\keyexample{lyrnop}\verb|\qu c|\>remove last character in syllable\\
\keyexample{lclyr}\verb|\qu c|\>make first character lower case\\
\keyexample{llyr}\verb|\qu c|\>left justified syllable\\
\keyexample{leftlyrtrue}\verb|\qu c|...\keyexample{leftlyrfalse}\verb|\qu c|\>start and stop left justification as the default\\
\keyexample{lyroffset}\verb|{-4}\qu c|\>shift syllable $1$ notehead to the left\\[.8ex]
\keyexample{minlyrspace}\verb|{3pt}\qu c|\>define minimum space between the words\\
\keyexample{forcelyrhyphenstrue}\verb|\qu c|\>always use a hyphen from now on\\
\keyexample{forcelyrhyphensfalse}\verb|\qu c|\>remove hyphen and make one word if necessary \\
\keyexample{showlyrshifttrue}\verb|\qu c|\>show the lyric shift\\[.8ex]
\keyexample{lyrraise}\verb|{1}{a 2\Interligne}|\>raise lyrics below staff $1$ by \verb|2\Interligne|\\
\keyexample{lyrraisemulti}\verb|{1}{2}{a 2\Interligne}|\>raise alto lyrics above staff $2$ of instrument $1$\\
\keyexample{lyrraisehere}\verb|{b 2\Interligne}\qu c|\>raise lyrics below this staff by \verb|2\Interligne|\\[.8ex]
\keyexample{minlyrrulelength}\verb|{2mm}|\>melismas shorter than $2$mm are not shown \\
\keyexample{minmulthyphens}\verb|{15mm}|\>distance between hyphens in 'hyphen melisma'\\
\verb|\def|\keyexample{lyrhyphenchar}\verb|{-}|\>chose a hyphen character\\
\verb|\setlyrics{|\keyexample{lyrlayout}\verb|{\it}..}|\>apply italics to all lyrics lines\\
\keyexample{verses}\verb|{,\beginmel}\qu c|\>initiate melisma at second verse\\[.8ex]
\verb|\small|\keyexample{setlyrstrut}\>adapt the vertical distance between lyrics lines\\
\keyexample{lyrstrutbox}\verb|{10pt}|\> (re)define the distance between the lyrics lines\\[.8ex]
\keyexample{lyrmodealter}\verb|2|\>attach lyrics of staff $2$ to the upper voice\\
\keyexample{lyrmodealtermulti}\verb|{1}{2}|\>attach lyrics of instr.\ $1$ staff $2$ to the upper voice\\
\keyexample{lyrmodealterhere}\verb|\qu c|\>attach lyrics of this staff to the upper voice\\
\keyexample{lyrmodenormal}\verb|2|\>restore the default behaviour\\
\keyexample{lyrmodenormalmulti}\verb|{1}{2}|\>restore the default behaviour at staff $2$ of instr.\ $1$\\
\keyexample{lyrmodenormalhere}\verb|\qu c|\>restore the default behaviour of this staff\\[.8ex]
\keyexample{lyrlink}\>linking two words with a '$_{_\smile}$'\\
\keyexample{lowlyrlink}\>same as \verb|\lyrlink| but a little bit lower\\[.8ex]
\keyexample{resetlyrics}\>set word pointer to the first word in all lyrics lines\\[.8ex]
\keyexample{enableauxlyrics}\>don't use this anymore\\
\keyexample{setsongraise}\verb|{1}{2\Interligne}|\>same as \verb|{\lyrraise}{1}{b 2\Interligne}|\\
\keyexample{auxsetsongraise}\verb|{1}{2\Interligne}|\>same as \verb|{\lyrraisemulti}{1}{b 2\Interligne}|\\
\keyexample{oldlyrlinestart}\>don't let the lyrics extend to the left margin\\
\end{tabbing}\end{small}

As a further illustration of the use of the commands, have a look at the following
example\footnote{The example is taken from the \texttt{musixlyr} manual.}:

\medskip\medskip
%\oneversespace
\begin{music}
\input musixlyr
 \resetlyrics \small
\lyrmodealter0
 \setlyrics{soprano}{bring her die Gans,} \auxlyr{\assignlyrics1{soprano}}
 \copylyrics{soprano}{alto}                       \assignlyrics1{alto}

 \generalsignature{-2}
 \advance\stafftopmarg1\Interligne
 \advance\staffbotmarg2\Interligne

 \startextract\addspace\afterruleskip
  \NOtes\zqu g\ql e\en
  \bar
  \Notes\zqu i\beginmel\ibslurd0f\ibl0f{-1}\qb0{fe}\en
  \Notes\auxlyr\beginmel\ibsluru1i\zqup i\qb0d\en
  \Notes\tqb0e\en
  \Notes\endmel\tbslurd0e\ql c\en
  \notes\ibbu0h{-1}\qb0h\tqh0g\en
  \NOtes\auxlyr\endmel\tbsluru1h\zqu h\ql c\en
  \bar
  \NOTEs\auxlyr\lyr\zwh i%       The lyrics of the whole notes
    \lyr\wh b\en     %       must be given manually.
 \endextract
 \lyrmodenormal0
\end{music}
\medskip

%\oneversespace

which was coded as:
\begin{quote}
\begin{verbatim}
% define lyrics above the staff
\setlyrics{soprano}{bring her die Gans,}
% lyric beneath the staff are the same
\copylyrics{soprano}{alto}
% assign alto lyrics below staff 1 on the notes with stem down
\assignlyrics1{alto}
% assign soprano lyrics above staff 1 on the notes with stem up
\auxlyr{\assignlyrics1{soprano}}
% attach both lyrics to the upper voice
\lyrmodealter0
\generalsignature{-2}
% make place for the lyrics
\advance\stafftopmarg1\Interligne\advance\staffbotmarg2\Interligne
\startextract\addspace\afterruleskip
\NOtes\zqu g\ql e\en\bar
% start melisma in lower lyrics
\Notes\zqu i\beginmel\ibslurd0f\ibl0f{-1}\qb0{fe}\en
% start melisma in upper lyrics
\Notes\auxlyr\beginmel\ibsluru1i\zqup i\qb0d\tqb0e\en
% end melisma in lower lyrics
\Notes\endmel\tbslurd0e\ql c\en
\notes\ibbu0h{-1}\qb0h\tqh0g\en
% start melisma in upper lyrics
\NOtes\auxlyr\endmel\tbsluru1h\zqu h\ql c\en\bar
% The lyrics of the whole notes (without stem) must be given manually.
\NOTEs\auxlyr\lyr\zwh i\lyr\wh b\en
\endextract
\lyrmodenormal0
\end{verbatim}\end{quote}

  \section{Getting enough vertical space for lyrics}
  Since songs are
usually equivalent to a one-staff instrument (possibly with several voices)
the recommended solution consists in adjusting the distance between
instruments using either \keyindex{interinstrument}\verb|=|\ital{any
\TeX-dimension} to give more place below all instruments or using
\keyindex{setinterinstrument} to make more space above. Note that {\Bslash
setinterinstrument} defines spacing above and not below an instrument. Since
lyrics are usually set below the staff, the first argument of a
\verb|\setinterinstrument| should be the song instrument number \ital{minus
one}.

 In the case of a single staff tune, or if the song instrument is the lowest
one, then additional place can be provided using \keyindex{staffbotmarg}.

\section{Fine tuning the placement of the lyrics}
 When not using \verb|\hardlyrics|, on short notes, sometimes
 the lyrics are shifted away from the notes or they collide with other words.
 This are a few approaches to get around this:
\begin{enumerate}\setlength{\itemsep}{0ex}
\item Making more music lines for the notes to go further apart. This could be done with
\verb|\mulooseness|.
\item Stretch a bar with short notes in it by i.e.,~replacing \verb|\notes| by \verb|\NOTes|.
\item Insert space between the notes by using \verb|\sk|, \verb|\hsk|, \verb|\qsk|, \verb|\qqsk|, ...
\item Stretch a bar with short notes in it by using the command \keyindex{scale}:
\begin{verbatim}
\scale{1.6}\notes..\en\scale{1}%
\end{verbatim}
This method can be used in \textbf{PMX} but only with care, because it changes horizontal spacing
in a way that \textbf{PMX} will not be aware of. It will not move bars to the next line, but
will shorten the other bars on the line.

As an example, the lyrics of this music line are better placed by using \verb|\scale| in
the first bar and moving to the left the word 'mon'. Note that the hyphen is removed
when there is no place for it:

 \begin{music}
 \input musixlyr
 \resetlyrics
 \setlyrics{v1}{Au clair de la lu-ne, mon a-mi Pier-rot,}%
 \assignlyrics1{}\assignlyrics1{v1}%
 \staffbotmarg2\Interligne\generalsignature{1}%
 \startextract
 \geometricskipscale
 \notes\qu{gggh}\en\bar
 \Notes\hu{ih}\en\bar
 \notes\qu{gihh}\en\bar
 \Notes\wh g\en
 \endextract
% \end{music}
%%%%% combined for saving registers %%%%%
% \begin{music}\nostartrule
% \input musixlyr
 \resetlyrics
 \setlyrics{v1}{Au clair de la lu-ne, \kernm1exmon a-mi Pier-rot,}%
 \assignlyrics1{}\assignlyrics1{v1}%
 \staffbotmarg2\Interligne\generalsignature{1}%
 \startextract \geometricskipscale
 \scale{1.4}\notes\qu{gggh}\en\bar\scale{1}%
 \Notes\hu{ih}\en\bar
 \notes\qu{gihh}\en\bar
 \Notes\wh g\en
 \endextract
 \end{music}

\medskip
The code of the second music line is (\verb|\assignlyrics1{}| is only needed because
lyrics are assigned before this in this manual):
\begin{quote}\begin{verbatim}
 \begin{music}
 \input musixlyr
 \resetlyrics
 \setlyrics{v1}{Au clair de la lu-ne, \kernm1exmon a-mi Pier-rot,}%
 \assignlyrics1{}\assignlyrics1{v1}%
 \staffbotmarg2\Interligne\generalsignature{1}%
 \startextract \geometricskipscale
 \scale{1.4}\notes\qu{gggh}\en\bar\scale{1}%
 \Notes\hu{ih}\en\bar
 \notes\qu{gihh}\en\bar
 \Notes\wh g\en
 \endextract
 \end{music}
\end{verbatim}\end{quote}

\item Moving a word in any direction

\begin{small}
\noindent\begin{tabular}{ll}
\multicolumn{2}{l}{\Bslash setlyrics\{alto\}\{\Bslash kernm3ex1.$\sim\sim$firstsyllable...\}}\\
& left-move verse number\\
\verb|\setlyrics{alto}{...\kern1exword...}| &right-move a single word\\
\verb|\setlyrics{alto}{...\lower2pt\hbox{word}...}|& lower a single word\\
\verb|\setlyrics{alto}{...\raise2pt\hbox{word}...}|& raise a single word\\
\multicolumn{2}{l}{\Bslash def\Bslash strut\{\Bslash vbox to 2\Bslash Interligne\{\}\}%
\Bslash setlyrics\{alto\}\{\Bslash lyrlayout\{\Bslash strut\}...\}} \\
& control distance between verses\\
\verb|\lyrlayout{\vphantom{Mp(\lowlyrlink}|& minimum distance between verses\\
\multicolumn{2}{l}{\Bslash setbox\Bslash lyrstrutbox=\Bslash hbox\{\Bslash vphantom\{yM\Bslash lyrlink\}\}}\\
& redefine default lyrstrut
\end{tabular}
\end{small}

\item Placing of accents can be made easier as shows this example:
\begin{center}
\begin{minipage}{50mm}
\begin{music}\nostartrule
\input musixlyr
\catcode`\ä\active \defä{\"a}
\catcode`\ö\active \defö{\"o}
\catcode`\å\active \letå\aa
\setlyrics1{å ä ö}
\assignlyrics1{}\assignlyrics11
\startextract
 \setsongraise1{1ex}\NOtes\qa{ggg}\en
\zendextract
\end{music}
\end{minipage}%
\begin{minipage}{80mm}
\verb|\catcode`\|\"a\verb|\active \def|\"a\verb|{\"a}|\\
\verb|\catcode`\|\"o\verb|\active \def|\"o\verb|{\"o}|\\
\verb|\catcode`\|\aa\verb|\active \let|\aa\verb|\aa|\\
\verb|\setlyrics1{|\aa\ \"a\ \"o\verb|} \assignlyrics1{}|\\
\verb|\assignlyrics11|\\
\verb|\startextract|\\
\verb|\NOtes\qa{ggg}\en|\\
\verb|\zendextract|\\
\end{minipage}
\end{center}
\item Using an 8-bit encoded characterset.\label{8bit}
If you use default (Computer Modern) fonts, you will want to switch to
the EC variants 
by putting
%\verb+\input plainenc\relax\inputencoding{cp850}+  % doesn't work!
\verb+\input musixec+
after \verb+\input musixtex+ in your source file.

\end{enumerate}