summaryrefslogtreecommitdiff
path: root/macros/musixtex/doc/musixdoc/preparing.tex
blob: 88e3756bf4cc6b98c198f2f05a9ada0d8fd4e13f (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
\chapter{Preparing to Enter Notes}\label{preparing}
 \section{After the setup, what next?}

The command \keyindex{startmuflex} initiates the serious business of
\musixtex. On the first \TeX\ pass it
opens \ital{jobname}{\tt .mx1} for writing bar-by-bar tabulations of all
hard and scalable space to be fed to \verb|musixflx| on the second pass.
\verb|musixflx| generates \ital{jobname}{\tt .mx2} which defines the
number of bars in each system and the factors relating scalable space
to hard space in each system. On the third pass both files will be opened
and read to define the final spacing. These files should be closed before
leaving \TeX, preferably before
\keyindex{bye} or \keyindex{end}, with \keyindex{endmuflex}. Normally \TeX\
closes all open files on its own when terminating the program, but it is still
cleaner to do this explicitly.

After \verb|\startmuflex|, the command \keyindex{startpiece} will initiate
the first system, containing all instruments you have previously defined.
The indentation will be \keyindex{parindent}, so if you want nonzero
indentation, this register should be set to the desired hard dimension
before issuing \verb|\startpiece|.

 \section{Horizontal spacing commands}\label{newspacings}
\subsection{Basic note spacing}
\musixtex\ provides a set of macros each of which defines a particular
increment of scalable spacing. The default set is tabulated in
Figure~\ref{spacingtable}.
\begin{table}
\begin{small}
\begin{center}
\tinynotesize
\renewcommand{\arraystretch}{1.5}% I hate LaTeX  (attributed to Daniel Taupin)
\begin{tabular}{|l|l|l@{~~~~}l|}
\multicolumn{1}{c}{Usage}&
\multicolumn{1}{c}{spacing}&
\multicolumn{2}{c}{Suggested use}\\\hline
\keyindex{znotes}\verb| ... & ... & ... \en|&(non spacing)
  &&specials\\
\keyindex{notes}\verb|  ... & ... & ... \en|&\verb=2=\keyindex{elemskip}
  &\ccu1&16th\\
\keyindex{notesp}\verb| ... & ... & ... \en|&\verb=2.5\elemskip=
  &\pt1\ccu1&dotted 16th, 8th triplet\\
\keyindex{Notes}\verb|  ... & ... & ... \en|&\verb=3\elemskip=
  &\cu1&8th\\
\keyindex{Notesp}\verb| ... & ... & ... \en|&\verb=3.5\elemskip=
  &\cup1&dotted 8th, quarter triplet\\
\keyindex{NOtes}\verb|  ... & ... & ... \en|&\verb=4\elemskip=
  &\qu1&quarter\\
\keyindex{NOtesp}\verb| ... & ... & ... \en|&\verb=4.5\elemskip=
  &\qup1&dotted quarter, half triplet\\
\keyindex{NOTes}\verb|  ... & ... & ... \en|&\verb=5\elemskip=
  &\hu1&half\\
\keyindex{NOTesp}\verb| ... & ... & ... \en|&\verb=5.5\elemskip=
  &\hup1&dotted half\\
\keyindex{NOTEs}\verb|  ... & ... & ... \en|&\verb=6\elemskip=
  &\wh1&whole\\\hline
\end{tabular}\end{center}
\end{small}
\caption{Spacing Commands}
\label{spacingtable}
\end{table}
What each of these macros actually does is to set an
internal dimension register \keyindex{noteskip} to the given multiple
of the fundamental spacing unit \keyindex{elemskip}
(which has dimensions of length, usually given in points).
Normally, every \itxem{spacing note} (e.g.,
\keyindex{qu},
\keyindex{qb}, \keyindex{hl}) will then be followed by a spacing of
width \keyindex{noteskip}.  By selecting a particular note spacing macro
from the above table, the typesetter can thus control the relative spacing
between notes.

The actual spacing will therefore be determined by the value of
\verb|\elemskip|. On the first pass, \TeX\ will set a default value for
\verb|\elemskip| based on the declared music size, or the user can
set it to any hard dimension he chooses. However, the value on the
first pass doesn't matter as much as you might think (more about that later).
On the second pass,
\verb|musixflx| determines where the system breaks will come,
and then computes the final value of \verb|\elemskip| for each system.

If the arithmetic progression of note spacings in the above table does not
meet your wishes, you may activate an alternate set with
the command \keyindex{geometricskipscale}. As implied by the name, this
is a geometric progression, where {\Bslash Notes} is
$\sqrt{2}$ times wider than {\Bslash notes},  {\Bslash NOtes} is $\sqrt{2}$
times wider than {\Bslash Notes}, and so forth.
Then the factors in the middle column
of the above table will be replaced by the sequence
$2.00$, $2.38$, $2.83$, $3.36$, $4.00$, $4.76$, $5.66$, $6.72$, and $8.00$. Two additional
macros, \verb|\NOTEsp| and \verb|\NOTES|, will be defined corresponding to
factors $9.52$ and $11.32$. The original arithmetic progression can be
restored by \keyindex{arithmeticskipscale}.

If neither of the predefined progressions satisfies you, you may define
your own, using the more general macro \verb|\vnotes| in the same manner
that \musixtex\ uses it for the predefined progressions. So for example
\verb|\def\NOtes{\vnotes5.34\elemskip}| will redefine \verb|\NOtes| in
the obvious way, and the extension to the other spacing macros should
likewise be obvious.
The following abbreviations may be useful:
\begin{quote}
\begin{tabular}{lcl}
 \keyindex{nnotes} &for&\verb|\vnotes1.6\elemskip|\\
 \keyindex{nnnotes} &for&\verb|\vnotes1.28\elemskip|
\end{tabular}
\end{quote}

In addition, inside any pair \verb|\notes...\en| there are two
equivalent ways to
locally redefine \verb|\noteskip| to another scalable value, namely by
issuing a command like
\verb|\noteskip=2.4\noteskip| or \keyindex{multnoteskip}\verb|{2.4}|, which
have the expected effect until the notes group is terminated or
\verb|\noteskip| is further redefined.
Finally, by issuing a command like
\keyindex{scale}\verb|{2.4}| outside any notes group, you can scale all subsequent
\verb|\noteskip|s by any desired factor.

These facilities may be useful, for example,
to control spacing when there are three equal duration notes in one staff against two
 in another.


%\subsection{\Bslash{\tt elemskip}, \Bslash{\tt beforeruleskip} and
%\Bslash{\tt afterruleskip}}
%
% avr wants to call these "commands", but das doesn't.
%\subsection{Commands {\Bslash\texttt{elemskip}},
%{\Bslash\texttt{beforeruleskip}}
%and {\Bslash\texttt{afterruleskip}}}
%\subsection{{\Bslash\texttt{elemskip}},
%{\Bslash\texttt{beforeruleskip}}
%and {\Bslash\texttt{afterruleskip}}}

\subsection{Before and after rule skips}


We've just seen how \verb|\elemskip| is used to scale the spacings between notes.
There are two other spacing units that share some behavior with \verb|\elemskip|:
\verb|\beforeruleskip| is the horizontal space that is automatically inserted
\ital{before} every bar line, while \verb|\afterruleskip| goes \ital{after}
every bar line. (In
practice \verb|\beforeruleskip| is almost aways set to \verb|0pt| because there
will typically already be a space of \verb|1\noteskip| before every barline.)
On the first pass, just as with \verb|\elemskip|, \musixtex\ assigns them default
values according to the following table:

%\begin{quote}\begin{tabular}{lrrr}\hline
%\ital{using}&\keyindex{elemskip}&\keyindex{afterruleskip}
%  &\keyindex{beforeruleskip}\\\hline
%\keyindex{normalmusicsize}&6pt&8pt&0pt\\
%\keyindex{smallmusicsize}&4.8pt&6pt&0pt\\\hline
%\end{tabular}\end{quote}

\begin{center}\begin{tabular}{lrrr}\hline
\ital{using}&\keyindex{elemskip}&\keyindex{afterruleskip}
  &\keyindex{beforeruleskip}\\\hline
\keyindex{normalmusicsize}&{\tt 6pt}&{\tt 8pt}&{\tt 0pt}\\
\keyindex{smallmusicsize}&{\tt 4.8pt}&{\tt 6pt}&{\tt 0pt}\\\hline
\end{tabular}\end{center}

\noindent In the second pass, \verb|musixflx| assigns new values to each
of these dimensions, a different set for each line or system. It does this
in such a way that available scalable horizontal space in each system is
exactly filled up.

The values that are assigned to these dimensions on the first pass, whether by
default or explicitly by the user or in some combination, only matter insofar
as their relative sizes. That's why we earlier stated that the first-pass value
of \verb|\elemskip| didn't matter as much as you might think. For both music sizes
in the table above, it appears that by default \verb|\afterruleskip| is
\verb|1.3333\elemskip|\footnote{Editor's note: It is a mystery why the authors
%of \musixtex\ didn't simply define \Bslash{\tt beforeruleskip} and \Bslash{\tt afterruleskip} as
%specific multiples of \Bslash{\tt elemskip}}.
of \musixtex\ didn't simply define \Bslash\texttt{beforeruleskip} and \Bslash\texttt{afterruleskip} as
specific multiples of \Bslash\texttt{elemskip}.}.

