diff options
Diffstat (limited to 'obsolete/macros/mtex/macros/mtex.tex')
-rw-r--r-- | obsolete/macros/mtex/macros/mtex.tex | 1976 |
1 files changed, 1976 insertions, 0 deletions
diff --git a/obsolete/macros/mtex/macros/mtex.tex b/obsolete/macros/mtex/macros/mtex.tex new file mode 100644 index 0000000000..57c2acdb2d --- /dev/null +++ b/obsolete/macros/mtex/macros/mtex.tex @@ -0,0 +1,1976 @@ +% % +% Copyright (C) 1986,1987 by Andrea Steinbach and Angelika Schofer % +% % +% % +% 10.11.87 \def\hunkglue ge"andert. (welche Auswirkungen hat das, % +% ausser dass \two... einen Fehler weniger macht???) % +% 16.11.87 \def\intslurwidth ge"andert (vor division += \seminhw % +% 16.11.87 \def\gradientslur ge"andert (vor division += .5\seminhh % +% % +\def\fmtname{MTeX}\def\fmtversion{0.92} +\immediate\write10{MTeX Version 0.92 - Release 16 November 1987} +% % +% INHALTSVERZEICHNIS % +% % +% Allgemeine Vereinbarungen ......................................... 2 % +% Definitionen der neuen Zeichensaetze .............................. 2 % +% Definitionen der neuen Character .................................. 2 % +% Registerdefinitionen: Count,Box,Dimen usw ......................... 3 % +% Registerinitialisierungen ......................................... 6 % +% Punktierung ....................................................... 7 % +% Hilfsfunktionen - Hilfsmacros ..................................... 8 % +% Macros zur Listenerzeugung und Verarbeitung .......................10 % +% Notenlinien und Hilfslinien .......................................11 % +% Taktstriche u. ae. ................................................12 % +% Das Setzen der Versetzungszeichen .................................13 % +% Versetzungszeichen - Eingabemacros ................................14 % +% Noten - Eingabemacros ................................14 % +% Pausen - Eingabemacros ................................14 % +% Wertpunkte ........................................................15 % +% Akkorde - Eingabemacros ................................16 % +% Konstruktion der Noten und Pausen .................................16 % +% Berechnung der Notenhalslaengen ...................................17 % +% Konstruktion der Notenhaelse ......................................18 % +% Das Setzen der Noten ..............................................18 % +% Tonarten und Aufloesung, Notenschluessel und Taktangabe ...........19 % +% Die Verarbeitung der Nachbarschaften ..............................20 % +% Die Initialisierung der Listen einer Notengruppe ..................20 % +% Abarbeitung und Setzen einer Notengruppe ..........................21 % +% Verbalkung - Eingabemacros ........................................21 % +% Berechnungen der Halslaengen und Steigung .........................22 % +% Plazierung und Zusammensetzung der Balken .........................24 % +% Die Bogen .........................................................25 % +% Akzente fuer Noten und Akkorde ....................................30 % +% Textunterlage .....................................................31 % +% Zweistimmige Notation in einem System .............................33 % +% Beginn und Ende ...................................................33 % +% Defaults ..........................................................34 % +% % +% % +% (Seitennummern bei Druck des Makropakets mit 60 Zeilen je Seite) % +% % +% % +% % +% % +% % +% % +% % +% % +% % +% % +% % +% % +% % +% % +\catcode`@=11 +% ************************************************** % +% * Allgemeine Vereinbarungen * % +% ************************************************** % +\frenchspacing +%\parindent 0pt +% Parameter fuer Notensatz +\def\inisong{\linepenalty10%\linepenalty100 + \pretolerance=-1 + \tolerance=200 + \finalhyphendemerits=-1000 + \hyphenpenalty=-1000 + \exhyphenpenalty=-100 + \doublehyphendemerits=-1000 + \adjdemerits=1000 + \adjdemerits=250 + \interlinepenalty=-10 \inidefaults}%\inidefaults siehe DEFAULTS +%\parfillskip0pt +% Dimensionen die in PLAIN TEX eingefuehrt wurden +%\newdimen\p@ \p@=1pt % this saves macro space and time +%\newdimen\z@ \z@=0pt % can be used both for 0pt and 0 +%\newskip\z@skip \z@skip=0pt plus0pt minus0pt +%\newbox\voidb@x % permanently void box register +% ************************************************** % +% * Definition der neuen Zeichensaetze * % +% ************************************************** % +\font\music=music16 %Noten +\font\smallmusic=music16 %Noten(im Moment noch mit + %\music identisch +\font\beamfont=beam16 %Balken +\font\slurfont=slur16 %Bogen +\font\slurfontuu=sluruu16 %Bogen +\font\slurfontud=slurud16 %Bogen +\font\slurfontdu=slurdu16 %Bogen +\font\slurfontdd=slurdd16 %Bogen +\font\eightrm =cmr8 +% ************************************************** % +% * Definition der neuen Character * % +% ************************************************** % +\catcode`\"=12 +\def\hex{"} % zum Eingeben von Zahlen in hex +\def\3{\char"19{}} +\catcode`\"=\active %Unlaute +\def"{\accent'177} +% +\chardef\quart=\hex21 %Notenkoepfe +\chardef\half=\hex22 +\chardef\whole=\hex23 +\chardef\eighthup=\hex28 %Faehnchen +\chardef\eighthdown=\hex2D +\chardef\sixteenthup=\hex29 +\chardef\sixteenthdown=\hex2E +\chardef\thirtytwoup=\hex2A +\chardef\thirtytwodown=\hex2F +\chardef\sixtyfourup=\hex2B +\chardef\sixtyfourdown=\hex30 +\chardef\hundredtwentyeightup=\hex2C +\chardef\hundredtwentyeightdown=\hex31 +\chardef\wholerest=\hex3C %Pausen +\chardef\halfrest=\hex3D +\chardef\quartrest=\hex3E +\chardef\eighthrest=\hex3F +\chardef\sixteenthrest=\hex40 +\chardef\doublerest=\hex3A %Taktpausen +\chardef\ddoublerest=\hex3B +\chardef\fermateup=\hex50 %Fermaten +\chardef\fermatedown=\hex51 +\chardef\mflat=\hex32 %Versetzungszeichen +\chardef\mdoubleflat=\hex33 +\chardef\mquartflat=\hex37 +\chardef\mthreequartflat=\hex3A +\chardef\msharp=\hex34 +\chardef\mdoublesharp=\hex35 +\chardef\mnatural=\hex36 +\chardef\mviolin=\hex47 %Notenschluessel +\chardef\mviolinoct=\hex47 +\chardef\mviolinOct=\hex47 +\chardef\mbass=\hex49 +\chardef\mbassoct=\hex49 +\chardef\mbassOct=\hex49 +\chardef\mbariton=\hex4D +\chardef\mtenor=\hex4C +\chardef\malt=\hex4B +\chardef\mmezzosopran=\hex4E +\chardef\msopran=\hex4E +\chardef\mC=\hex53 %Taktangaben +\chardef\allabreve=\hex52 +\chardef\mCreverse=\hex54 +% ************************************************** % +% * Registerdefinitionen * % +% ************************************************** % +%1.Hilfsregister +\newbox\hb@i % Hilfsbox +\newbox\hb@ii % Hilfsbox +\newbox\hb@iii % Hilfsbox +\newbox\hb@iv % Hilfsbox +\newdimen\hd@i % Hilfsdimension +\newdimen\hd@ii % Hilfsdimension +\newdimen\hd@iii % Hilfsdimension +\newcount\hc@i % Hilfscount +\newcount\hc@ii % Hilfscount +\newskip\hs@i % Hilfsskip +\newskip\hs@ii % Hilfsskip +\newskip\hs@iii % Hilfsskip +\newskip\hs@iv % Hilfsskip +\newskip\hs@v % Hilfsskip +\newskip\hs@vi % Hilfsskip +\newskip\hs@vii % Hilfsskip +\newtoks\ht@i % Hilfstokenregister +%2. Boxes fuer Notenkonstruktionen +\newbox\notebox %zum Setzen der Noten +\newbox\leftbox %Akkordnoten links vom Notenhals +\newbox\rightbox %Akkordnoten rechts vom Notenhals +\newbox\dotbox %Wertpunkte fuer Akkorde +\newbox\akzentbox %Akzente +\newbox\hunkbox %Hunks +\newbox\h@nkbox %Hunks im zweidimensionalen Satz +\newbox\legerbox %Hilfslinien +\newbox\firstvoice %erste Stimme bei Zweistimmiger Notation +\newbox\secondvoice %zweite Stimme bei Zweistimmiger Notation +\newbox\placebox %zum Setzen der Taktangabe +\newbox\neighborhood %Box zum Speichern der Nachbarschaft +%3. Tokenregister +\newtoks\notename %Noten- oder Pausenwertname +\newtoks\direction %Richtung des Notenhalses up oder down +\newtoks\d@rection %Richtung des Notenhalses (global) +\newtoks\cleftoks %aktueller Notenschluessel +\newtoks\signtoks %aktuelle Vorzeichnung +\newtoks\canceltoks %aktuelle Aufloesung +\newtoks\slurtoks %zur Bestimmung des Charactercodes fuer Bogen +\newtoks\ta %fuer Listenverarbeitung .... +\newtoks\tb % .... bei \rightappend +%4.Umgebungen +\newif\iffirst %erste Zeile Zeilenanfang: Initialisierung von + %Notenschluessel, Tonart und Taktart +\newif\ifbeam %Verbalkung +\newif\ifchord %Akkord +\newif\ifleft %Plazieren der Akkordnoten links vom Notenhals +\newif\ifstemup %Notenhalsrichtung aufwaerts +\newif\ifgroup %Initialisierung der Nachbarschaftslisten +\newif\iftwo %zweistimmiger Notensatz +\groupfalse\chordfalse\leftfalse\beamfalse\groupfalse\twofalse +%5.Countregister +\newcount\dur@tion +% \dur@tion Notenwert +% 0 1/1 +% 1 1/2 +% 2 1/4 +% 3 1/8 +% 4 1/16 +% 5 1/32 +% 6 1/64 +% 7 1/128 +\newcount\pitch % interne Tonhoehe +\newcount\pit@ % interne Hilfstonhoehe +\newcount\oldpitch % interne Tonhoehe +\global\oldpitch=0 % Anfangsbelegung +\newcount\maxpitch % maximale interne Tonhoehe bei Akkord +\newcount\minpitch % minimale interne Tonhoehe bei Akkord +\newcount\nn % Anzahl der Hilfslinien +\newcount\clefcount % Parameter Verschieben der Vorzeichnung + % abhaengig von Notenschluessel +\newcount\accpitch % Vozeichnungs Tonhoehe + %Nachbarschaften: Balken- und Bogengruppen +\newcount\tieconst % Konstante fuer Hoehe des Bogenstuecks + % fuer Haltebogen +\newcount\phraseconst % konstantes Bogenstueck bei Phrasierungs- + % bogen +\newcount\n@a % Index 1.Element einer Gruppe +\newcount\n@i % Laufindex in der Gruppe +\newcount\n@e % Index letztes Element einer Gruppe +\newcount\N % Kardinalitaet der Nachbarschaft +\newcount\m@i % Listenindex +\newcount\m@ii % Listenindex +\newcount\L@ % Laenge des Balkens in 0.5pt +\newcount\l@ % zur Zusammensetzung des Balkens +\newcount\m@a\newcount\m@e % Anfangs- und Endindex der Elementliste + % die durch einen Balken verbunden werden + % sollen +\newcount\P@i %lok. pitch, der in endpoint benutzt wird +\newcount\P@a %Anfangspitch +\newcount\P@e %Endpitch +\newcount\beamrow %Korrektur von vpos bei mehrfachverb. +\newcount\S % Steigung +\newcount\S@ % Absolutbetrag der Steigung +\newcount\slurwidth % Ganzzahlige Breite eines Bogens in + % Einheiten von \nhw +\newcount\V@int % Ganzzahlige Hoehe eines Bogens in + % Einheiten von 1/2\nhh +\newcount\CODE % Charcode Steigung von Balken +\newcount\flaga % Werte 0,1,2 Bogenanfang +\newcount\flagb % Werte 0,1,2 Bogenende +\newcount\flagc % Balkensteigung = 0 ja/nein +%6.Dimensionsregister +%Konstanten +\newdimen\linethickness % Dicke einer Notenlinie +\newdimen\nhh % Linienabstand, noteheadheight +\newdimen\nhw % Notenkopfbreite, noteheadwidth +\newdimen\seminhh % halber Linienabstand = 1/2\nhh +\newdimen\seminhw % halbe Notenkopfbreite = 1/2\nhw +\newdimen\twonhh % = 2\nhh +\newdimen\I@@ % = 100pt +\newdimen\stemwidth % = 2\linethickness +\newdimen\beamthickness % = 0.6 \nhh +\newdimen\staffheight % = 4\nhh + \linehight +\newdimen\textline % = \staffheigth, Abstand Schriftlinie -- + % Grundlinie bei Textunterlage +\newdimen\linekern % \nhh - \linethickness,kern zw.den Zeilen +\newdimen\Linekern % \nhh -2\linethickness,kern zw.den Zeilen + % bei Hilfslinien +\newdimen\dotwd % Breite eines Verlaengerungspunktes +\newdimen\smkern % kleiner Kern zur Korrektur vor und + % nach Notenkoepfen (Hilfslinien) +%Parameter +\newdimen\yshift % dimen!, um die die Vorzeichen verschoben + % werden in Y-Richtung! +\newdimen\nyshift % dimen!, um die die NOTENbox verschoben + % wird in Y-Richtung! +\newdimen\lyshift % dimen!, um die die LEGERbox verschoben + % wird in Y-Richtung! +\newdimen\akzent@pos %vertikale Positionierung eines + %Artikulationszeichens + %Nachbarschaften: Balken- und Bogengruppen +\newdimen\s@a %Anfangstemlength +\newdimen\s@e %Endstemlength +\newdimen\minsl %untere Grenze f. Stemverkuerzung +\newdimen\R@i % rel. Hoehe des Notenkopfes pitch*seminhh +\newdimen\E@a % Endpunkt des Notenhalses Anfangsnote +% pitch*seminhh +(-)stemlength +\newdimen\R@a % rel. Hoehe des Notenkopfes pitch*seminhh +\newdimen\E@e % Endpunkt des Notenhalses Endnote +% pitch*seminhh +(-)stemlength +\newdimen\R@e % relative Hoehe des Notenkopfes +\newdimen\s@i %lok. stemlength, in endpoint +\newdimen\Abs %Absoluter Abstand zwischen 2 Endpunkten +\newdimen\corr %Korrekturwert fuer 2. Stem +\newdimen\sl@c %4.Korrekturwert fuer Stemlaengen +\newdimen\EP@ %Endpunkt des ersten Stems einer Notengr. +\newdimen\EP@i %Endpunkt des Stems innerhalb einer Gruppe +\newdimen\E@l % Unterer Startpunkt fuer Bogenansatz +\newdimen\E@u % oberer Startpunkt fuer Bogenansatz +\newdimen\H@e % horizontaler Abstand zwischen zwei Noten +\newdimen\H@a % Korrekturwert zur Berechnung von H@e +\newdimen\H@a@cor % Korrekturwert zur Berechnung der Laenge + % Balkens oder Bogens (bzgl. H@list) +\newdimen\H@e@cor % Korrekturwert zur Berechnung der Laenge + % Balkens oder Bogens (bzgl. H@list) +\newdimen\limit %\limit = 0.45\H@e=Grenzwert +\newdimen\V@ %vertikaler Abstand zwischen zwei Noten +\newdimen\gradfactor %= 0.005\S\p@ +\newdimen\SHIFT +\newdimen\slurcor % horizontal Kern fuer Bogenpositionierung +\newdimen\H@m@a % Horizontaler Abschnitt von m@a +\newdimen\L@a % Balkenlaenge +\newdimen\V@a % vertikale Position des Balkens +\newdimen\stemlength % Laenge des Notenhalses +\newdimen\linelength % Laenge der Notenlinien +%Textunterlage +\newdimen\overtext % fuer Textueberlage +\newdimen\undertext % fuer Textunterlage +%6. Skipregister +% Ausschlussparamter +\newskip \NOTEskip % Glue nach ganzer Note +\newskip \Noteskip % Glue nach halber Note +\newskip \noteskip % Glue nach 1/4 Note +\newskip \notEskip % Glue nach 1/8 Note +\newskip \noTEskip % Glue nach 1/16 Note +\newskip \nOTEskip % Glue nach 1/32 Note +\newskip \nOteskip % Glue nach 1/64 Note +\newskip \nOtEskip % Glue nach 1/128 Note +\newskip \ruleskip % Glue nach Rules +\newdimen\hunkskip % Glue fuer Hunks +\newskip\oldskip % aktueller \spaceskip vor Nachbarschaft +% ************************************************** % +% * Registerinitialisierungen * % +% ************************************************** % +\beamfont \beamthickness = 1ex +\music \nhh = 1ex \nhw = 1em + \seminhh = 0.5\nhh \seminhw = 0.5\nhw + \twonhh = 2 \nhh +\I@@ = 100 pt +\linethickness = 0.15pt +\stemwidth = 2\linethickness +\staffheight = 4 \nhh \advance\staffheight by \linethickness +\linekern = \nhh \advance\linekern by-\linethickness +\Linekern = \nhh \advance\Linekern by-2\linethickness +\overtext =\staffheight \advance\overtext by\nhh +\def\u@text{\relax}\def\l@text{\relax} +\textline =\staffheight +\undertext =\textline +\tieconst = 4 \phraseconst = 2 +\def\up@{up}\def\down@{down} +% ************************************************** % +% * Punktierung * % +% ************************************************** % +%1.Ausschluss-schemata +\let\sk=\spaceskip +%\ruleskip = \seminhw plus \seminhw minus 0.5\seminhw +\ruleskip = \nhw plus \seminhw minus \seminhw +\smkern = 0.2\nhw \relax +\def\hsmall{%hader +\Noteskip 3\nhw plus 2\seminhw minus 2\seminhw +\NOTEskip = \Noteskip +\noteskip 2\nhw plus 1.5\seminhw minus 1.5\seminhw +\notEskip 1\nhw plus \seminhw minus \seminhw +\noTEskip \z@ plus 0.5\seminhw minus \z@ +\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip +\hunkskip \z@\relax} +\def\small{% +\Noteskip 3.5\nhw plus 1.8\seminhw minus 1.8\seminhw +\NOTEskip = \Noteskip +\noteskip 2.5\nhw plus 1.4\seminhw minus 1.4\seminhw +\notEskip 1.5\nhw plus \seminhw minus \seminhw +\noTEskip \seminhw plus 0.6\seminhw minus 0.6\seminhw +\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip +\hunkskip \z@ \relax} +\def\universal{% +\Noteskip 4\nhw plus 1.6\nhw minus 1.6\nhw +\NOTEskip = \Noteskip +\noteskip 3\nhw plus 1.3\nhw minus 1.3\nhw +\notEskip 2\nhw plus \nhw minus \nhw +\noTEskip \nhw plus 0.6\nhw minus 0.6\nhw +\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip +\hunkskip \z@ \relax} +\def\wide{% +\Noteskip 4\nhw plus 1.42\nhw minus 1.42\nhw +\NOTEskip = \Noteskip +\noteskip 3.5\nhw plus 1.28\nhw minus 1.28\nhw +\notEskip 2.5\nhw plus \nhw minus \nhw +\noTEskip 1.5\nhw plus 0.9\nhw minus 0.9\nhw +\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip +\hunkskip \z@ \relax} +\def\loose{% +\Noteskip 5\nhw plus 1.5\nhw minus 1.5\nhw +\NOTEskip = \Noteskip +\noteskip 4\nhw plus 1.25\nhw minus 1.25\nhw +\notEskip 3\nhw plus \nhw minus \nhw +\noTEskip 2\nhw plus 0.75\nhw minus 0.75\nhw +\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip +\hunkskip \z@\relax} +%1.Glue-Makros +\def\hunkglue{\hunkskip=\sk\relax\advance \hunkskip by -\wd\hunkbox + \ifdim\hunkskip>\z@ \hunkskip=\wd\hunkbox\relax +% \else \hunkskip=\sk \advance\hunkskip-\seminhw\relax \fi}%schm 10.11.87 + \else \hunkskip=\sk \relax \fi}%schm 10.11.87 +%Glue vor einer Rule (Taktstrich etc.) +\def\gluebrule{\hunkglue\nobreak\ \hskip-\hunkskip\box\hunkbox% + \u@text\l@text\nobreak} +%Glue vor einer Taktangabe +\def\gluebmeter{\hunkglue\kern\seminhw\nobreak\box\hunkbox% + \u@text\l@text\nobreak} +%Glue nach einer Rule (Taktstrich etc.) +\def\gluearule{\-\global\sk\ruleskip} +\def\set@rulesk{\global\sk\ruleskip} +%Glue vor einer Note +\def\sethunkglue{\hunkglue\nobreak\ \hskip-\hunkskip} +%Umbruchm"oglichkeit im Taktinnern +\def\+{\ \-\global\sk=\z@skip} +% ************************************************** % +% * Hilfsfunktionen * % +% ************************************************** % +%entspricht dem von Knuth angegebenen Makro der \loop-Schleife, jedoch +%wird die Schleife bei \else wiederholt. +\def\looop#1\leave{\def\boddy{#1}\iiterate} +\def\iiterate{\boddy \let\nexxt\relax \else\let\nexxt\iiterate\fi \nexxt} +\let\leave=\fi % this makes \looop...\if...\leave skippable +% entspricht |#1 - #2| +\def\distance#1#2{\relax\ifdim#1>#2\relax\Abs=#1\advance\Abs by-#2\relax + \else\Abs=#2\advance\Abs by-#1\relax\fi} +%Notensetzen, z.B. Ineinanderschieben von Hilfslinienbox und Notenbox +%Breite des Boxinhalts wird ignoriert +\def\cbox#1{\hbox to \z@{\hss#1\hss}} % zentriert den Inhalt der Box +\def\hboxnhw#1#2{\hbox to \nhw{\hss\cbox{#1}\cbox{#2}\hss}} + %Box der Breite eines Notenkopfes +\def\ignore#1{\hbox to \z@{\hss#1}} % entspricht \llap in PLAIN + %z.B. fuer Oktavierung des Versetzungszeichen +%Rules fuer Phrasierungen +\def\r@lef@ill#1{\leaders\hrule height \z@ depth #1 \relax\hfill} +\def\r@lef@ll#1{\leaders\hrule height #1 depth \z@ \relax\hfill} +%zum Setzen der Phrasierungsboegen +\def\vt@@#1{\vtop to\z@{\offinterlineskip\null\hbox{#1}\vss}} +\def\vb@@#1{\vbox to\z@{\offinterlineskip\vss\hbox{#1}\null}} +% Korrekturfunktionen fuer Berechnung der Halslaenge +\def\corra#1{\relax \ifdim\Abs>\seminhh + \ifdim#1>\minsl \advance #1 by -\seminhh\fi + \fi} +%1. Verkuerzung, des hoeherliegenden(stemup) bzw. tieferliegenden +%(stemdown) Notenhalses um \seminhh falls moeglich(Abstand>\seminhh) +\def\corrb#1{\advance #1 by \corr} +%2. Verlaengerung des anderen Notenhalses um Hoechstabstand zu +%erreichen +\def\corrc#1{\advance #1 by \seminhh} +%3. p1^=p2 Abstand =0 : Verkuerzung des Notenhalses der tiefer (hoeher) +%gelegenen Note um \seminhh +% +%Funktionen die die vertikalen Abstaende +%der Bogenendpunkte von der Grundlinie berechnen +%dabei ist E@u der Ansatz des oberhalb verlaufenden Bogens +%und E@l der Ansatz des unterhalb verlaufenden Bogens +%Punkte fuer Akkorde (oberhalb/unterhalb) +\def\chordupperstartpoints{% + \global\E@u\maxpitch\seminhh \global\advance\E@u\nhh + \ifdim\E@u<\z@ \global\advance \E@u-\I@@ + \else \global\advance \E@u \I@@ \fi} +\def\chordlowerstartpoints{% + \global\E@l\minpitch\seminhh \global\advance\E@l-\nhh + \ifdim\E@l<\z@ \global\advance \E@l-\I@@ + \else \global\advance \E@l \I@@ \fi} +\def\whatisnewstartpoint{% + \ifdim\E@a=\z@ \global\E@a = 1sp \fi + \ifstemup\relax + \expandafter\exchange\the\E@a\in\uslurlist\at \n@a + \else \relax + \expandafter\exchange\the\E@a\in\lslurlist\at \n@a + \fi + } +%neue Ansatzwerte E@l E@u berechnen und an \n@i-te Stelle der +% \lslurlist bzw. \uslurlist setzen (NACH Balkenberechnung) +\def\whatarenewstartpoints{% + \ifdim\EP@i=\z@ \global\EP@i = 1sp \fi + \ifstemup\relax + \expandafter\exchange\the\EP@i\in\uslurlist\at \n@i + \else \relax + \expandafter\exchange\the\EP@i\in\lslurlist\at \n@i + \fi + } +% belegt #2 mit dem Endpunkt des Notenhalses des #1-ten Elementes der +% Notengruppe +\def\getendpoint#1#2{\relax\hc@i=#1% + \lokalassign\hc@i\of\H@list\to\hd@i + \lokalassign\hc@i\of\H@corlist\to\hd@ii + \select\hc@i\of\dir@list\to\dir@i + \ifx\dir@i\down@ \advance\hd@ii\nhw \fi + \advance\hd@i by-\hd@ii + \advance\hd@i by-\H@a \multiply\hd@i by\S \hd@i=0.01 \hd@i + \advance\hd@i by\EP@ %EP@ = Endpunkt @ n@a + \global#2=\hd@i} +% +% Weist \S die im Balken- / Bogenfont vorhandene Steigung zu +\def\addC{\global\advance\CODE by } +\def\assignS{% + \ifnum\S<0 \S@=-\S \else \S@=\S \fi + \ifnum\S@< 1 \S@=0 \else + \ifnum\S@< 8 \S@=5 \else + \ifnum\S@<12 \S@=10 \else + \ifnum\S@<17 \S@=15 \else + \ifnum\S@<22 \S@=20 \else + \ifnum\S@<27 \S@=25 \else + \ifnum\S@<32 \S@=30 \else + \ifnum\S@<40 \S@=35 \else \S@=45\fi\fi\fi\fi\fi\fi\fi\fi + \ifnum\S<0\global\S=-\S@ \else\global\S=\S@\fi} +% Berechnet den Code der Steigung im Bogenfont +\def\assignCODE{% + \ifnum\S< 0 \global\CODE = 64 \S@ = -\S \else \S@ = \S + \global\CODE = 0 \fi + \ifnum\S@< 6 \addC 0 \else + \ifnum\S@<11 \addC 8 \else + \ifnum\S@<16 \addC16 \else + \ifnum\S@<21 \addC24 \else + \ifnum\S@<26 \addC32 \else + \ifnum\S@<31 \addC40 \else + \ifnum\S@<36 \addC48 \else + \ifnum\S@<46 \addC56 \fi\fi\fi\fi\fi\fi\fi\fi} +%Im Moment benutzte Steigungen +%5 10 15 20 25 30 35 45 +\def\assignuslurchar{\hc@i=\slurwidth + \ifnum\V@int= 0 %\V@=\z@ + \ifnum\hc@i>1 \advance\hc@i-2 \else \advance\hc@i-1 \fi + \edef\slurchar{\the\hc@i}% + \else + \ifnum\slurwidth<4 \multiply\hc@i\slurwidth + \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1 + \multiply\hc@i8\edef\slurchar{\the\hc@i}% + \else\advance\hc@i-2 \hc@ii=\V@int\advance\hc@ii-1 + \ifodd\hc@i\divide\hc@i2 + \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}% + \else \divide\hc@i 2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi + \fi + \fi\slurtoks=\expandafter{\slurchar}} +\def\assignlslurchar{\hc@i=\slurwidth + \ifnum\V@int= 0 %\V=\z@ + \ifnum\hc@i>1\advance\hc@i14 \else\advance\hc@i15 \fi + \edef\slurchar{\the\hc@i}% + \else + \ifnum\slurwidth<4 \multiply\hc@i by \slurwidth + \advance\hc@i-\slurwidth\advance\hc@i\V@int\advance\hc@i-1 + \multiply\hc@i8\edef\slurchar{\noexpand\the\hc@i}% + \else\advance\hc@i-2\hc@ii=\V@int\advance\hc@ii-1 + \ifodd\hc@i\divide\hc@i2 + \edef\slurchar{\noexpand'1\the\hc@ii\the\hc@i}% + \else \divide\hc@i2 \edef\slurchar{\noexpand'\the\hc@ii\the\hc@i}\fi + \fi + \fi\slurtoks=\expandafter{\slurchar}} +% ************************************************** % +% * Macros zur Listenerzeugung und Verarbeitung * % +% ************************************************** % +%\newtoks\ta\newtoks\tb +%Haengt an Liste #2 ein neues Element mit Inhalt #1 an +\long\def\rightappend#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}% + \edef#2{\the\tb\the\ta}} +%Weist dem Register (Counter oder Dimension oder Skip ) den Wert des +%#1-ten Elementes der Liste #2 zu (lokal bzw. global) +\def\assign#1\of#2\to#3{\m@i=#1\relax + \long\def\\##1{\advance\m@i-1\relax % globale Zuweisung + \ifnum\m@i=0\relax\global#3=##1\fi}#2\relax} +% +\def\lokalassign#1\of#2\to#3{\m@i=#1\relax % lokale Zuweisung + \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax#3=##1\fi}#2\relax} +% +%Definiert die Kontrollsequenz #3 als den Inhalt des +%#1-ten Elementes der Liste #2 zu (lokal). +\def\select#1\of#2\to#3{\m@i=#1\relax % lokale Zuweisung + \long\def\\##1{\advance\m@i-1\relax\ifnum\m@i=0\relax\def#3{##1}\relax + \fi}#2\relax} +% +%setzt #1=Anzahl der Elemente einer Liste +\def\cardinality#1\to#2{#2=0\long\def\\##1{\advance#2 by 1 }#1} +% +%Tauscht in Liste #2 den Inhalt des #3-ten Elementes gegen #1 aus. +\def\exchange#1\in#2\at#3{\m@i=#3\long\def\\##1{\advance\m@i-1 + \ifnum\m@i=0 \rightappend{#1}\to\helplist + \else\rightappend##1\to\helplist\fi}#2% + \let\hhelplist=\helplist\global\let#2=\hhelplist\let\helplist=\empty + } +%abhaengig von der Notenkonstellation Abfrage auf \S=0 +\def\gradz@\in#1\with#2#3\from#4\to#5{\m@i=#4\m@ii=#5\relax + \advance\m@i 1 \advance\m@ii -1 + \long\def\\##1{\advance\m@i-1\advance\m@ii-1 + \ifnum\m@i<1 \ifnum\m@ii>-1 \hc@i=##1\relax + \ifnum\hc@i#2#3 \relax \else + \global\flagc=0 \ifnum\hc@i#2 4 \relax \else \global\minsl=\twonhh\fi + \fi\fi\fi}#1} +% +%addiert den Wert von \sl@c zum Wert in Liste #1 von Element #2 bis #3 +\def\addslc\in#1\from#2\to#3{\m@i=#2\m@ii=#3\long\def\\##1{\advance\m@i-1 + \advance\m@ii-1 + \ifnum\m@i<1 \ifnum\m@ii>-1 \hd@i=##1 \advance\hd@i\sl@c + \expandafter\rightappend\the\hd@i\to\helplist\else + \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}#1% + \let\hhelplist=\helplist\global\let#1=\hhelplist\let\helplist=\empty} +% +%wechselt die Richtungen der Notenh"alse in der \dir@list vom +%#2-ten bis zum #3-ten Element gegen #1 aus. +\def\putdir#1\from#2\to#3{\m@i=#2\m@ii=#3\def\helplist{}% +\long\def\\##1{\advance\m@i-1 + \advance\m@ii-1 + \ifnum\m@i<1 \ifnum\m@ii>-1 + \expandafter\rightappend#1\to\helplist\else + \rightappend##1\to\helplist\fi\else\rightappend##1\to\helplist\fi}% + \dir@list% + \let\hhelplist=\helplist\global\let\dir@list + =\hhelplist\let\helplist=\empty} +% +%Ersetzt den Inhalt des #4-ten Elementes der Liste #3 durch +%#1 Inhalt #2 +\def\additem#1#2\in#3\at#4{\m@i=#4\long\def\\##1{\advance\m@i-1 \relax + \ifnum\m@i=0\ht@i{##1}\edef\h@@@{#1\the\ht@i#2}\expandafter + \rightappend\h@@@\to\helplist\else\rightappend##1\to\helplist\fi}#3% + \let\hhelplist=\helplist\global\let#3=\hhelplist\let\helplist=\empty + } +% ************************************************** % +% * Notenlinien und Hilfslinien * % +% ************************************************** % +\def\nobaselines{\baselineskip=\z@ \lineskip=\z@ \lineskiplimit=\z@} +%\baselinesa und \baselinesb = zwei Verschiedene M"oglichkeiten f"ur +% die Interline Glue Wahl. +\def\baselinesa{% + \baselineskip=2\staffheight plus \staffheight minus .5\staffheight + \lineskip=0.5\staffheight plus \staffheight minus .5\staffheight + \lineskiplimit=0.5\staffheight} +\def\baselinesb{% + \baselineskip=3\staffheight plus \staffheight minus .5\staffheight + \lineskip=0.5\staffheight plus \staffheight minus .5\staffheight + \lineskiplimit=0.5\staffheight} +%Notenlinie +\def\hr{\hrule height\linethickness depth \z@ width \linelength} +%Notenlinie und Zwischenraum +\def\hrv{\hr\kern\linekern} +%Hilfslinie +\def\HRULE{\hrule height\linethickness depth\linethickness width \twonhh} +%Hilfslinie und Zwischenraum fuer Hilfslinien unterhalb des Systems +\def\KHR{\kern\Linekern\HRULE} +%Hilfslinie und Zwischenraum fuer Hilfslinien oberhalb des Systems +\def\HRK{\HRULE\kern\Linekern} +%Liniensystem +\def\lines{\linelength=\hsize + \hbox to \z@{\vbox{\hrv\hrv\hrv\hrv\hr}\hss}} +%Liniensystem fuer erste Zeile unter Ber"ucksichtigung des \parindent +\def\firstlines{\hbox to \z@{\linelength=\hsize\advance\linelength by + -\parindent \vbox{\hrv\hrv\hrv\hrv\hr}\hss}} +% +%macros, die die Hilfslinienbox herstellen zur zugeho"rigen Note +%\nn = Anzahl der ben"otigten Hilfslinien +%formel: \pitch<0 \nn=-\pitch/2, \pitch>8 \nn=(\pitch-8)/2, \nn=0 sonst +\def\legerlines{\leger@cal\ifnum\nn=0 \global\setbox\legerbox\null% + \else\relax\ifnum\pitch<0 \global\setbox\legerbox=\vtop{\leger@line}% + \else\global\setbox\legerbox=\vbox{\leger@line}\fi\fi} +\def\leger@line{\begingroup \loop \ifnum \nn>0 \aftergroup \HR + \advance\nn-1 \repeat \endgroup} +\def\leger@cal{\ifnum\pitch<-1 \nn =-\pitch \lyshift =\z@ \let\HR=\KHR + \else\relax\ifnum\pitch<10 \nn = 0 \lyshift =\z@ + \else\nn=\pitch\advance\nn-8 \lyshift=4\nhh%\staffheight-\linethickness + \let\HR=\HRK + \fi\fi \divide \nn by 2 } +%Hilfslinien bei Akkorden +\def\chordlegerlines{% + \ifleft + \global\setbox\leftbox= + \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\leftbox}% + \else + \global\setbox\rightbox= + \hboxnhw{$\raise\lyshift\box\legerbox$}{\box\rightbox}% + \fi} +% ************************************************** % +% * Taktstriche u. a". * % +% ************************************************** % +%Striche +%Atemzeichen +\def\caesurasign{\vrule height4.5\nhh depth-3.5\nhh width3\linethickness} +%schmaler Strich: Taktstrich +\def\thinvrule{\vrule height\staffheight depth \z@ width2 \linethickness} +%dicker Strich: +\def\thickvrule{\vrule height\staffheight depth \z@ width 0.5\nhh} +%Doppelpunkt fuer Wiederholungszeichen: +\def\doppelpunkt{% + \hbox{\vrule height 2.6\nhh depth-2.4\nhh width 0.2\nhh\kern-0.2\nhh + \vrule height 1.6\nhh depth-1.4\nhh width 0.2\nhh}} +%zu Taktstrichen zusammengesetzte Striche: +\def\doppelstrich{\thinvrule\kern.25\nhw\thinvrule} +\def\schlussstrich{\thinvrule\kern\seminhw\thickvrule} +%wiederholungszeichen mit Doppelpunkt links +\def\repstrich{\doppelpunkt\kern\seminhw + \thinvrule\kern\seminhw\thickvrule} +%wiederholungszeichen mit Doppelpunkt rechts +\def\revrepstrich{\thickvrule\kern\seminhw\thinvrule\kern\seminhw + \doppelpunkt} +% +%taktstriche mit Glue +\def\|{\gluebrule\thinvrule\gluearule} +\def\={\gluebrule\schlussstrich\gluearule\null} +\def\doublebarline{\gluebrule\doppelstrich\gluearule\null} +\def\rightrepeat{\gluebrule\repstrich\gluearule\null} +\def\leftrepeat{\gluebrule\thinvrule\-\revrepstrich\nobreak} +\def\leftrightrepeat{\gluebrule\repstrich\-% + \kern-\seminhw\revrepstrich\global\sk\ruleskip} +% +% Makro fuer Orientierungszeichen +\def\boxed#1{\setbox0=\hbox{$\displaystyle{#1}$}\hbox{\lower.4pt\hbox{\lower + 3pt\hbox{\lower 1\dp0\hbox{\vbox{\hrule height .4pt \hbox{\vrule width + .4pt \hskip 3pt\vbox{\vskip 3pt\box0\vskip3pt}\hskip 3pt \vrule width + .4pt}\hrule height .4pt}}}}}} +%Kaesten +\def\1#1\2#2\*{\def\f@rsttime{#1*}\def\s@condtime{#2*}% + \expandafter\evalfirst\f@rsttime!!!% + \ifx\interim\empty \nobreak\box@@@\else + \looop\expandafter\evalinterim\interim!!!% + \ifx\interim\empty\relax\nobreak\box@@@\leave\fi + \expandafter\evalsecond\s@condtime!!!% + \ifx\interim\empty \relax\else + \looop\expandafter\evalinterim\interim!!!% + \ifx\interim\empty\relax\leave\fi +} +\def\evalfirst#1*#2!!!{\def\interim{#2}\penalty-1000\box@{#1}} +\def\evalinterim#1*#2!!!{\def\interim{#2}\penalty-1000\box@@{#1}} +\def\evalsecond#1*#2!!!{\def\interim{#2}\penalty-1000\box@@@@{#1}} +\def\box@#1{\let\setlines\relax\gluebrule + \vbox{\halign{##\cr\repbox{1.}\r@lef@ll{\linethickness}\cr + \noalign{\nointerlineskip}% + \repstrut\thinvrule\gluearule#1\cr}}% + \let\setlines=\s@tlines} +\def\box@@#1{\let\setlines\relax +\vbox{\halign{##\cr\r@lef@ll{\linethickness}\cr + \noalign{\nointerlineskip}\repstrut#1\cr}}% + \let\setlines=\s@tlines} +\def\box@@@{\vbox{\halign{##\cr\r@lef@ll{\linethickness}\repbox{}\cr + \noalign{\nointerlineskip}% + \repstrut\setgluebrule\doppelpunkt\kern\seminhw\thinvrule\cr}}} +\def\box@@@@#1{\let\setlines\relax\vbox{\tabskip\seminhw + \halign{##\tabskip\z@\cr + \repbox{2.}\r@lef@ll{\linethickness}\cr + \noalign{\nointerlineskip}% + \repstrut\thickvrule\setgluearule#1\cr}}% + \let\setlines=\s@tlines} +\def\repbox#1{\vtop to\z@{\null\nointerlineskip + \hbox to \z@{\vrule height10pt depth -\nhh width\stemwidth{#1}\hss + }\vss}} +\def\repstrut{\vrule width \z@ height 7\nhh depth\z@} +\def\overstrut{\vrule width \z@ height 6\nhh depth\z@} +%\let\overstrut=\repstrut +% +% ************************************************** % +% * SETZEN der VERSETZUNGSZEICHEN * % +% ************************************************** % +%Setzen der Versetzungszeichen vor Noten: +\def\setvorz#1{\relax\setbox \hunkbox=\hbox{\unhbox\hunkbox% + \global\advance\oldpitch-7 \yshift=\pitch\seminhh + \ifnum\oldpitch=\pitch$\raise\yshift\hbox to \z@{\hss\music#1}$\else + $\raise\yshift\hbox{\music#1}$\fi}\global\oldpitch=\pitch} +%Setzen der Versetzungszeichen in der Vorzeichnung: +\def\setsign#1#2{\hc@i=#1 \advance\hc@i by \clefcount + \ifnum\hc@i<-1 \advance\hc@i7 \else\ifnum\hc@i>9 \advance\hc@i-7 \fi\fi + $\raise\hc@i\seminhh\hbox{\music#2}$} +%Atemzeichen +\def\caesura{\setbox\hunkbox=\hbox{\unhbox\hunkbox% + \kern\p@\caesurasign\kern\nhh}} +% ************************************************** % +% * Versetzungszeichen - Eingabemacros * % +% ************************************************** % +%\x=\sharp Kreuz +%\xx= Doppel-Kreuz +%\n=\natural Aufloesungszeichen +%\b=\flat +%\bb=Doppel-Be +\def\x#1{\global\pitch=#1\relax\setvorz{\msharp}} +\def\xx#1{\global\pitch=#1\relax\setvorz{\mdoublesharp}} +\def\n#1{\global\pitch=#1\relax\setvorz{\mnatural}} +\def\b#1{\global\pitch=#1\relax\setvorz{\mflat}} +\def\bb#1{\global\pitch=#1\relax\setvorz{\mdoubleflat}} +%Versetzungszeichen in der Vorzeichnung +\def\b@#1{\setsign{#1}{\mflat}} +\def\x@#1{\setsign{#1}{\msharp}} +\def\n@#1{\setsign{#1}{\mnatural}} +% ************************************************** % +% * NOTEN - Eingabemacros * % +% ************************************************** % +%ganze +\def\g#1{\global\pitch=#1\setnotes{NOTE}} +%halbe +\def\h#1{\global\pitch=#1\setnotes{Note}} +%viertel +\def\v#1{\global\pitch=#1\setnotes{note}} +%achtel +\def\a#1{\global\pitch=#1\setnotes{notE}} +%sechzehntel +\def\s#1{\global\pitch=#1\setnotes{noTE}} +%zweiunddreissigstel +\def\z#1{\global\pitch=#1\setnotes{nOTE}} +%vierundsechzigstel +\def\d#1{\global\pitch=#1\setnotes{nOte}} +%hundertachtundzwanzigstel +\def\o#1{\global\pitch=#1\setnotes{nOtE}} +% ************************************************** % +% * PAUSEN - Eingabemacros * % +% ************************************************** % +%Pausen erhalten \pitch = 5 zum Setzen der Wertpunkte im 3. Zwischenraum +\def\sethunks{\sethunkglue\box\hunkbox\u@text\l@text} +%ganze +\def\pg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi + \sethunks\PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk=\NOTEskip} +%zwei Pausentakte +\def\dpd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi + \sethunks{\music + \doublerest}\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk=\NOTEskip} +%drei Pausentakte +\def\dpg{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi + \sethunks{\music\doublerest}\hskip\nhh + \PAUSE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk=\NOTEskip} +%vier Pausentakte +\def\dpdd{\ifdim\spaceskip=\ruleskip \global\sk=\NOTEskip\fi + \sethunks{\music\ddoublerest}% + \global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk=\NOTEskip} +%halbe +\def\ph{\sethunks\Pause\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\Noteskip} +%viertel +\def\pv{\sethunks\pause\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\noteskip} +%achtel +\def\pa{\sethunks\pausE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\notEskip} +%sechzehntel +\def\ps{\sethunks\pauSE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\noTEskip} +%zweiunddreissigstel +\def\pz{\sethunks\paUSE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\nOTEskip} +%vierundsechzigstel +\def\pd{\sethunks\pAuse\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\nOteskip} +%hundertachtundzwanzigstel +\def\po{\sethunks\pAusE\global\pitch=5\global\nyshift=\pitch\seminhh + \nobreak\global\sk\nOtEskip} +% ************************************************** % +% * Wertpunkte * % +% ************************************************** % +%\dotwd wird in einer Notengruppe benoetigt zur Berechnung der Laenge +%des Balkens oder Bogens +\setbox0=\hbox to\seminhw{\rm\kern\p@.\hss}\dotwd=\wd0 +%#1 gibt Anzahl der Punkte an. +%- Eingabemacro +\def\.#1{\relax\hc@i=#1\relax + \ifchord\chordjoindots\else\relax\joindots% + \ifgroup\global\advance\H@a@cor by #1\dotwd \fi + \fi} +\def\dotodd{\hbox to \seminhw{\rm\kern\p@.\hss}}% +%Verschieben der Wertpunkte von Noten auf einer Notenlinie in +%......den Zwischenraum oberhalb +\def\dot@up{\hbox{$\raise0.3\nhh + \hbox to \seminhw{\rm\kern\p@.\hss}$}} +%......den Zwischenraum unterhalb der Notenlinie +\def\dot@down{\hbox{$\raise-0.5\nhh + \hbox to \seminhw{\rm\kern\p@.\hss}$}} +%Normalfall: Verschiebung in den oberen Zwischenraum +\def\doteven{\dot@up} +%setzt #1 Punkte bei einzelnen Noten +\def\joindots{\ifodd\pitch\let\punkt\dotodd\else\let\punkt\doteven\fi + $\raise\nyshift\hbox{%\kern\smkern + \begingroup \loop \ifnum \hc@i>0 \aftergroup \punkt + \advance\hc@i-1 \repeat \endgroup}$} +%Wertpukte bei Akkorden +\def\chordjoindots{\global + \setbox\dotbox\hboxnhw{\box\dotbox}{\joindots\unskip}} +% ************************************************** % +% * Akkorde - Eingabemacros * % +% ************************************************** % +\def\lchord#1\endchord{%Initialisierung + \global\maxpitch=-10000\global\minpitch=10000 + \sethunkglue\begingroup\chordtrue\lefttrue\stemuptrue + \global\setbox\rightbox=\null\global\setbox\leftbox=\null% + \global\setbox\dotbox\null% + #1\endchord} +% +\def\rchord#1\endchord{%Initialisierung + \global\maxpitch=-10000\global\minpitch=10000 + \sethunkglue\begingroup\chordtrue\leftfalse\stemupfalse + \global\setbox\rightbox=\null% + \global\setbox\leftbox=\null\global\setbox\dotbox\null% + #1\endchord} +% ************************************************** % +% * Konstruktion der Noten und Pausen * % +% ************************************************** % +%Bestimmung der zu setzenden Noten und Bestimmung der Halsrichtung +\def\tunedef{\ifchord \relax + \gdef\tune{\csname\the\notename\endcsname}% + \else\ifbeam \relax \else\stemdirectiondef\fi + \gdef\tune{\csname\the\notename\the\direction\endcsname}% + \ifgroup \global\d@rection\expandafter{\the\direction}\fi\fi} +\def\stemdirectiondef{% + \ifnum\pitch<4 \stemuptrue \direction={up}% + \else \stemupfalse \direction={down}\fi} +% +\def\calstemlup#1{\global\dur@tion=#1\relax\stemupeval of \pitch} +\def\calstemldown#1{\global\dur@tion=#1\relax\stemdowneval of \pitch} +% +%ganze noten \NOTEup=\NOTEdown +% +\def\NOTEup{\ifbeam\relax\else\global\stemlength=\z@\fi + \global\dur@tion = 0 \hbox{\music\whole}} +\let\NOTEdown=\NOTEup +\def\NOTE{\hbox{\music\whole}\global\dur@tion = 0} +% +%Halbenoten, Hals aufwaerts , Hals abw"arts gestielt +% +\def\Note{\hbox{\music\half}\global\dur@tion = 1} +\def\Noteup{\ifbeam\relax\else\calstemlup1\fi + \hbox{\music\half \stemup}} +\def\Notedown{\ifbeam\relax\else\calstemldown1\fi + \hbox{\music\stemdown \half}} +% +%Viertelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\noteup{\ifbeam\relax\else\calstemlup2\fi + \hbox{\music\quart\stemup}} +\def\notedown{\ifbeam\relax\else\calstemldown2\fi + \hbox{\music\stemdown\quart}} +\def\note{\hbox{\music\quart}\global\dur@tion= 2} +% +%Achtelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\notE{\hbox{\music\quart}\global\dur@tion= 3} +\def\notEup{\ifbeam\relax\else\calstemlup3\fi + \hbox{\music\quart\flagup{\eighthup}}} +\def\notEdown{\ifbeam\relax\else\calstemldown3\fi + \hbox{\music\flagdown{\eighthdown}\quart}} +% +%Sechzehntelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\noTE{\hbox{\music\quart}\global\dur@tion= 4} +\def\noTEup{\ifbeam\relax\else\calstemlup4\fi + \hbox{\music\quart\flagup{\sixteenthup}}} +\def\noTEdown{\ifbeam\relax\else\calstemldown4\fi + \hbox{\music\flagdown{\sixteenthdown}\quart}} +% +%Zweiunddreissigstelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\nOTE{\hbox{\music\quart}\global\dur@tion= 5} +\def\nOTEup{\ifbeam\relax\else\calstemlup5\fi + \hbox{\music\quart\flagup{\thirtytwoup}}} +\def\nOTEdown{\ifbeam\relax\else\calstemldown5\fi + \hbox{\music\flagdown{\thirtytwodown}\quart}} +% +%Vierundsechzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\nOte{\hbox{\music\quart}\global\dur@tion= 6} +\def\nOteup{\ifbeam\relax\else\calstemlup6\fi + \hbox{\music\quart\flagup{\sixtyfourup}}} +\def\nOtedown{\ifbeam\relax\else\calstemldown6\fi + \hbox{\music\flagdown{\sixtyfourdown}\quart}} +% +%Hundertachtundzwanzigstelnoten, Hals aufwaerts , Hals abwaerts gestielt +% +\def\nOtE{\hbox{\music\quart}\global\dur@tion= 7} +\def\nOtEup{\ifbeam\relax\else\calstemlup7\fi + \hbox{\music\quart\flagup{\hundredtwentyeightup}}} +\def\nOtEdown{\ifbeam\relax\else\calstemldown7\fi + \hbox{\music\flagdown{\hundredtwentyeightdown}\quart}} +% P A U S E N +\def\PAUSE{{\music\wholerest}} +\def\Pause{{\music\halfrest}} +\def\pause{{\music\quartrest}} +\def\pausE{{\music\eighthrest}} +\def\pauSE{{\music\sixteenthrest}} +\def\pauSE{{\music\sixteenthrest}} % bis auf weiteres, da diese im +\def\paUSE{{\music\sixteenthrest}} %Zeichensatz noch nicht +\def\pAuse{{\music\sixteenthrest}} %vorhanden sind. +\def\pAusE{{\music\sixteenthrest}} % +% ************************************************** % +% * Berechnung der Notenhalslaengen * % +% ************************************************** % +\def\min@stemlength{\ifnum\dur@tion>2 + \hc@i= 3 \advance\hc@i by \dur@tion \hd@i= \hc@i\seminhh + \ifdim\hd@i>\stemlength \global\stemlength=\hd@i\fi \fi} +%Hals nach oben +\def\stemupeval of #1{\pit@=#1\relax + \ifnum\pit@<-3 \advance\pit@ by -4 \global\stemlength=-\pit@\seminhh + \else\eval@up\fi\ifgroup\relax\else\min@stemlength\fi} +\def\eval@up{\ifnum \pit@<6 \global\stemlength=7\seminhh + \else + \ifnum\pit@<8 \advance\pit@ by-12 \global\stemlength=-\pit@\seminhh + \else \global\stemlength=\twonhh + \fi\fi} +% +\def\stemdowneval of #1{\pit@=#1\relax + \ifnum\pit@>11 \advance\pit@ by -4 \global\stemlength=\pit@\seminhh + \else \eval@down\fi\ifgroup\relax\else\min@stemlength\fi} +\def\eval@down{\ifnum \pit@ > 2 \global\stemlength=7\seminhh + \else\ifnum\pit@ > 0 \advance\pit@ 4 \global\stemlength=\pit@\seminhh + \else \global\stemlength=\twonhh + \fi\fi} +% ************************************************** % +% * Konstruktion der Notenhaelse * % +% ************************************************** % +%Hals nach oben +\def\stemup{\vrule height \stemlength depth\z@ width\stemwidth} +%Hals nach unten +\def\stemdown{\vrule height\z@ depth\stemlength width\stemwidth + \hskip-2\stemwidth} +%Hals nach unten mit Fahne +\def\flagdown#1{\stemdown\ifbeam\relax\else + \vtop to\stemlength{\offinterlineskip\null\vss\hbox{\music#1}\null}\fi} +%Hals nach oben mit Fahne +\def\flagup#1{\stemup\ifbeam\relax\else + \vbox to\stemlength{\offinterlineskip\hbox{\music#1}\vss\null}\fi} +% +%Bestimmung des Notenhalses im Akkord +% +\def\stemdef{% + \ifstemup\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax + \or\stemup \or\stemup \or\flagup{\eighthup}% + \or\flagup{\sixteenthup}\or\flagup{\thirtytwoup}% + \or\flagup{\sixtyfourup}\or\flagup{\hundredtwentyeightup}% + \else\noexpand\relax\fi}}% + \else\edef\stem{\hbox{\ifcase\dur@tion \noexpand\relax + \or\stemdown \or\stemdown \or\flagdown{\eighthdown}% + \or\flagdown{\thirtytwodown}\or\flagdown{\sixteenthdown}% + \or\flagdown{\sixtyfourdown}\or\flagdown{\hundredtwentyeightdown}% + \else\noexpand\relax \fi}}% + \fi} +% Setzen des Notenhalses im Akkord +\def\setstem{\relax + \ifstemup $\raise\minpitch\seminhh\stem $% + \else $\raise\maxpitch\seminhh\stem $\fi} +% ************************************************** % +% * Das Setzen der Noten * % +% ************************************************** % +\def\setnotes#1{\relax\notename={#1}\global\nyshift=\pitch\seminhh + \legerlines\tunedef + \ifchord\setchord\else \sethunkglue \setnote \fi + } +%einzelne Note +\def\setnote{\global\setbox\notebox= + \hboxnhw{$\raise\lyshift\box\legerbox$}{$\raise\nyshift\hbox{\tune}$}% + \setakzent + \box\hunkbox\kern\smkern\u@text\l@text\box\notebox + \global\spaceskip=\csname\the\notename skip\endcsname\nobreak +% \ifnum\dur@tion=0 \global\H@a@cor =\seminhw\fi + \ifgroup \global \H@a@cor = \z@ \fi +} +%Akkorde +%Zusammenfassung der einzelnen Noten in \leftbox bzw. \rightbox +\def\setchord{% + \ifnum\maxpitch<\pitch \global\maxpitch = \pitch\fi + \ifnum\minpitch>\pitch \global\minpitch = \pitch\fi + \chordlegerlines + \ifleft + \global\setbox\leftbox= + \hboxnhw{\box\leftbox}{$\raise\nyshift\hbox{\tune}$}% + \else + \global\setbox\rightbox= + \hboxnhw{\box\rightbox}{$\raise\nyshift\hbox{\tune}$}\fi + } +% +\def\endchord{% + \nobreak\global\sk=\csname\the\notename skip\endcsname + \ifbeam \relax \else\chordnobeam\fi + \hc@i=\maxpitch \advance\hc@i-\minpitch + \global\advance\stemlength by \hc@i\seminhh + \stemdef + \ifgroup \global\H@a@cor=\z@ + \ifstemup + \ifdim\wd\rightbox>\z@ \global\advance\H@a@cor by \nhw \fi + \fi + \global\advance\H@a@cor by \wd\dotbox + \global\d@rection\expandafter{\the\direction}% + \fi + \global\setbox\notebox= + \hbox{\box\leftbox\setstem\box\rightbox\box\dotbox}% + \setchordakzent + \box\hunkbox\kern\smkern\u@text\l@text\box\notebox\chordfalse\endgroup} +\def\chordnobeam{\relax\ifstemup \stemupeval of \maxpitch + \else \stemdowneval of \minpitch\fi + \ifgroup\ifstemup\chordlowerstartpoints + \else\chordupperstartpoints\fi + \fi} +% *********************************************************** % +% * Tonarten und Aufloesung, Notenschluessel und Taktangabe * % +% *********************************************************** % +%\discretionary{vor}{nach}{kein} +\def\change{\edef\-{\noexpand\discretionary{}%vor + {\noexpand\hbox{\noexpand\lines}% + \noexpand\hbox{\the\cleftoks\the\signtoks}% + \noexpand\kern\noexpand\seminhw}%nach + {}}}%kein +\def\signchange{\change\gluebrule\discretionary{% + \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks\set@rulesk + }}{\hbox{\lines\the\cleftoks\the\signtoks}\kern\seminhw}{% + \hbox{\doppelstrich\set@rulesk\the\canceltoks\the\signtoks}}% + \set@rulesk} +\def\clefchange{\change\setbox\hunkbox=\hbox{\unhbox\hunkbox% + \kern\p@{{\let\music=\smallmusic\the\cleftoks}}}} +%Taktangabe +\def\meter#1/#2{\nobreak\gluebmeter\discretionary{% + \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}\kern\seminhw + }{\hbox{\lines\the\cleftoks\the\signtoks\set@rulesk + \hbox{\place4{#1}\kern-\wd\placebox\place0{#2}}}\kern0.25\seminhw}% + {\hbox{\place4{#1}\kern-\wd\placebox\place0{#2}% + \kern0.5\seminhw}}\set@rulesk} +% \kern\seminhw}}\set@rulesk} +\def\place#1#2{\setbox\placebox\hbox{\rm#2}$\raise#1.5\seminhh\hbox{\copy + \placebox}$} +%Vorzeichnung +\def\signature#1#2{\global\signtoks={#1\kern\nhw}% + \iffirst\change\box\hunkbox\the\signtoks\set@rulesk + \else\signchange\fi\global\canceltoks={#2}} +%Notenschluessel +\def\clef#1#2{\global\clefcount=#1 + \global\cleftoks={\setkey{#2}\kern\seminhw}% + \clefchange} +%Abkuerzungen fuer Vorzeichnungen - gro\3e Buchstaben =Dur-Tonarten +% kleine Buchstaben =Moll-Tonarten +\def\F{\signature{\b@4}{\n@4}} +\def\B{\signature{\b@4\b@7}{\n@4\n@7}} +\def\Es{\signature{\b@4\b@7\b@3}{\n@4\n@7\n@3}} +\def\As{\signature{\b@4\b@7\b@3\b@6}{\n@4\n@7\n@3\n@6}} +\def\Des{\signature{\b@4\b@7\b@3\b@6\b@2}{\n@4\n@7\n@3\n@6\n@2}} +\def\Ges{\signature{\b@4\b@7\b@3\b@6\b@2\b@5}{\n@4\n@7\n@3\n@5\n@2\n@5}} +\def\Ces{\signature{\b@4\b@7\b@3\b@6\b@2\b@5\b@1}% + {\n@4\n@7\n@3\n@5\n@2\n@5\n@1}} +\def\C{\signature{}{}} +\def\G{\signature{\x@8}{\n@8}} +\def\D{\signature{\x@8\x@5}{\n@8\x@5}} +\def\A{\signature{\x@8\x@5\x@9}{\n@8\n@5\n@9}} +\def\E{\signature{\x@8\x@5\x@9\x@6}{\n@8\n@5\n@9\n@6}} +\def\H{\signature{\x@8\x@5\x@9\x@6\x@3}{\n@8\n@5\n@9\n@6\n@3}} +\def\Fis{\signature{\x@8\x@5\x@9\x@6\x@3\x@4}{\n@8\n@5\n@9\n@6\n@3\n@4}} +\let\mdis=\F \let\ma=\C +\let\mgis=\H \let\md=\F +\let\mcis=\E \let\mg=\B +\let\mfis=\A \let\mc=\Es +\let\mh=\D \let\mf=\As +\let\me=\G \let\mb=\Des + \let\mes=\Ges +%Notenschluessel +\def\setkey#1{\hbox{\music#1}} +\def\vio{\clef{0}{\mviolin}} +\def\viooct{\clef{0}{\mviolinoct}}% noch nicht im Font +\def\vioOct{\clef{0}{\mviolinOct}} % noch nicht im Font +\def\bass{\clef{-2}{\mbass}} +\def\bassoct{\clef{-2}{\mbassoct}} %noch nicht im Font +\def\bassOct{\clef{-2}{\mbassOct}} %noch nicht im Font +\def\bariton{\clef{3}{\mbariton}} +\def\tenor{\clef{1}{\mtenor}} +\def\alto{\clef{-1}{\malt}} +\def\mezzosopran{\clef{-3}{\mmezzosopran}} +\def\sopran{\clef{-5}{\msopran}} +% ************************************************** % +% * Die Verarbeitung der Nachbarschaften * % +% ************************************************** % +\mathsurround=\z@ +% ************************************************** % +% * Initialisierung der Listen einer Notengruppe * % +% ************************************************** % +%Gruppe belegt die notwendigen Listen fuer die Notengruppe +\def\group#1#2{\grouptrue + \global\oldskip=\sk + \let\u@@text = \u@text + \let\l@@text = \l@text + \global\setbox\neighborhood=\null + \gdef\elementlist{#1}\gdef\pitchlist{#2}% + \gdef\H@list{}\gdef\stemlist{}% + \gdef\uslurlist{}\gdef\lslurlist{}% + \gdef\H@corlist{}% + \gdef\dir@list{}% + \global\sl@c=\z@ + \global\S=0 + \N=0 + \long\def\\##1{% + \global\E@l=\z@\global\E@u=\z@%zuruecksetzen auf 0pt + \global\setbox\neighborhood=\hbox{\unhbox\neighborhood##1}% + \rightappend0pt\to\stemlist %initialisiert \stemlist + \expandafter\rightappend\the\wd\neighborhood\to\H@list%belegt \H@list + \expandafter\rightappend\the\E@u\to\uslurlist + %belegt obere startpunkte fuer slurs + \expandafter\rightappend\the\E@l\to\lslurlist + %belegt untere startpunkte fuer slurs + \expandafter\rightappend\the\H@a@cor\to\H@corlist + %initialisiert \H@corlist + \global\H@a@cor=\z@%zuruecksetzen auf 0pt + \expandafter\rightappend\the\d@rection\to\dir@list + %initialisiert \dir@list + \advance\N1 }\elementlist\groupfalse + } +% ************************************************** % +% * Abarbeitung & Setzen einer Notengruppe * % +% ************************************************** % +\def\go{% + \let\u@text=\u@@text + \let\l@text=\l@@text + \m@ii=0 \long\def\\##1{\advance\m@ii 1 + {\assign\m@ii\of\stemlist\to\stemlength}% + \ifdim\stemlength=\z@\beamfalse\else\beamtrue\fi##1}% + \global\sk=\oldskip + \sethunkglue\hbox{\global\sk=\z@skip\elementlist}\nobreak + \beamfalse} +% ************************************************** % +% * Verbalkung - Eingabemacros * % +% ************************************************** % +% Eingabemacros - Balken oberhalb - Balken unterhalb der Notengruppe +\def\ubeam#1#2{\stemuptrue \n@a=#1 \n@e=#2 \direction{up}% + \putdir{up}\from\n@a\to\n@e\b@@m} +% +\def\lbeam#1#2{\stemupfalse \n@a=#1 \n@e=#2 \direction{down}% + \putdir{down}\from\n@a\to\n@e\b@@m} +% +\def\b@@m{% + %Initialisierung + \additem{\noexpand\direction{\the\direction}}{}\in\elementlist\at\n@a + \ifnum\n@e>\N \n@e=\N\fi + \global\minsl=2\nhh + \assign\n@a\of\pitchlist\to\P@a + \assign\n@e\of\pitchlist\to\P@e + \assign\n@e\of\H@list\to\H@e + \assign\n@a\of\H@list\to\H@a + \select\n@a\of\dir@list\to\dir@i + \lokalassign\n@a\of\H@corlist\to\hd@i % vorne verkuerzt + \ifx\dir@i\down@\advance\hd@i \nhw \fi + \global\advance\H@a by-\hd@i + \lokalassign\n@e\of\H@corlist\to\hd@i % und hinten verkuerzt + \select\n@e\of\dir@list\to\dir@i + \ifx\dir@i\down@\advance\hd@i \nhw \fi + \global\advance\H@e by-\hd@i + \global\advance\H@e by-\H@a + %Berechnung der Steigung + \csname gradient\the\direction\endcsname% + %Anpassung der Notenhaelse + \csname calstems\the\direction\endcsname% + %Positionierung des Balkens + \beaming + %Addieren der berechneten Halsl"angenkorrektur in der \stemlist + \addslc\in\stemlist\from\n@a\to\n@e + \global\advance\sl@c \seminhh + %Korrektur der Bogenangfangspunkte oberhalb bzw. unterhalb der Noten + \ifstemup\relax + \addslc\in\uslurlist\from\n@a\to\n@e + \else \relax\global\sl@c=-\sl@c + \addslc\in\lslurlist\from\n@a\to\n@e + \global\sl@c=-\sl@c + \fi + \global\sl@c=\z@ + } +% ************************************************** % +% * Berechnungen der Halslaengen und Steigung * % +% ************************************************** % +\def\gradientup{\gradient{<}{+}} +\def\gradientdown{\gradient{>}{-}} +\def\gradient#1#2{% + \R@a=\P@a\seminhh + \R@e=\P@e\seminhh +%jetzt erst die Stemhoehe berechnen. + \ifstemup \stemupeval of \P@a \s@a=\stemlength + \stemupeval of \P@e \s@e=\stemlength + \else \stemdowneval of \P@a \s@a=\stemlength + \stemdowneval of \P@e \s@e=\stemlength + \fi + \global\E@a=\R@a \global\advance \E@a by#2\s@a + \global\E@e=\R@e \global\advance \E@e by#2\s@e + \ifnum\P@a=\P@e \global\S=0 + \else\global\flagc=1 + \ifnum\P@a#1\P@e \gradz@\in\pitchlist\with#1\the\P@e\from\n@a\to\n@e + \else \gradz@\in\pitchlist\with#1\the\P@a\from\n@a\to\n@e\fi + \ifnum\flagc=0 \global\S=0\else \global\S=1\fi + \fi + \relax + \ifnum\S = 0 \relax + \ifdim\E@a#1\E@e \global\E@a=\E@e \s@a=#2\E@a \advance\s@a-#2\R@a \fi + \else + \distance\E@a\E@e + \ifdim\Abs=\z@\relax + \ifnum\P@e#1\P@a \corrc\s@a + \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax + \else \corrc\s@e + \global\E@e=\R@e\global\advance\E@e by#2\s@e\relax\fi + \fi + \distance\E@a\E@e + \limit=0.45 \H@e + \ifdim\limit>4\nhh \limit=4\nhh \fi + \hd@i=\Abs\advance\hd@i by -\limit \corr=\hd@i + \ifdim\corr>\z@\relax + \ifnum\P@a#1\P@e \corrb\s@a + \global\E@a=\R@a\global\advance\E@a by#2\s@a\relax + \else\corrb\s@e\global\E@e=\R@e\global\advance\E@e by#2\s@e\fi + \Abs=\corr + \fi + \ifnum\P@a>\P@e\global\S=-\Abs\else\global\S=\Abs\fi + \global\multiply\S by 100 \global\divide\S by \H@e + \fi %von P@a=Pb Abfrage +%\s@a und \s@e zurueckpacken an \n@a-te bzw. \N-te Stelle der \stemlist + \expandafter\exchange\the\s@a\in\stemlist\at\n@a + \expandafter\exchange\the\s@e\in\stemlist\at\n@e + \whatisnewstartpoint + \assignS} +% +\def\calstemsup{\calstems{+}} +\def\calstemsdown{\calstems{-}} +\def\calstems#1{% + \n@i=\n@a + \global\sl@c=\z@ + \EP@=\E@a + \loop\advance\n@i by 1 + \assign\n@i\of\pitchlist\to\P@i + \R@i=\P@i\seminhh + \getendpoint\n@i\EP@i + \s@i=\EP@i + \advance\s@i by-\R@i %Laenge des stems + \s@i=#1\s@i + \expandafter\exchange\the\s@i\in\stemlist\at\n@i + \whatarenewstartpoints + \ifdim\s@i<\minsl\relax + \ifdim\s@i<\z@ \s@i=-\s@i\advance\s@i by \minsl + \else\s@i=\R@i\advance\s@i by #1\minsl\advance\s@i by-\EP@i\s@i=#1\s@i\fi + \ifdim\s@i>\sl@c\relax\global\sl@c=\s@i\fi + \fi + \ifnum\n@i<\n@e \repeat + } +% +%Auswertung der \beamlist +\def\evalbeamlist#1-#2,#3#{\def\aa{#1}\def\bb{#2}% + \ifx\aa\empty\m@a=0\else\m@a=#1\fi + \ifx\bb\empty\m@e=\m@a\else\m@e=#2\fi\def\nxt{#3}% + \ifnum\m@a<0\m@a=0\fi %belegung von m@a und m@e, so dass in + \ifnum\m@a>\N\m@a=\N\fi %createbeam keine schwierigkeiten auftauchen + \ifnum\m@e<1\m@e=1\fi %koennen, z.B. bei \assign usw. + \ifnum\m@e>\N\m@e=\N\fi %0<=\m@a<=\N; 1<=\m@e<=\N + \ifnum\m@e<\m@a\hc@i=\m@a\m@a=\m@e\m@e=\hc@i\fi +} +% +\def\beamposition{% + \assign\m@a\of\H@list\to\H@m@a + \assign\m@a\of\H@corlist\to\H@a@cor + \select\m@a\of\dir@list\to\dir@i + \relax\ifx\dir@i\down@ \global\advance\H@a@cor \nhw \fi + \global\advance\H@m@a by -\H@a@cor + \V@a=\H@m@a + \advance\V@a-\H@a + \multiply\V@a by\S \V@a=0.01\V@a + \ifstemup \advance \V@a by \sl@c \relax + \else \advance \V@a by-\sl@c + \fi + \advance\V@a by \EP@ + \ifstemup\ifnum\S<0 \relax + \else \advance \V@a-\beamthickness \fi + \else + \ifnum\S<0 \advance\V@a \beamthickness\fi + \fi + \ifstemup + \advance\V@a by-\beamrow\nhh%zur Platzierung der Balken + \else + \advance\V@a by \beamrow\nhh%zur Platzierung der Balken + \fi + } +\def\createbeam{% + \looop\expandafter\evalbeamlist\nxt{}% + \ifnum\m@a>0\beamposition + \ifnum\m@e=\m@a\relax +%% \immediate\write0{rrule \the\S}% + \additem{}{\noexpand\beamr{\the\S}% + {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a + \else \lokalassign\m@e\of\H@list\to\hd@i + \lokalassign\m@e\of\H@corlist\to\hd@ii + \select\m@e\of\dir@list\to\dir@i + \relax\ifx\dir@i\down@ \advance\hd@ii\nhw \fi + \advance\hd@i by-\hd@ii + \advance\hd@i by-\H@m@a +%% \immediate\write0{rule \the\hd@i}% + \additem{}{\noexpand\beam{\the\S}% + {\the\hd@i}{\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a + \fi + \else + \m@a=\m@e\beamposition +%% \immediate\write0{lrule \the\S}% + \additem{}{\noexpand\beaml{\the\S}% + {\the\V@a}{\the\H@a@cor}}\in\elementlist\at\m@a + \fi + \ifx\nxt\empty\relax\leave% + } +% +\def\beaming{\cardinality\beamlist\to\hc@i% + \ifnum\hc@i>2 \advance\hc@i-2 \global\advance\sl@c by\hc@i\seminhh\fi + \global\beamrow0 + \def\\##1{{\def\nxt{##1}\relax\createbeam\global\advance\beamrow 1% + }}\beamlist} +% ************************************************** % +% * Plazierung und Zusammensetzung der Balken * % +% ************************************************** % +\def\beam#1#2#3#4{\global\S=#1\global\L@a=#2% + $\raise#3\hbox to \z@{\kern-#4\drawbeam\hss}$} +\def\beamr#1#2#3{\global\S=#1% + $\raise#2\hbox to\z@{\kern-#3\drawbe@m\hss}$} +\def\beaml#1#2#3{\global\S=#1$\raise#2\hbox to\z@{\hss + \drawb@@m\ifstemup\else\kern\nhw\fi}$} +% +\def\putintovbox#1{% + \ifstemup + \ifnum\S>0 \vb@@{#1}\else \vt@@{#1}\fi + \else + \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi + \fi} +\def\putintovb@x#1{% + \ifstemup + \ifnum\S<0 \vt@@{#1}\else \vb@@{#1}\fi + \else + \ifnum\S<0 \vb@@{#1}\else\vt@@{#1}\fi + \fi} +% +\def\makebeam{\loop + \ifodd\L@ + $\raise\SHIFT\hbox{\beamfont\char\the\CODE}$% + \advance\SHIFT by \l@\gradfactor + \fi + \divide\L@ 2 \addC1 \multiply\l@2 + \ifnum\L@>0\repeat} +% +\def\drawbeam{% + {\gradfactor=\S\p@ \gradfactor = 0.005 \gradfactor + \ifnum\S=0 + \hbox{\vrule height \beamthickness depth\z@ width\L@a}% + \else\l@=1\assignCODE + \L@=\L@a + \advance \L@ by 32677%um Rundungsfehler zu vermeiden + \divide\L@ by 32678%Genauigkeit 0.5pt + \SHIFT=\z@ + \putintovbox{\beamfont \ifnum \L@ >255 \setlongbeams\fi \makebeam}% + \fi}} +\def\setlongbeams{\relax\hc@i=\CODE \advance\hc@i 7% + \loop$\raise\SHIFT\hbox{\char\the\hc@i}$% + \advance\SHIFT 128 \gradfactor \advance\L@-255 + \ifnum \L@>255 \repeat} +% +\def\drawbe@m{% + \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}% + \else\assignCODE\addC3\putintovbox{\beamfont\char\the\CODE}\fi} +\def\drawb@@m{% + \ifnum\S=0\hbox{\vrule height \beamthickness depth \z@ width\nhh}% + \else\assignCODE\addC3\putintovb@x{\beamfont\char\the\CODE}\fi} +% ************************************************** % +% * Die Bogen * % +% ************************************************** % +%-Eingabemacros - Bogen oberhalb - Bogen unterhalb der Notengruppe +\def\uslur#1#2{\n@a=#1\n@e=#2% + %Initialisierung + \inislur + \assign\n@a\of\uslurlist\to\E@a + \assign\n@e\of\uslurlist\to\E@e + \assignflags + %Berechnung der entgueltigen Bogenbreite + %Belegung des Anfangs- und Endpunktes des Bogens + %Berechnung des horizontalen Versatzes des Bogens + \ifdim\s@a=\z@ \ifdim\s@e=\z@ \u@nobeaming \else \u@rightbeaming \fi + \else \ifdim\s@e=\z@ \u@leftbeaming \else\u@leftrightbeaming\fi + \fi + %Berechnung der Laenge des Bogens + \intslurwidth + %Berechnung der Sekantensteigung + \gradientslur{<}{-}% + %Positionierung des Bogens + \ifnum\slurwidth > 17 \caluphrase + \else + \assignuslurchar + \ifnum\V@int=0\setslurs{2}{0}\else + \ifdim\V@<\z@\setslurs{0}{-1}\else\setslurs{0}{+1}\fi\fi + \fi +} +\def\lslur#1#2{\n@a=#1\n@e=#2% + %Initialisierung + \inislur + \assign\n@a\of\lslurlist\to\E@a + \assign\n@e\of\lslurlist\to\E@e + \assignflags + %Berechnung der entgueltigen Bogenbreite + %Belegung des Anfangs- und Endpunktes des Bogens + %Berechnung des horizontalen Versatzes des Bogens + \ifdim\s@a=\z@ \ifdim\s@e=\z@ \l@nobeaming \else \l@rightbeaming \fi + \else \ifdim\s@e=\z@ \l@leftbeaming \else\l@leftrightbeaming\fi + \fi + %Berechnung der Laenge des Bogens + \intslurwidth + %Berechnung der Sekantensteigung + \gradientslur{>}{+}% + %Positionierung des Bogens + \ifnum\slurwidth > 17 \callphrase + \else + \assignlslurchar + \ifnum\V@int=0\setslurs{3}{0}\else + \ifdim\V@<\z@\setslurs{1}{-1}\else\setslurs{1}{+1}\fi\fi + \fi +} +% +\def\intslurwidth{% + %\slurwidth*\nhw <= \H@e < (\slurwidth+1)*\nhw + \slurwidth=\H@e + \advance\slurwidth \seminhw + \divide\slurwidth by \nhw + \ifnum\slurwidth< 1 \slurwidth= 1 \fi} +%Hilfsfunktionen +\def\newslurwidth#1#2{% + \ifcase#1 \global\advance\H@e #2\nhw + \or \global\advance\H@e #2\seminhw \fi} +\def\calslurwidth{\global\advance\H@e-\H@e@cor + \global\advance\H@a-\H@a@cor + \global\advance\H@e-\H@a\relax} +\def\calslurcor#1{\slurcor=\H@a@cor \advance\slurcor #1\seminhw + \slurcor = -\slurcor} +\def\newE@a#1{\ifnum\flaga=0 \global\E@a=\P@a\seminhh + \global\advance\E@a#1\nhh \fi} +\def\newE@e#1{\ifnum\flagb=0 \global\E@e=\P@e\seminhh + \global\advance\E@e#1\nhh \fi} +\def\inislur{\relax + \ifnum\n@e>\N \n@e=\N\fi + \ifnum\n@a<1 \n@a= 1\fi + \ifnum\n@a>\n@e\n@e=\hc@i \n@e=\n@a \n@a=\hc@i\fi + % + \assign\n@e\of\H@list\to\H@e + \lokalassign\n@e\of\H@corlist\to\H@e@cor + \assign\n@a\of\H@list\to\H@a + \assign\n@a\of\H@corlist\to\H@a@cor + \select\n@a\of\dir@list\to\dir@a + \select\n@e\of\dir@list\to\dir@e + \ifx\dir@a\down@ \global\advance\H@a@cor \nhw \fi + \ifx\dir@e\down@ \advance\H@e@cor \nhw \fi + % + \assign\n@e\of\pitchlist\to\P@e + \assign\n@a\of\pitchlist\to\P@a + \lokalassign\n@e\of\stemlist\to\s@e + \lokalassign\n@a\of\stemlist\to\s@a +} +\def\assignflags{% + \flaga=2 \ifdim \E@a=\z@ \flaga=0 \fi + \ifdim\E@a> \I@@ \flaga=1 \global\advance \E@a-\I@@\fi + \ifdim\E@a<-\I@@ \flaga=1 \global\advance \E@a-\I@@\fi + \flagb=2\ifdim \E@e =\z@ \flagb=0\fi + \ifdim\E@e> \I@@ \flagb=1 \global\advance \E@e-\I@@\fi + \ifdim\E@e<-\I@@ \flagb=1 \global\advance \E@e \I@@\fi + \relax} +% +%ohne Verbalkung +\def\u@nobeaming{\calslurwidth + \ifx\dir@e\up@ \relax\newslurwidth{0}{-}\fi %stemup + \calslurcor{-}\newE@a{+}\newE@e{+}} +% +\def\l@nobeaming{\calslurwidth + \ifx\dir@a\down@ \newslurwidth{0}{-}\fi%stemdown + \ifx\dir@a\up@\calslurcor{+}\else \calslurcor{-}\fi + \newE@a{-}\newE@e{-}} +% Verbalkung nur in \n@e +\def\u@rightbeaming{\ifnum\flagb<2 \u@rightstemdown \else + \u@rightstemup \fi} +\def\u@rightstemdown{\calslurwidth + \calslurcor{-}\newE@a{+}\newE@e{+}} +\def\u@rightstemup{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}% + \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt + \fi\advance\n@e1} +% +\def\l@rightbeaming{\ifnum\flagb<2 \l@rightstemup \else + \l@rightstemdown \fi} +\def\l@rightstemup{\calslurwidth + \ifx\dir@a\down@ \newslurwidth{0}{-}\fi + \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}} +\def\l@rightstemdown{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \ifx\dir@a\up@\newslurwidth{0}{-}\fi + \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}\newE@e{-}% + \else\ifx\dir@a\up@\newslurwidth{1}{+}\else\newslurwidth{1}{-}\fi + \ifx\dir@a\up@\calslurcor{+}\else\calslurcor{-}\fi\newE@a{-}%\E@e belegt + \fi\advance\n@e 1 } +% +% Verbalkung nur in \n@a +\def\u@leftbeaming{\ifnum\flaga<2 \u@leftstemdown \else + \u@leftstemup \fi} +\def\u@leftstemdown{\calslurwidth + \ifx\dir@e\up@\newslurwidth{0}{-}\fi + \calslurcor{-}\newE@a{+}\newE@e{+}} +\def\u@leftstemup{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \ifx\dir@e\up@\newslurwidth{0}{-}\fi + \calslurcor{-}\newE@a{+}\newE@e{+}% + \else\ifx\dir@e\up@\newslurwidth{1}{-}\else\newslurwidth{1}{+}\fi + \slurcor=-\H@a@cor \newE@e{+}%\E@a belegt + \fi\advance\n@e1} +% +\def\l@leftbeaming{\ifnum\flaga<2 \l@leftstemup \else + \l@leftstemdown \fi} +\def\l@leftstemup{\calslurwidth + \calslurcor{+}\newE@a{-}\newE@e{-}} +\def\l@leftstemdown{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{-}\newE@e{-}% + \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt + \fi\advance\n@e 1 } +% +% Verbalkung in beiden Faellen +\def\u@leftrightbeaming{\ifnum\flagb<2 \u@stemdown \else \u@stemup \fi} +\def\u@stemdown{% + \ifnum\flaga<2 \u@stemdownstemdown \else \u@stemupstemdown \fi} +\def\u@stemdownstemdown{\calslurwidth + \calslurcor{-}\newE@a{+}\newE@e{+}} +\def\u@stemupstemdown{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \calslurcor{-}\newE@a{+}\newE@e{+}% + \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{+}%\E@a belegt + \fi\advance\n@e 1 } +\def\u@stemup{% + \ifnum\flaga<2 \u@stemdownstemup \else \u@stemupstemup \fi} +\def\u@stemdownstemup{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{-}\newE@a{+}\newE@e{+}% + \else\newslurwidth{1}{-}\calslurcor{-}\newE@a{+}%\E@e belegt + \fi\advance\n@e 1 } +\def\u@stemupstemup{\calslurwidth + \slurcor=-\H@a@cor}%E@a,E@e belegt +% +\def\l@leftrightbeaming{\ifnum\flaga<2 \l@stemup \else \l@stemdown \fi} +\def\l@stemup{% + \ifnum\flagb<2 \l@stemupstemup \else \l@stemupstemdown \fi} +\def\l@stemupstemup{\calslurwidth + \calslurcor{+}\newE@a{-}\newE@e{-}} +\def\l@stemupstemdown{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \calslurcor{+}\newE@a{-}\newE@e{-}% + \else\newslurwidth{1}{+}\calslurcor{+}\newE@a{-}%\E@e belegt + \fi\advance\n@e 1 } +\def\l@stemdown{% + \ifnum\flagb<2 \l@stemdownstemup \else \l@stemdownstemdown \fi} +\def\l@stemdownstemup{\calslurwidth + \advance\n@e-1 + \ifnum\n@e=\n@a \newslurwidth{0}{-}\calslurcor{+}\newE@a{-}\newE@e{-}% + \else\newslurwidth{1}{-}\slurcor=-\H@a@cor\newE@e{-}%\E@a belegt + \fi\advance\n@e 1 } +\def\l@stemdownstemdown{\calslurwidth\slurcor=-\H@a@cor}%E@a,E@e belegt +% +%Sekantensteigung +\def\gradientslur#1#2{% + \ifdim\E@a=\E@e \V@int=0 \V@=\z@%auswaehlen von angemessenen Boegen + \else + \V@ = \E@e \advance \V@ by -\E@a + \ifdim\V@>\z@ \V@int=\V@ \else \V@int=-\V@ \fi + \advance\V@int \V@int \advance\V@int \seminhh \divide \V@int by 2 + \divide \V@int by \seminhh + \ifnum\V@int>8 \V@int=8 \else \ifnum\slurwidth<4 + \hc@i=\slurwidth \multiply \hc@i2 + \ifnum\hc@i<\V@int \V@int=\hc@i + \fi\fi + \fi + \hd@i=\V@int\seminhh + \ifdim\E@a#1\E@e \global\E@a=\E@e\global\advance\E@a#2\hd@i + \else \global\E@e=\E@a\global\advance\E@e#2\hd@i\fi + \fi + } +% +%Postitionierung und Bogensatz +\def\caluphrase{\ifnum\V@int=0 + \caltie{0}{3}{+}\else \calphrase{<}{+}{0}\fi} +\def\callphrase{\ifnum\V@int=0 + \caltie{1}{3}{-}\else \calphrase{>}{-}{1}\fi} +\def\caltie#1#2#3{\hd@i=\E@a \hd@ii=\tieconst\seminhh + \advance\hd@ii\nhh + \advance\hd@i #3\hd@ii + \additem{}{\noexpand\phrase{#1}{\the\H@e}% + {#2}{#2}{\the\hd@i}{\the\slurcor}}\in\elementlist\at\n@a} +\def\calphrase#1#2#3{% + \ifdim\V@#1 \z@ + \hd@i=\phraseconst\seminhh \advance\hd@i\nhh + \global\advance\E@a#2\hd@i + \additem{}{\noexpand\phrase{#3}{\the\H@e}% + {0}{\the\V@int}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a +% 0 entspr. slur aus der ersten spalte im font Sconst + \else + \hd@i=\phraseconst\seminhh \advance\hd@i\seminhh + \global\advance\E@a by #2\hd@i\relax + \hd@i=\V@int\seminhh + \global\advance\E@a by #2\hd@i \relax + \additem{}{\noexpand\phrase{#3}{\the\H@e}% + {\the\V@int}{0}{\the\E@a}{\the\slurcor}}\in\elementlist\at\n@a +% 0 entspr. slur aus der ersten spalte im font + \fi} +\def\phrase#1#2#3#4#5#6{\hc@i=#3\hc@ii=#4% + $\raise#5\hbox to \z@{{\kern#6% + \ifcase#1 + \vt@@{\hbox to #2 {\slurfont + \vt@@{\char\hex2\the\hc@i}\r@lef@ill{\p@}\vt@@{\char\hex3\the\hc@ii}}}% + \or + \vb@@{\hbox to #2 {\slurfont + \vb@@{\char\hex4\the\hc@i}\r@lef@ll{\p@}\vb@@{\char\hex5\the\hc@ii}}}% + \fi + \hss}}$} +% +\def\setslurs#1#2{\additem{}{\noexpand\setslur{#2}{#1}% + {\the\E@a}{\the\slurcor}{\the\slurtoks}}\in\elementlist\at\n@a} +\def\setslur#1#2#3#4#5{\S@=#1\hc@i=#2% + $\raise#3\hbox to \z@{{\kern#4\relax + \ifnum\S@<0 \vt@@{\selectfont\char#5}\else + \vb@@{\selectfont\char#5}\fi + \hss}}$} +\def\selectfont{% + \ifcase\hc@i\ifnum\S@<0\slurfontdu\else\slurfontuu\fi%0 + \or \ifnum\S@<0\slurfontdd\else\slurfontud\fi%1 + \or \slurfont \or \slurfont \fi} +% ************************************************** % +% * Akzente fuer Noten und Akkorde * % +% ************************************************** % +%Abkuerzungen +\def\cantusfirmus{{\it c.f.}} +\def\crescendo{{\it cresc.}} +\def\dacapo{{\it d.c.}} +\def\dalsegno{{\it d.s.}} +\def\decrescendo{{\it decresc.}} +\def\diminuendo{{\it dim.}} +\def\fine{{\it fine}} +\def\forte{{\it f}} +\def\fortissimo{{\it ff}} +\def\fortissimoposs{{\it fff}} +\def\fortepiano{{\it fp}} +\def\forzato{{\it fz}} +\def\mezzoforte{{\it mf}} +\def\mezzopiano{{\it mp}} +\def\piano{{\it p}} +\def\pianissimo{{\it pp}} +\def\pianissimoposs{{\it ppp}} +\def\rallentando{{\it rall.}} +\def\rinforzando{{\it rfz.}} +\def\ritardando{{\it rit.}} +\def\ritenuto{{\it riten.}} +\def\sforzato{{\it sfz}} +\def\sforz{{\it sf}} +\def\staccato{{\it stacc.}} +\def\tacet{{\it tacet}} +\def\unisono{{\it unis.}} +%Plazierung der Spielanweisungen am Notenkopf +\def\noaccent{\setbox\akzentbox\null} +\def\stac{\setbox\akzentbox\hboxnhw{{\rm.}}{\box\akzentbox}} +\def\dec{{{\slurfont\char'160}}} +\def\staccatissimo{\setbox\akzentbox% + \hboxnhw{$\ssize\prime$}{\box\akzentbox}} +\def\tr{\setbox\akzentbox\hboxnhw{{\rm{\it tr}}}{\box\akzentbox}} +\def\trbrack{\setbox\akzentbox\hboxnhw{{\rm({\it tr})}}{\box\akzentbox}} +\def\tenuto{\setbox\akzentbox\hboxnhw{{\vrule width \nhh height 1pt}} +{\box\akzentbox}} +\def\plus{\setbox\akzentbox= + \hboxnhw{$\scriptscriptstyle+$}{\box\akzentbox}} +\def\setchordakzent{% + \ifdim\wd\akzentbox=\z@\relax\else + \iftwo \akzent@position \else + \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi + \ifstemup\global\setbox\notebox=\hbox{$ + \raise \akzent@pos\hbox to \z@{\copy\akzentbox\hss}$\box\notebox}\else + \global\setbox\notebox=\hbox{\box\notebox$ + \raise \akzent@pos\hbox to\z@{\hss\copy\akzentbox}$}\fi\fi} +\def\setakzent{% + \ifdim\wd\akzentbox=\z@\relax\else + \iftwo \akzent@position \else + \ifstemup \l@akzent@position \else \u@akzent@position\fi \fi + \global\setbox\notebox=\hboxnhw{\box\notebox}{$ + \raise \akzent@pos\hbox{\copy\akzentbox}$}\fi} +\def\u@akzent@position{\hc@i=\ht\notebox \divide\hc@i by \seminhh + \ifnum\hc@i>7 \advance\hc@i 1 \else + \ifodd\hc@i \advance \hc@i 2 \else \advance \hc@i 1\fi\fi + \akzent@pos = \hc@i\seminhh\relax + \ifgroup + \global\E@u=\akzent@pos \global\advance\E@u\ht\akzentbox + \global\advance\E@u\seminhh + \ifdim\E@u<\z@ \global\advance \E@u-\I@@ + \else \global\advance \E@u \I@@ \fi\fi + } +\def\l@akzent@position{\hc@i=\dp\notebox \divide\hc@i by \seminhh + \ifdim\dp\notebox>\z@ \advance\hc@i 1 \akzent@pos= -\hc@i\seminhh + \else + \ifnum\pitch>2 \akzent@pos=\seminhh \else \akzent@pos=-\seminhh\fi\fi + \advance\akzent@pos-\ht\akzentbox + \ifgroup + \global\E@l=\akzent@pos \global\advance\E@l-\seminhh + \ifdim\E@l<\z@ \global\advance \E@l-\I@@ + \else \global\advance \E@l \I@@ \fi\fi} +%varable (De-)Crescendo - Zeichen +\def\cresc#1{\sethunkglue\box\hunkbox\global\sk=0pt + \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw + \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i = 16\fi\advance\hc@i95 + \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}} +\def\decresc#1{\sethunkglue\box\hunkbox\global\sk=0pt + \setbox\hb@i\hbox{#1}\hc@i=\wd\hb@i\divide\hc@i\nhw + \ifnum\hc@i < 1 \hc@i=1 \fi \ifnum\hc@i>16 \hc@i=16 \fi\advance\hc@i111 + \setover{\slurfont\char\the\hc@i}{\overstrut\unhbox\hb@i}} +\def\setover#1#2{\vbox{\offinterlineskip\hbox{#1}\hbox{#2}}} +% ************************************************** % +% * Textunterlage * % +% ************************************************** % +% Text oberhalb und unterhalb der Notenlinien +%- Eingabemacros +\def\^#1#{\set@above@parms{#1}\set@above@box} +\let\us=\_ +\def\_#1#{\set@below@parms{#1}\set@below@box} +\def\a@tok{\^}\def\b@tok{\_} +%#1 n : Der Text soll nicht in die Berechnung einbezogen werden, +%#1 c : Der Text wird unterhalb der Notenbox zentriert und nicht in +% die weitere Berechnung einbezogen +%#1 l: (linksbuendig) aber neuer spaceskip festgesetzt, Box ist so breit +%wie Text. +%#1 r: (rechtsbuendig) Box ist so breit wie Notenbox + ihr spaceskip +%der Rest wird links ueberstehen. sk veraendert. +\def\set@above@parms#1{\def\aresp{#1}\ifx\aresp\empty \def\aresp{x}\fi + \overtext=\staffheight\advance\overtext by\nhh} +\def\set@below@parms#1{\def\bresp{#1}\ifx\bresp\empty \def\bresp{x}\fi + \undertext=\textline} +\def\set@above@box#1{\hs@iv=\sk\setbox\hb@i=\hbox{\global\sk=\z@skip + \strut\eightrm#1}\get@below@box} +\def\get@below@box#1#{\def\@B@{#1}\begingroup\aftergroup\set@below + \ifx\@B@\b@tok\relax %\aftergroup#2 + \else\aftergroup e\aftergroup{\aftergroup}\fi + \endgroup} +\def\set@below#1#{\set@below@parms{#1}\set@boxes} +\def\set@boxes#1#2{\setbox\hb@ii=\hbox{\global\sk=\z@skip\strut\eightrm#1}% + \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}% + \hs@v=\sk \relax\hs@vi=\sk + \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax + \ifvoid\hb@iii \global\sk=\z@skip \hbox{\u@text\l@text}\else #2\fi + \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi + \def\l@text{\relax}\def\u@text{\relax}} +% +\def\set@below@box#1{\hs@iv=\sk\setbox\hb@ii=\hbox{\global\sk=\z@skip + \strut\eightrm#1}\get@above@box} +\def\get@above@box#1#{\def\@A@{#1}\begingroup\aftergroup\set@above + \ifx\@A@\a@tok\relax%\aftergroup#2 + \else\aftergroup e\aftergroup{\aftergroup}\fi\endgroup} +\def\set@above#1#{\set@above@parms{#1}\set@@boxes} +\def\set@@boxes#1#2{\setbox\hb@i=\hbox{\global\sk=\z@skip\strut\eightrm#1}% + \global\sk=\hs@iv \setbox\hb@iii\hbox{#2}% + \hs@v=\sk \relax\hs@vi=\sk + \above{\aresp}\below{\bresp}\global\sk=\hs@iv\relax + \ifvoid\hb@iii\global\sk=\z@skip\hbox{\u@text\l@text}\else#2\fi + \ifdim\hs@vi>\hs@v\global\sk=\hs@vi\else\global\sk=\hs@v\fi + \def\l@text{\relax}\def\u@text{\relax}} +\def\above#1{\ifdim\ht\hb@iii>\overtext \overtext = \ht\hb@iii + \advance \overtext \seminhh \fi + \if#1e\def\u@text{\relax}\else + \if#1n\anorespect\else + \if#1c\acrespect\else + \if#1r\arrespect\else + \if#1l\alrespect\else\aautoset\fi\fi\fi\fi\fi\nobreak} +\def\below#1{% + \if#1e\def\l@text{\relax}\else + \if#1n\bnorespect\else + \if#1c\bcrespect\else + \if#1r\brrespect\else + \if#1l\blrespect\else + \if#1v\bvrespect\else\bautoset\fi\fi\fi\fi\fi\fi\nobreak} +\def\anorespect{% + \def\u@text{$\raise\overtext\hbox to\z@{\box\hb@i\hss}$}} +\def\acrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax + \setbox\hb@i\hbox to\hd@i{\hss\box\hb@i\hss}% + \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}} +\def\arrespect{\hd@i=\wd\hb@iii + \advance\hd@i by \hs@v \advance\hd@i by-\hs@iv + \setbox\hb@i\hbox to \hd@i{\hss\box\hb@i}% + \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}% + \advance\hs@v by \nhh plus\nhh\relax} +\def\alrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv + \distance{\hd@i}{\wd\hb@i}\ifdim\hd@i>\wd\hb@i + \hs@v=\Abs plus\nhh \fi + \def\u@text{$\raise\overtext\hbox to \z@{\box\hb@i\hss}$}} +\def\bnorespect{% + \def\l@text{$\lower\undertext\hbox to\z@{\box\hb@ii\hss}$}} +\def\bvrespect{\undertext=\ht\hb@ii\relax + \ifdim\dp\hb@iii>\z@ \advance\undertext by\dp\hb@iii\fi\bnorespect} +\def\bcrespect{% + \hd@i=\wd\hb@iii\advance\hd@i-\hs@iv\relax + \setbox\hb@ii\hbox to\hd@i{\hss\box\hb@ii\hss}% + \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}} +\def\brrespect{\hd@i=\wd\hb@iii + \advance\hd@i by \hs@vi \advance\hd@i by-\hs@iv + \setbox\hb@ii\hbox to \hd@i{\hss\box\hb@ii}% + \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}% + \advance\hs@vi by \nhh plus\nhh\relax} +\def\blrespect{\hd@i=\wd\hb@iii\advance\hd@i-\hs@iv + \distance{\hd@i}{\wd\hb@ii}\ifdim\hd@i>\wd\hb@i + \hs@vi=\Abs plus\nhh\relax \fi + \def\l@text{$\lower\undertext\hbox to \z@{\box\hb@ii\hss}$}} +\def\aautoset{\hd@i=\wd\hb@i \advance \hd@i-\wd\hb@iii + \advance\hd@i-\hs@iv + \ifdim\hd@i>\z@ \relax + \ifdim\hd@i>0.75\hs@v \advance\hd@i-\hs@v + \ifdim\hd@i<\hs@v \arrespect\else\alrespect\fi + \else\acrespect\fi + \else\anorespect\fi + } +\def\bautoset{\hd@i=\wd\hb@ii \advance\hd@i-\wd\hb@iii + \advance\hd@i-\hs@vi + \ifdim\hd@i>\z@ \relax + \ifdim\hd@i>\sk \advance\hd@i-\sk + \ifdim\hd@i<\sk \brrespect\else\blrespect\fi + \else\bcrespect\fi + \else\bnorespect\fi + } +% ************************************************** % +% * Zweistimmige Notation in einem System * % +% ************************************************** % +\def\two#1#2{{\def\stemdirectiondef{\relax}\twotrue + \setbox\h@nkbox=\hbox{\box\hunkbox}% + \hs@i=\sk \global\sk=\z@skip + \setbox\firstvoice\hbox{\stemuptrue + \let\akzent@position=\u@akzent@position\direction{up}#1}% + \hs@ii=\sk \global\sk=\z@skip + \setbox\secondvoice\hbox{% + \def\doteven{\dot@down}\let\akzent@position=\l@akzent@position + \stemupfalse\direction{down}#2}% + \hs@iii=\sk + \hbox{\global\sk=\hs@i\sethunkglue + \box\h@nkbox\ifdim\wd\firstvoice<\wd\secondvoice + \hd@i=\wd\firstvoice\global\sk=\z@skip\box\firstvoice\hskip-\hd@i + \global\sk=\z@skip\box\secondvoice\global\sk=\hs@iii\else + \hd@i=\wd\secondvoice\global\sk=\z@skip\box\secondvoice\hskip-\hd@i + \global\sk=\z@skip\box\firstvoice\global\sk=\hs@ii\fi}\twofalse}} +% ************************************************** % +% * Beginn und Ende * % +% ************************************************** % +%Material fuer die Ueberschrift eines Musikstueckes +\def\comp@{\hbox{}} %Komponist +\def\poet@{\hbox{}} % Texter +\def\title@{\hbox{}}% Titel +\def\voice@{\hbox{}}%Text zu Beginn der ersten Notenzeile +\def\composer#1{\def\comp@{\hbox{\eightrm #1}}} +\def\poet#1{\def\poet@{\hbox{\eightrm#1}}} +\def\title#1{\def\title@{\hbox{\bf#1}}} +\def\voice#1{\def\voice@{\hbox to \parindent{\offinterlineskip + \hss\vbox to \staffheight{\vfil\hbox{\rm#1}\vfil}\hss}}} +%Zusammensetzen der Ueberschrift +\def\headings{\par\hbox to \hsize{\hss\title@\hss}% + \hbox to \hsize {\poet@\hss\comp@}% + \def\comp@{\hbox{}}\def\poet@{\hbox{}}\def\title@{\hbox{}}} +%Rahmen \beginsong ...... \endsong +\outer\def\beginsong#1#2{\headings\par\nointerlineskip + \begingroup\inisong + \global\signtoks={}\global\cleftoks={}% + \noaccent + \baselines\parskip\staffheight plus 0.5\staffheight \relax + \firsttrue\indent\llap{\voice@}% + \firstlines#1#2\firstfalse\music} +\def\endsong{\break\null\par\endgroup\def\voice@{\hbox{}}\global\sk=0pt} +\outer\def\ende{\endsong\end} +% ************************************************** % +% * Defaults * % +% ************************************************** % +%Defaults zu Beginn des Musikstueckes +\def\inidefaults{\let\dotdown=\dot@down + \def\helplist{}% + \global\minsl=3 \nhh + \let\na=\n@a \let\nee=\n@e + \def\beamlist{\\{\the\n@a-\the\n@e,}}% +% Minimal moegliche Halslaenge bei Verbalkung - Anfangsbelegung + \n@a=1} +%Diese k"onnen nicht in \beginsong .... \endsong eingebettet werden +%da sonst keine Aenderung moeglich + \universal + \normalbaselines +\catcode`@ = 12 +%\let\baselines = \baselinesa %fuer Einbettung einzeiliger Beispiele + %in Text +\let\baselines = \baselinesb %fuer mehrzeilige Beispiele +\rm |