]> Git — Sourcephile - julm/violon-tex.git/blob - violon.sty
Modification : un tas de trucs :P.
[julm/violon-tex.git] / violon.sty
1 % This file is part of Violon, a violin score engine.
2 % Copyright (C) 2009-2010 Julien Moutinho
3 %
4 % This program is free software: you can redistribute it and/or modify
5 % it under the terms of the GNU General Public License as published
6 % by the Free Software Foundation, either version 3 of the License,
7 % or any later version.
8 %
9 % This program is distributed in the hope that it will be useful,
10 % but WITHOUT ANY WARRANTY; without even the implied warranty
11 % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 % See the GNU General Public License for more details.
13 %
14 % You should have received a copy of the GNU General Public License
15 % along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17 % Any comment or contribution is welcome
18 % at julm arobase julm dot meeee dot eu.
19
20 % Déclaration
21 \def\fileversion{1.0}%
22 \def\filedate{2009/10/11}%
23 \NeedsTeXFormat{LaTeX2e}%
24 \ProvidesPackage{violon}[\filedate\space\fileversion\space%
25 Violin score library (Julien Moutinho)]%
26 % Bibliothèques
27 \usepackage{ifthen}%
28 \usepackage{color}%
29 % Polices
30 \gdef\ssssmall{%
31 \@setfontsize\sssmall{5pt}{5pt}}%
32 \gdef\sssmall{%
33 \@setfontsize\sssmall{6pt}{6pt}}%
34 \gdef\ssmall{%
35 \@setfontsize\ssmall\@viiipt\@ixpt}%
36 \gdef\vlnfingerfont{%
37 \expandafter\color{colVlnBowFingerCord\vlnlastcord}%
38 \fontfamily{pnc}\bfseries\sssmall}%
39 \gdef\vlncordfont{%
40 \color{colVlnBowCord}%
41 \fontfamily{pnc}\bfseries\sssmall}%
42 \gdef\vlnnamefont{%
43 \expandafter\color{colVlnBowNameOctave\the\vlnlastposoctave}%
44 \fontfamily{pnc}\scshape\ssssmall}%
45 \gdef\vlnpartfont{%
46 \color{colVlnPart}%
47 \fontfamily{pnc}\bfseries\sssmall}%
48 \gdef\vlntimefont{%
49 \fontfamily{pnc}\bfseries\ssssmall}%
50 % Algèbre
51 \newcount\@calc@mod@cnt%
52 \def\modulo#1#2{%
53 \@calc@mod@cnt=#1\relax%
54 \divide\@calc@mod@cnt by#2\relax%
55 \multiply\@calc@mod@cnt by#2\relax%
56 \advance#1 by-\@calc@mod@cnt%
57 }%
58 % Convertisseurs
59 \let\romannumeral@old\romannumeral%
60 \def\romannumeral#1{%
61 \ifnum#1>\z@\romannumeral@old#1\else\number#1\fi%
62 }%
63 % Moteur
64 % Constantes
65 % Couleurs
66 %\definecolor{colVlnBowU}{rgb}{0.24,0.92,0.24}%
67 %\definecolor{colVlnBowD}{rgb}{0.80,0,0}%
68 %\definecolor{colVlnBowU}{rgb}{0.30,0.75,0.75}%
69 \definecolor{colVlnBowU}{gray}{0.50}%
70 \definecolor{colVlnBowD}{gray}{0}%
71 \definecolor{colVlnBowN}{gray}{1}%
72 \definecolor{colVlnBowCord}{rgb}{0,1,0}%
73 \definecolor{colVlnBowFinger}{rgb}{0,0,0}%
74 \definecolor{colVlnBowFingerCord0}{rgb}{0,0,0}%
75 \definecolor{colVlnBowFingerCord1}{rgb}{0,0.66,0}%
76 \definecolor{colVlnBowFingerCord2}{rgb}{0,0,1}%
77 \definecolor{colVlnBowFingerCord3}{rgb}{1,0,0}%
78 \definecolor{colVlnBowName}{rgb}{1,0,0}%
79 \definecolor{colVlnBowNameOctave0}{rgb}{0,0,0}%
80 \definecolor{colVlnBowNameOctave1}{rgb}{0,0.66,0}%
81 \definecolor{colVlnBowNameOctave2}{rgb}{0,0,1}%
82 \definecolor{colVlnBowNameOctave3}{rgb}{1,0,0}%
83 \definecolor{colVlnLineHalfTone}{gray}{0.90}%
84 \definecolor{colVlnLineHalfToneBase}{gray}{0.50}%
85 \definecolor{colVlnPart}{gray}{0}%
86 % Portée
87 % Déclarations
88 \newdimen\vlnstaffhalftonelinevdim%
89 \newskip\vlnstaffhalftonelinevskip%
90 \newskip\vlnstaffvdim%
91 \def\vlnstaffvdimpre{3.25pt}%
92 \newskip\vlnstaffintervskip%
93 \newskip\vlnstaffvskip%
94 % Initialisations
95 \def\vlnstaffhsize{\hsize}%
96 \def\vlnstaffmaxvsize{\textheight}%
97 \vlnstaffhalftonelinevdim=0.5pt%
98 \vlnstaffhalftonelinevskip=4pt\relax%
99 \advance\vlnstaffhalftonelinevskip by-\vlnstaffhalftonelinevdim%
100 \vlnstaffvdim=0pt\relax%
101 \vlnstaffvskip=0pt\relax%
102 \vlnstaffintervskip=\vlnstaffhalftonelinevskip\relax%
103 \advance\vlnstaffintervskip by\vlnstaffhalftonelinevdim\relax%
104 \def\vlnstaffhalftoneline{%
105 {\color{colVlnLineHalfTone}\hrule depth 0pt height \vlnstaffhalftonelinevdim width \vlnstaffhsize }}%
106 \def\vlnbasehalftoneline{%
107 {\color{colVlnLineHalfToneBase}\hrule depth 0pt height \vlnstaffhalftonelinevdim width \vlnstaffhsize }}%
108 \def\vlnstafftoneskip{%
109 \advance\vlnstaffvdim by\vlnstaffhalftonelinevskip%
110 \advance\vlnstaffvdim by\vlnstaffhalftonelinevdim%
111 \nobreak\vskip\vlnstaffhalftonelinevskip%
112 }%
113 \def\vlnstafffivehalftonelines{%
114 \vlnstafftoneskip\vlnstaffhalftoneline%
115 \vlnstafftoneskip\vlnstaffhalftoneline%
116 \vlnstafftoneskip\vlnstaffhalftoneline%
117 \vlnstafftoneskip\vlnstaffhalftoneline%
118 \vlnstafftoneskip\vlnbasehalftoneline%
119 }%
120 \def\vlnstaffallhalftonelines{%
121 \vlnstafffivehalftonelines%
122 \vlnstafffivehalftonelines%
123 \vlnstafffivehalftonelines%
124 \vlnstafffivehalftonelines%
125 \vlnstafffivehalftonelines%
126 }%
127 \def\vlnstaff{%
128 \nobreak\vskip\vlnstaffvdimpre%
129 \nobreak\vskip\vlnstaffvdim%
130 \advance\vlnstaffvskip by\vlnstaffvdim\relax%
131 \count@\vlnstaffvskip\relax%
132 \advance\count@ by\vlnstaffvdim\relax%
133 \ifnum\count@>\vlnstaffmaxvsize%
134 \vlnstaffvskip=0pt\relax%
135 \break%
136 \else%
137 \advance\vlnstaffvskip by\vlnstaffintervskip\relax%
138 \nobreak\vskip\vlnstaffintervskip%
139 \fi%
140 \vlnnotehskip=0pt\relax%
141 \vlnstaffvdim=0pt\relax%
142 \vlnbasehalftoneline%
143 \vlnstaffallhalftonelines%
144 \advance\vlnstaffvdim by\vlnstaffhalftonelinevdim%
145 \nobreak\vskip-\vlnstaffvdim%
146 }%
147 % Notes
148 % Déclarations
149 % Variables
150 \newskip\vlnnotevskip%
151 \newskip\vlnnotehskip%
152 \newdimen\vlnnotevdim%
153 \newdimen\vlnnotevdimmore%
154 \newdimen\vlnnotehdim%
155 \newdimen\vlnnotehdimbase%
156 \newcount\vlnlastfinger%
157 \newcount\vlnlastposbase%
158 \newcount\vlnlastposunit%
159 \newcount\vlnlastposoctave%
160 \def\vlnlastletter{}%
161 \def\vlnlastshift{}%
162 \newcount\vlnnotepos%
163 \newcount\vlnlastpos%
164 % Initialisations
165 \vlnnotevskip=0pt\relax%
166 \vlnnotehskip=0pt\relax%
167 \vlnnotevdim=\vlnstaffhalftonelinevdim%
168 \vlnnotevdimmore=1pt\relax%
169 \vlnnotehdimbase=2cm\relax%
170 \advance\vlnnotevdim by\vlnnotevdimmore%
171 \advance\vlnnotevdim by\vlnnotevdimmore%
172 \def\vlnlastbow{}%
173 \def\vlnlastrealbow{}%
174 \def\vlnlastcord{}%
175 \def\vlnlasttimenum{}%
176 \def\vlnlasttimeden{}%
177 \def\vlnnotehdimmodetim{t}%
178 \def\vlnnotehdimmodetxt{}%
179 \parindent=0pt\relax%
180 \parskip=0pt\relax%
181 \parfillskip=0pt\relax%
182 \def\vlnlastposfinger{%
183 \csname vlnlastposfinger\romannumeral\vlnlastfinger\endcsname%
184 }%
185 \def\vlnlastfingerpos{%
186 \csname vlnlastfingerpos\romannumeral\vlnlastpos\endcsname%
187 }%
188 \def\vlnlastposname{%
189 \csname vlnlastposname\romannumeral\vlnlastpos\endcsname%
190 }%
191 \def\vlntimefrac#1/#2{%
192 \leavevmode%
193 \hbox{#1}%
194 \kern-.4ex\lower.3ex\hbox{\bfseries\tiny /}%
195 \kern-.3ex\lower.6ex\hbox{#2}%
196 }%
197 \def\vlndoatnote#1#2#3#4{%
198 \nointerlineskip%
199 \vlnnotevskip\vlnstaffhalftonelinevskip%
200 \advance\vlnnotevskip by\vlnstaffhalftonelinevdim\relax%
201 \multiply\vlnnotevskip by#1\relax%
202 \advance\vlnnotevskip by-\vlnnotevdimmore\relax%
203 \nobreak\vskip\vlnnotevskip\relax%
204 \vrule depth 0pt height 0pt width \vlnnotehskip\relax%
205 \setbox0=#3%
206 \advance\vlnnotevskip by \ht0\relax%
207 #2%
208 \box0%
209 #4%
210 \nobreak\vskip-\vlnnotevskip\relax%
211 \nointerlineskip%
212 }%
213 \def\vlnnextnote{%
214 \advance\vlnnotehskip by\vlnnotehdim\relax%
215 }%
216 \def\vlnnotedraw crd#1pos#2fgr#3bow#4nam#5tim#6#7{%
217 % Position
218 \ifthenelse{\equal{#2}{.}}%
219 {}%
220 {\vlnlastpos#2\relax}%
221 % Durée
222 \ifthenelse{\equal{#6}{.}}%
223 {}%
224 {\def\vlnlasttimenum{#6}}%
225 \ifthenelse{\equal{#7}{.}}%
226 {}%
227 {\def\vlnlasttimeden{#7}}%
228 \vlnnotehdim\vlnnotehdimbase%
229 \ifthenelse{\equal{}{\vlnnotehdimmodetim}}%
230 {}%
231 {\multiply\vlnnotehdim by\vlnlasttimenum\relax%
232 \divide\vlnnotehdim by\vlnlasttimeden\relax%
233 }%
234 % Automatic staff break
235 \count@\vlnnotehskip\relax%
236 \advance\count@ by\vlnnotehdim\relax%
237 \ifnum\count@>\vlnstaffhsize\vlnstaff\fi%
238 \def\vlnnotehdimmodetxtdo{%
239 \vbox to0pt{%
240 \ifthenelse{\equal{}{\vlnnotehdimmodetxt}}%
241 {\null}%
242 {%
243 \setbox0=\hbox{%
244 \ifthenelse{\equal{\vlnlasttimeden}{1}}%
245 {{\vlntimefont{\vlnlasttimenum}}}%
246 {\vlntimefrac{\vlntimefont{\vlnlasttimenum}}/{\vlntimefont{\vlnlasttimeden}}}%
247 }%
248 \nobreak\vskip\vlnnotevdim\relax%
249 \nobreak\vskip0.2mm\relax%
250 \nobreak\hskip\vlnnotehdim\relax%
251 \nobreak\hskip-\wd0\relax%
252 \dp0=0pt\relax%
253 \box0}%
254 }%
255 }%
256 \ifthenelse{\equal{#6/#7}{\vlnlasttimenum/\vlnlasttimeden}}%
257 {}%
258 {\vlndoatnote{\vlnlastpos}%
259 {}%
260 {\vlnnotehdimmodetxtdo}%
261 {}%
262 }%
263 % Archet
264 \ifthenelse{\equal{#4}{C}}%
265 {\ifthenelse{\equal{U}{\vlnlastrealbow}}%
266 {\def\vlnlastbow{D}}%
267 {\def\vlnlastbow{U}}}%
268 {\ifthenelse{\equal{#4}{.}}%
269 {}%
270 {\def\vlnlastbow{#4}}}%
271 \ifthenelse{\equal{\vlnlastbow}{N}}%
272 {}%
273 {\edef\vlnlastrealbow{\vlnlastbow}}%
274 \vlndoatnote{\vlnlastpos}%
275 {\begingroup\expandafter\color{colVlnBow\vlnlastbow}}%
276 {%
277 \hbox{%
278 \vrule depth 0pt height \vlnnotevdim width \vlnnotehdim\relax%
279 }%
280 }%
281 {\endgroup}%
282 % Cordes
283 \ifthenelse{\equal{#1}{\vlnlastcord}}%
284 {}%
285 {\ifthenelse{\equal{#1}{.}}%
286 {}%
287 {\def\vlnlastcord{#1}%
288 %\vlndoatnote{\vlnlastpos}%
289 % {}%
290 % {\vbox to0pt{%
291 % \setbox0=\hbox{{\vlncordfont{%
292 % \count@#1\relax%
293 % \advance\count@ by1\relax%
294 % \ifcase\count@%
295 % \or 0\or 1\or 2\or 3%
296 % \fi}}}%
297 % %\nobreak\vskip\vlnnotevdim\relax%
298 % %\nobreak\vskip0.2mm\relax%
299 % \nobreak\vskip-0.2mm\relax%
300 % \nobreak\vskip-\ht0\relax%
301 % \nobreak\hskip\vlnnotehdim\relax%
302 % \nobreak\hskip-\wd0\relax%
303 % \box0}}%
304 % {}%
305 }%
306 }%
307 % Doigts
308 \ifthenelse{\equal{#3}{.}}%
309 {}%
310 {\vlnlastfinger#3\relax}%
311 \ifthenelse{\equal{\vlnlastbow}{N}%
312 % \OR\equal{\the\vlnlastfinger}{\vlnlastfingerpos}%
313 % \AND\equal{\the\vlnlastpos}{\vlnlastposfinger}%
314 % \AND\equal{\the\vlnlastcord}{\thevlnlastlastcord}%
315 }%
316 {}%
317 {%
318 \expandafter\edef\csname vlnlastfingerpos\romannumeral\vlnlastpos\endcsname{\the\vlnlastfinger}%
319 \expandafter\edef\csname vlnlastposfinger\romannumeral\vlnlastfinger\endcsname{\the\vlnlastpos}%
320 \vlndoatnote{\vlnlastpos}%
321 {}%
322 {\vbox to0pt{%
323 \setbox0=\hbox{{\vlnfingerfont{\the\vlnlastfinger}}}%
324 \nobreak\vskip-0.2mm\relax%
325 \nobreak\vskip-\ht0\relax%
326 %\vskip-\dp0\relax%
327 \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
328 \box0}}%
329 {}%
330 }%
331 % Nom
332 \ifthenelse{\equal{#5}{\vlnlastname}\AND\equal{#2}{\vlnlastpos}}%
333 {}%
334 {%
335 \def\vlnlastname{#5}%
336 \expandafter\edef\csname vlnlastposname\romannumeral\vlnlastpos\endcsname{#5}%
337 \ifthenelse{\equal{\vlnlastbow}{N}}%
338 {}%
339 {%\edef\vlnlastname{#5}%
340 \vlndoatnote{\vlnlastpos}%
341 {}%
342 {\vbox to0pt{%
343 \setbox0=\hbox{{\vlnnamefont{#5}}}%
344 \nobreak\vskip\vlnnotevdim\relax%
345 \nobreak\vskip0.2mm\relax%
346 \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
347 \box0}}%
348 {}%
349 }%
350 }%
351 \@ifnextchar&{%
352 \def\next&{%
353 \nointerlineskip%
354 }%
355 \next%
356 }{%
357 \vlnnextnote%
358 \nointerlineskip%
359 }%
360 }%
361 % Cordes
362 \def\vlncordposi{0}% G
363 \def\vlncordposii{7}% D
364 \def\vlncordposiii{14}% A
365 \def\vlncordposiv{21}% E
366 % Crochets
367 \def\vlnnotehook{}%
368 % Demi-tons alphabétiques sans modification
369 \expandafter\def\csname vlnnotetoneofnameG=\endcsname{0}%
370 \expandafter\def\csname vlnnotetoneofnameG+\endcsname{1}%
371 \expandafter\def\csname vlnnotetoneofnameA-\endcsname{1}%
372 \expandafter\def\csname vlnnotetoneofnameA=\endcsname{2}%
373 \expandafter\def\csname vlnnotetoneofnameA+\endcsname{3}%
374 \expandafter\def\csname vlnnotetoneofnameB-\endcsname{3}%
375 \expandafter\def\csname vlnnotetoneofnameB=\endcsname{4}%
376 \expandafter\def\csname vlnnotetoneofnameB+\endcsname{5}%
377 \expandafter\def\csname vlnnotetoneofnameC-\endcsname{4}%
378 \expandafter\def\csname vlnnotetoneofnameC=\endcsname{5}%
379 \expandafter\def\csname vlnnotetoneofnameC+\endcsname{6}%
380 \expandafter\def\csname vlnnotetoneofnameD-\endcsname{6}%
381 \expandafter\def\csname vlnnotetoneofnameD=\endcsname{7}%
382 \expandafter\def\csname vlnnotetoneofnameD+\endcsname{8}%
383 \expandafter\def\csname vlnnotetoneofnameE-\endcsname{8}%
384 \expandafter\def\csname vlnnotetoneofnameE=\endcsname{9}%
385 \expandafter\def\csname vlnnotetoneofnameE+\endcsname{10}%
386 \expandafter\def\csname vlnnotetoneofnameF-\endcsname{9}%
387 \expandafter\def\csname vlnnotetoneofnameF=\endcsname{10}%
388 \expandafter\def\csname vlnnotetoneofnameF+\endcsname{11}%
389 \expandafter\def\csname vlnnotetoneofnameG-\endcsname{11}%
390 % Modifications
391 \expandafter\def\csname vlnshiftsymbol-\endcsname{$\flat$}%
392 \expandafter\def\csname vlnshiftsymbol=\endcsname{}%
393 \expandafter\def\csname vlnshiftsymbol+\endcsname{$\sharp$}%
394 \def\vlnnotedrawtonebyname#1#2#3#4#5#6{%
395 \ifthenelse{\equal{#1}{.}}%
396 {}%
397 {\vlnlastposoctave#1\relax}%
398 \ifthenelse{\equal{#2}{.}}%
399 {}%
400 {\def\vlnlastletter{#2}}%
401 \ifthenelse{\equal{#3}{.}}%
402 {}%
403 {\def\vlnlastshift{#3}}%
404 \edef\tmp{\csname vlnnotetoneofname\vlnlastletter\vlnlastshift\endcsname}%
405 \vlnnotepos\tmp%
406 \count@\vlnlastposoctave\relax%
407 \multiply\count@ by12\relax%
408 \advance\vlnnotepos by\count@%
409 \ifthenelse{\equal{#4}{.}}%
410 {\count@\vlnlastcord}%
411 {\count@#4}%
412 \advance\count@ by1\relax%
413 \advance\vlnnotepos by-\csname vlncordpos\romannumeral\count@\endcsname%
414 \edef\nam{\vlnlastletter\csname vlnshiftsymbol\vlnlastshift\endcsname}%
415 \vlnnotedraw crd{#4}pos{\the\vlnnotepos}fgr{#5}bow{#6}nam{\nam}tim%
416 }%
417 \def\vlnpart#1{%
418 \vlndoatnote{0}%
419 {}%
420 {\vbox to0pt{%
421 \setbox0=\hbox{{\vlnpartfont{#1}}}%
422 \nobreak\vskip-0.2mm\relax%
423 \nobreak\vskip-\ht0\relax%
424 \dp0=0pt\relax% NOTE: to prevent fonts like pnc to mess up the vertical alignment
425 \box0}}%
426 {}%
427 }%
428 \def\vlnbar{%
429 \vlndoatnote{0}%
430 {}%
431 {\vbox to0pt{%
432 \setbox0=\hbox{\color{colVlnLineHalfToneBase}\vrule depth 0pt height \vlnstaffvdim width 0.1pt\relax}%
433 \nobreak\vskip\vlnnotevdimmore\relax%
434 \dp0=0pt\relax%
435 \box0}}%
436 {}%
437 }%