Note that if you do want to change any of these
values, you have to do so \ital{after} setting the
music size and before \verb|\startpiece|.

Here is an example that illustrates the various dimensions under discussion:\\
 %\check
\begin{music}\nostartrule
\afterruleskip7pt
\beforeruleskip2pt
\parindent0pt
\setclefsymbol1\empty
% special problems afford special solutions
\makeatletter\global\clef@skip\z@ \makeatother
\startpiece
\zchar{16}{\hbox to\afterruleskip{\downbracefill}}%
\zchar{19}{\hbox to\afterruleskip{\hss a\hss}}%
\addspace\afterruleskip
\zchar{16}{\hbox to2\elemskip{\downbracefill}}%
\zchar{19}{\hbox to2\elemskip{\hss b\hss}}%
\zchar{3}{\hbox to\elemskip{\upbracefill}\hbox to\elemskip{\upbracefill}}%
\zchar{-1}{\hbox to\elemskip{\hss e\hss}\hbox to\elemskip{\hss e\hss}}%
\notes\qa l\en
\znotes\en
\zchar{16}{\hbox to4\elemskip{\downbracefill}}%
\zchar{19}{\hbox to4\elemskip{\hss c\hss}}%
\zchar{3}{\hbox to\elemskip{\upbracefill}\hbox to\elemskip{\upbracefill}%
  \hbox to\elemskip{\upbracefill}\hbox to\elemskip{\upbracefill}}%
