home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-03-06 | 86.1 KB | 1,977 lines |
- % %
- % 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}
- \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
-