\zchar{-1}{\hbox to\elemskip{\hss e\hss}\hbox to\elemskip{\hss e\hss}%
  \hbox to\elemskip{\hss e\hss}\hbox to\elemskip{\hss e\hss}}%
\NOtes\qa l\en
\znotes\en
\zchar{16}{\hbox to\beforeruleskip{\downbracefill}}%
\zchar{19}{\hbox to\beforeruleskip{\hss d\hss}}%
\setemptybar\endpiece
\end{music}
\begin{quote}\begin{tabular}{l@{~$\rightarrow$~}l}
a&\keyindex{afterruleskip}\\
b&\keyindex{notes}\verb| = \vnotes 2\elemskip|\\
c&\keyindex{NOtes}\verb| = \vnotes 4\elemskip|\\
d&\keyindex{beforeruleskip}\\
e&\keyindex{elemskip}
\end{tabular}\end{quote}

\section{Moving from one staff or instrument to another}
 \label{movingtostaffs}

When entering notes inside \verb|\notes ... \en|, the usual way to suspend
input for one instrument and start the next (higher) is with  the character
``\verb|&|''\index{"&@{\tt\char'046}}. If the instrument has more than one
staff, to switch to the next (higher) one you can use the character
``\verb+|+''\index{\tt\char'174@{\tt\char'174}}.

There are some alternate navigation commands that may be useful in
 special situations. Due to ``catcode
problems'' (see Section~\ref{catcodeprobs}) it may sometimes be necessary
to use the more explicit commands
\keyindex{nextinstrument} and \keyindex{nextstaff}, which have the same
meanings as ``\verb|&|'' and ``\verb+|+'' respectively. To switch to the previous
(next lower) staff of the same instrument, use \keyindex{prevstaff}. This might
be useful if a beam starts in a higher staff than where it ends. More
generally, to switch to an arbitrary instrument $n$, use
\keyindex{selectinstrument}\onen, and to switch to an arbitrary staff $n$
of the current instrument, use \keyindex{selectstaff}\verb|{|$n$\verb|}|. In the
latter case if $n$ exceeds the number of staves defined for the instrument, you
will receive an error message. You can enter part of a successive voice on
the \ital{same} staff by using \verb|\selectstaff{|$n$\verb|}| with $n$ for
the \ital{current} staff.


\section{Automatic note spacing}
\label{autosp}

A preprocessor called \texttt{autosp}\index{autosp@{\tt autosp}} automates the generation 
of note-spacing commands by converting (non-standard) commands
of the form \verb|\anotes ... \en| into one or more conventional
note-spacing commands, as determined by the note values
themselves, with \verb|\sk| spacing commands inserted as necessary.
The coding for an entire measure can be entered one part at
a time, without concern for note-spacing changes within the
part or spacing requirements of other parts.
For example, from the input
\begin{verbatim}
  \anotes\qa J\qa K&\ca l\qa m\ca n\en
\end{verbatim}
\texttt{autosp} generates
\begin{verbatim}
  \Notes\qa J\sk\qa K\sk&\ca l\qa m\sk\ca n\en
\end{verbatim}
\texttt{autosp} also supports non-standard commands for adding ``global''
skips (i.e., in every staff) and centered whole-bar rests.

As an option, \emph{all} note-spacing commands (except \verb|\znotes|
and \verb|\vnotes|) will be processed similarly; this is useful for correcting
the spacing in single-instrument parts extracted from a multi-instrument score;
see Section~\ref{musixtnt}.

The \texttt{autosp} package is available in 
\href{https://www.tug.org/texlive/}{\underline{TeXLive}} 
and
\href{http://miktex.org/}{\underline{MiKTeX}}, and
can also be found at 
the \href{http://icking-music-archive.org/software/autosp/autosp.zip}
{\underline{Werner Icking Music Archive}}
or at
\href{http://mirrors.ctan.org/support/autosp.zip}{\underline{CTAN}}
(the Comprehensive \TeX\ Archive Network).