From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/mtex/README | 65 ++ macros/mtex/documentation/mdoc.tex | 75 ++ macros/mtex/documentation/mdoc1.tex | 897 +++++++++++++++ macros/mtex/documentation/mdoc10.tex | 205 ++++ macros/mtex/documentation/mdoc11.tex | 283 +++++ macros/mtex/documentation/mdoc12.tex | 89 ++ macros/mtex/documentation/mdoc13.tex | 95 ++ macros/mtex/documentation/mdoc2.tex | 1206 +++++++++++++++++++ macros/mtex/documentation/mdoc3.tex | 811 +++++++++++++ macros/mtex/documentation/mdoc4.tex | 288 +++++ macros/mtex/documentation/mdoc5.tex | 1123 ++++++++++++++++++ macros/mtex/documentation/mdoc6.tex | 527 +++++++++ macros/mtex/documentation/mdoc7.tex | 398 +++++++ macros/mtex/documentation/mdoc8.tex | 617 ++++++++++ macros/mtex/documentation/mdoc9.tex | 1135 ++++++++++++++++++ macros/mtex/documentation/mdocabst.tex | 73 ++ macros/mtex/documentation/mdocams.tex | 261 +++++ macros/mtex/documentation/mdocanha.tex | 670 +++++++++++ macros/mtex/documentation/mdocanhb.tex | 49 + macros/mtex/documentation/mdocanhc.tex | 204 ++++ macros/mtex/documentation/mdocanhd.tex | 220 ++++ macros/mtex/documentation/mdocdef.tex | 258 +++++ macros/mtex/documentation/mdocdef2.tex | 60 + macros/mtex/documentation/mdoceinl.tex | 207 ++++ macros/mtex/documentation/mdocinh.tex | 91 ++ macros/mtex/documentation/mdocpic1.tex | 34 + macros/mtex/documentation/mdocpic2.tex | 45 + macros/mtex/documentation/mdocpic3.tex | 46 + macros/mtex/documentation/mdocpic4.tex | 24 + macros/mtex/documentation/mdoctit.tex | 15 + macros/mtex/documentation/mdoctrns.tex | 1201 +++++++++++++++++++ macros/mtex/documentation/mdocverb.tex | 40 + macros/mtex/documentation/webmac.tex | 201 ++++ macros/mtex/macros/mtex.tex | 1976 ++++++++++++++++++++++++++++++++ macros/mtex/macros/mtexdemo.tex | 299 +++++ macros/mtex/macros/mtexinfo.tex | 468 ++++++++ macros/mtex/metafont/acc16.mf | 142 +++ macros/mtex/metafont/beam16.mf | 79 ++ macros/mtex/metafont/music16.mf | 12 + macros/mtex/metafont/musicdef.mf | 71 ++ macros/mtex/metafont/noten16.mf | 292 +++++ macros/mtex/metafont/pause16.mf | 184 +++ macros/mtex/metafont/slur16.mf | 229 ++++ macros/mtex/metafont/slurdd16.mf | 41 + macros/mtex/metafont/slurdu16.mf | 42 + macros/mtex/metafont/slurud16.mf | 40 + macros/mtex/metafont/sluruu16.mf | 39 + macros/mtex/metafont/sonder16.mf | 112 ++ macros/mtex/metafont/vio16.mf | 195 ++++ 49 files changed, 15734 insertions(+) create mode 100644 macros/mtex/README create mode 100644 macros/mtex/documentation/mdoc.tex create mode 100644 macros/mtex/documentation/mdoc1.tex create mode 100644 macros/mtex/documentation/mdoc10.tex create mode 100644 macros/mtex/documentation/mdoc11.tex create mode 100644 macros/mtex/documentation/mdoc12.tex create mode 100644 macros/mtex/documentation/mdoc13.tex create mode 100644 macros/mtex/documentation/mdoc2.tex create mode 100644 macros/mtex/documentation/mdoc3.tex create mode 100644 macros/mtex/documentation/mdoc4.tex create mode 100644 macros/mtex/documentation/mdoc5.tex create mode 100644 macros/mtex/documentation/mdoc6.tex create mode 100644 macros/mtex/documentation/mdoc7.tex create mode 100644 macros/mtex/documentation/mdoc8.tex create mode 100644 macros/mtex/documentation/mdoc9.tex create mode 100644 macros/mtex/documentation/mdocabst.tex create mode 100644 macros/mtex/documentation/mdocams.tex create mode 100644 macros/mtex/documentation/mdocanha.tex create mode 100644 macros/mtex/documentation/mdocanhb.tex create mode 100644 macros/mtex/documentation/mdocanhc.tex create mode 100644 macros/mtex/documentation/mdocanhd.tex create mode 100644 macros/mtex/documentation/mdocdef.tex create mode 100644 macros/mtex/documentation/mdocdef2.tex create mode 100644 macros/mtex/documentation/mdoceinl.tex create mode 100644 macros/mtex/documentation/mdocinh.tex create mode 100644 macros/mtex/documentation/mdocpic1.tex create mode 100644 macros/mtex/documentation/mdocpic2.tex create mode 100644 macros/mtex/documentation/mdocpic3.tex create mode 100644 macros/mtex/documentation/mdocpic4.tex create mode 100644 macros/mtex/documentation/mdoctit.tex create mode 100644 macros/mtex/documentation/mdoctrns.tex create mode 100644 macros/mtex/documentation/mdocverb.tex create mode 100644 macros/mtex/documentation/webmac.tex create mode 100644 macros/mtex/macros/mtex.tex create mode 100644 macros/mtex/macros/mtexdemo.tex create mode 100644 macros/mtex/macros/mtexinfo.tex create mode 100644 macros/mtex/metafont/acc16.mf create mode 100644 macros/mtex/metafont/beam16.mf create mode 100644 macros/mtex/metafont/music16.mf create mode 100644 macros/mtex/metafont/musicdef.mf create mode 100644 macros/mtex/metafont/noten16.mf create mode 100644 macros/mtex/metafont/pause16.mf create mode 100644 macros/mtex/metafont/slur16.mf create mode 100644 macros/mtex/metafont/slurdd16.mf create mode 100644 macros/mtex/metafont/slurdu16.mf create mode 100644 macros/mtex/metafont/slurud16.mf create mode 100644 macros/mtex/metafont/sluruu16.mf create mode 100644 macros/mtex/metafont/sonder16.mf create mode 100644 macros/mtex/metafont/vio16.mf (limited to 'macros/mtex') diff --git a/macros/mtex/README b/macros/mtex/README new file mode 100644 index 0000000000..391d1f0832 --- /dev/null +++ b/macros/mtex/README @@ -0,0 +1,65 @@ +Dieser Zoo-File enthaelt die komplette Version der MTEX-Makros zum +automatisierten Notensatz mit TeX, inkl. Dokumentation. +Diese Makros bzw. Fonts sind im Rahmen der Diplomarbeiten von +Frau Steinbach und Frau Schofer in Bonn entstanden. Die Dokumentation +ist eine Kombination aus diesen beiden Arbeiten. +Die Files im einzelnen: + +README diese Datei +mdoc.tex Dokumentation zu MTEX, Plain TeX +mdoc1.tex Teil der Dokumentation +mdoc10.tex "" +mdoc11.tex "" +mdoc12.tex "" +mdoc13.tex "" +mdoc2.tex "" +mdoc3.tex "" +mdoc4.tex "" +mdoc5.tex "" +mdoc6.tex "" +mdoc7.tex "" +mdoc8.tex "" +mdoc9.tex "" +mdocabst.tex "" +mdocams.tex "" +mdocanha.tex "" +mdocanhb.tex "" +mdocanhc.tex "" +mdocanhd.tex "" +mdocdef.tex "" +mdocdef2.tex "" +mdoceinl.tex "" +mdocinh.tex "" +mdocpic1.tex "" (Bilder) +mdocpic2.tex "" +mdocpic3.tex "" +mdocpic4.tex "" +mdoctit.tex "" +mdoctrns.tex "" +mdocverb.tex "" +mtex.tex Mtex-Makros +mtexdemo.tex Demo zu Mtex (benoetigt ein 'grosses' TeX) +mtexinfo.tex Kurz-Dokumentation zu den Makros +webmac.tex Makros zu WEB (fuer Listing des Preprozessors) +music16.mf Metafont-Source der Notensymbole +beam16.mf "" +slur16.mf "" +slurdd16.mf "" +slurdu16.mf "" +slurud16.mf "" +sluruu16.mf "" +sonder16.mf Metafont-Include-Datei +musicdef.mf "" +noten16.mf "" +pause16.mf "" +vio16.mf "" +acc16.mf "" + +Zum Uebersetzen der Dokumentation wird nur ein Plain TeX mit german.tex +vorausgesetzt. Die Fonts muessen natuerlich vorher erstellt werden. + + Dr. P. Janssen + Inst. f. angew. Mathematik + Universitaet Bonn + Wegelerstr. 6 + 5300 Bonn 1 diff --git a/macros/mtex/documentation/mdoc.tex b/macros/mtex/documentation/mdoc.tex new file mode 100644 index 0000000000..9c466500f5 --- /dev/null +++ b/macros/mtex/documentation/mdoc.tex @@ -0,0 +1,75 @@ +%format plaing % PLAIN + GERMAN +%%format mtexg % PLAIN + GERMAN + MTeX + +\input pictex % there are some figures (in MDOCPIC*.TEX) +\input mtex % we dont use preloaded mtex +\input mdocverb % verbatim mode +\input mdocams % because we now use PLAIN, not OLDAMS base format. +\input mdocdef % defdipl + dipldef +\input german +\verbatimon + + +\input mdoctit + +{\advance \hsize -2cm +\openup-3pt +\advance\hoffset1.0cm +\ninerm +\input mdocabst +} + + +\chap=-2 +\input mdocinh + + +\pageno=1 +\input mdoceinl + +{ +\verbatimoff +\input mdocdef2 % hier NUR fuer MDOC1,2,3! deshalb Klammerung! + +\input mdoc1 + +\input mdoc2 + +\input mdoc3 +} +\chap=3 + +\input mdoc4 + +\input mdoc5 + +\input mdoc6 + +\input mdoc7 + +\input mdoc8 + +\input mdoc9 + +\input mdoc10 + +\input mdoc11 + +\input mdoc12 + +\input mdoc13 + +%\chap=13\pageno=107 +\input mdocanha + +{ +\verbatimoff +\input mdocdef2 % hier NUR fuer MDOCANHB,C,D! deshalb Klammerung! + +\input mdocanhb % benoetigt noch WEBMAC.TEX + +\input mdocanhc + +\input mdocanhd +} +\bye diff --git a/macros/mtex/documentation/mdoc1.tex b/macros/mtex/documentation/mdoc1.tex new file mode 100644 index 0000000000..bc080b00cb --- /dev/null +++ b/macros/mtex/documentation/mdoc1.tex @@ -0,0 +1,897 @@ +\heading{Noteneingabesprachen + im Zusammenhang mit dem automatisierten Notensatz} +\centerline{\bigrm 1.\quad Noteneingabesprachen}\smallskip +\centerline{\bigrm im Zusammenhang mit dem automatisierten Notensatz} +\bigskip +Bevor auf die Automatisierung des Notensatzes eingegangen wird, soll +zuerst die her\-k"ommliche Notationsweise von Musikst"ucken, die +Notenschrift, erl"autert werden, denn aufgrund +ihrer Gestalt ist +die Automatisierung des Notensatzes relativ schwer. +\abs +Das Ziel einer schriftlichen Aufzeichnung der Musik mu\3 es sein, +den Klang graphisch darzustellen und den zeitlichen Ablauf der Musik +festzuhalten. +Die heute gebr"auchliche abendl"andische Notenschrift ist seit dem +11. Jahrhundert st"andig weiterentwickelt worden. +Dabei hat sie einen hohen Grad der Vollkommenheit erreicht. +\abs +In der Notenschrift werden +die Tonh"ohe durch die Stellung der Noten im +Liniensystem, die relative Dauer der Einzelt"one durch die Notengestalt, +die rhythmische Gruppierung und die Akzentlage durch Taktvorzeichen +und Taktstriche und das Tempo durch allgemeine Angaben +oder Metronom--Zahlen +wiedergegeben. Differenzierungen der Tonst"arke, Verzierungen, +Artikulationen oder "ahnliche Zus"atze werden durch schriftliche +Anweisungen oder besondere Zeichen ausgedr"uckt. Die Notenschrift bedient +sich eines zweidimensionalen Systems, in dem die Noten vertikal +und horizontal angeordnet werden. Die vertikale Richtung stellt die +Tonh"ohe und die horizontale +die zeitliche Aufeinanderfolge der T"one dar. +Auf diese Art kann die musikalische Struktur einer Partitur bis in +Einzelheiten visuell veranschaulicht werden. +\abs +Im folgenden soll auf die Problematik des automatisierten Notensatzes +eingegangen +und die Unterschiede zum automatisierten Schriftsatz deutlich gemacht +werden. Zus"atzlich zu den Schwierigkeiten bei der +Entwicklung einer Eingabesprache werden auch kurz die +Probleme der Notenschriftausgabe angesprochen, weil manche dieser +Probleme aus der Eingabe resultieren. +\abschnitt\abschnitt +\centerline{\bf 1.1 Problematik des automatisierten Notensatzes} +\abschnitt +Die "ubliche Aufzeichnung +von Musikst"ucken ist die oben beschriebene +Niederschrift in Noten. Ihr besonderes +Merkmal ist die Anordnung sehr unterschiedlicher Zeichen in einem +zweidimensionalen System, dem Notenliniensystem. Die Zeichen der +Notenschrift, die in der Gr"o\3e stark variieren, treten nicht nur +einzeln sondern auch miteinander kombiniert auf. +Zeichen bzw. Zeichengruppen m"ussen in dem +Notenliniensystem sehr genau plaziert werden. +Es spielt also nicht nur die +horizontale Ausrichtung und Anordnung eine wichtige Rolle, sondern auch +die vertikale. Beide, horizontale wie vertikale Plazierung der Zeichen, +sind f"ur das Verst"andnis eines Musikst"ucks gleichbedeutend und +liefern entscheidende Informationen.\abs +Die Aufgabe der Eingabesprache f"ur den Computer besteht nun +einerseits darin, Ausk"unfte "uber die Plazierung der Zeichen +im Notenliniensystem zu geben. Andererseits sollen +zus"atzliche Informationen, die durch die +zweidimensionale Schreibweise vermittelt werden, genau erfa\3t und +wiedergegeben werden. +Bei der Entwicklung einer Eingabesprache, die diese Aufgabe l"ost, +ist die Umsetzung der zweidimensionalen Notenschrift in eine +lineare Schreibweise die gr"o\3te Schwierigkeit. Diese +"Ubertragung ist erforderlich, weil f"ur den Computer eine +Noteneingabe vorliegen mu\3, bei der die Zeichen ausschlie\3lich +aufeinanderfolgen. Das bedeutet aber auch, da\3 die Zeichen +der Notenschrift durch ein Zeichensystem ersetzt werden m"ussen, +das einem Standardzeichensatz f"ur den Computer angeh"ort. +Bei diesem Umsetzungsschritt sollen die Informationen der Notenschrift +erhalten bleiben, das hei\3t, die "Ubertragung sollte ohne Verf"alschung +und ohne Verlust von Informationen stattfinden. +Der andere Teil der Aufgabe einer Eingabesprache betrifft die +"Ubermittlung von Informationen zur Plazierung der Zeichen bzw. +Zeichengruppen. Ziel sollte es dabei sein, da\3 der Benutzer +nicht die Position der Zeichen in dem zweidimensionalen System, +sondern ihre Funktion und Bedeutung angeben mu\3. Es +sollte bei der Dateneingabe auch nicht n"otig sein, das Ende +einer Notenzeile bzw. einer Seite explizit anzugeben, +da der Endpunkt einer +Zeile bzw. Seite innerhalb eines Musikst"ucks ohne Bedeutung ist. +\abs +Mit diesen Ausf"uhrungen ist ein +wesentlicher Unterschied zum normalen +Schriftsatz herausgestellt worden. Dort +kommt es nur auf die horizontale Anordnung und Aufeinanderfolge der +Schriftzeichen an, die Elemente eines Standardzeichensatzes +f"ur den Computer sind. Damit entf"allt bei der +Automatisierung des Schriftsatzes das Problem, die "ubliche +Niederschrift des Textmaterials bzw. das Zeichensystem +codieren zu m"ussen. +Eine Ausnahme bildet \zB der Satz mathematischer +oder chemischer +Texte, denn f"ur die Notierung mathematischer bzw. chemischer Formeln +wird ebenfalls eine zweidimensionale Schreibweise verwandt. +Es werden dabei auch sehr unterschiedliche Zeichen horizontal wie +vertikal angeordnet. +F"ur diese Art von Texten mu\3 es demnach wie bei einer Noteneingabe +eine Codierungsvorschrift geben, die die zweidimensionale +Notationsform in eine lineare "ubertr"agt. +\abs +Da die Eingabedaten Grundlagen f"ur einen Ausgabealgorithmus +sind, wird dieser von der Art der Eingabe beeinflu\3t. +In unserem Fall bedeutet das, da\3 die +Positionsermittlung der Zeichen im Notenliniensystem +Aufgabe des Ausgabeverfahrens ist. +Au\3erdem mu\3 ein Algorithmus gefunden werden, der den +Seiten-- bzw. Zeilenumbruch selbst"andig vornimmt, +weil das Ende einer Zeile bzw. Seite nicht angegeben zu werden braucht. +An diesen Algorithmus wird die Forderung gestellt, +da\3 er die f"ur einen Umbruch g"unstigsten Stellen findet. G"unstige +Umbruchpunkte sind dabei solche, die das Notenbild und die Bedeutung des +Musikst"ucks nicht beeintr"achtigen. +Ein Umbruchalgorithmus f"ur den Notensatz mu\3 auch vertikale +Zusammengeh"origkeiten ber"ucksichtigen. +Dies ist \zB bei Orchesterpartituren +notwendig, bei denen die Takte der verschiedenen Stimmen exakt +untereinander stehen m"ussen. Der Algorithmus sollte +also f"ur jede Stimme +g"unstige Umbruchpunkte suchen und dann einen f"ur das gesamte System +bestimmen, der f"ur alle Stimmen m"oglichst gut ist. +Solche Umbruchalgorithmen werden auch beim automatisierten +Schriftsatz benutzt. Allerdings m"ussen dort in den meisten F"allen +keine vertikalen Zusammengeh"origkeiten beachtet werden. +\abs +Zus"atzlich zur Ein-- und Ausgabe mu\3 eine weitere Voraussetzung +angesprochen werden, die notwendigen Zeichens"atze. +F"ur den Notensatz werden eine Vielzahl von Schriftelementen +ben"otigt, die sich oft nur geringf"ugig unterscheiden. Als Beispiel +seien dabei die Balken erw"ahnt, die mehrere Noten miteinander +verbinden. Sie unterscheiden sich haupts"achlich in ihrer L"ange bzw. +Steigung. W"unschenswert ist daher +ein zus"atzliches Programmpaket, das beliebige +Zeichens"atze mit m"oglichst geringem manuellem Aufwand erstellt. +\abs +Die angef"uhrten Themen werden in den n"achsten +Kapiteln n"aher erl"autert und Probleml"osungen angegeben. +Die Umsetzung der +zweidimensionalen Notation in eine eindimensionale wird im +zweiten Kapitel, die Zeichensatzerstellung in +Anhang D behandelt. +% +Algorithmen, die den \SZ\ optimieren bzw. die Zeichen im +Notenliniensystem genau plazieren, werden in der Arbeit von +A. Steinbach beschrieben. +% +% +% +\abschnitt\abschnitt +\centerline{\bf 1.2 Einsatz des Textsatzsystems \TeX\ +f"ur den Notensatz} +\abschnitt +In diesem Abschnitt soll gezeigt werden, aus welchen Gr"unden +das schon mehrfach erw"ahnte \Tss\ \TeX\ f"ur den +automatisierten Notensatz verwandt werden kann. +Zuerst wird eine zusammenfassende Beschreibung der Arbeitsweise +mit dem \Tss\ gegeben. +\abs +Mit \TeX\ k"onnen alle Arten von Schrifttexten verarbeitet werden, +auch mathematische und chemische Formeln. +F"ur die Textverarbeitung mit \TeX\ wird eine gew"ohnliche +sequentielle Eingeabedatei erstellt, die den zu setzenden Text enth"alt. +Zusammen mit dem Text werden Steuerbefehle eingegeben, die angeben, +auf welche Art der Text verarbeitet wird. Diese +Steuerbefehle k"onnen Einflu\3 auf die Formatierung nehmen oder +Sonderzeichen ansprechen, wie sie \zB +f"ur mathematische Formeln ben"otigt +werden. +Aus dieser Eingabedatei erzeugt \TeX\ eine Datei, die Angaben +"uber die Art der Zeichen und ihre Position auf einer Manuskriptseite +enth"alt. Diese Datei ist vom m"oglichen Ausgabeger"at v"ollig +unabh"angig. +Mit einem ger"ateabh"angigen Programm wird nun aus dieser Datei +das tats"achliche lesbare Dokument erstellt. +Bemerkenswert ist dabei vor allem, da\3 keinerlei Informationen +"uber Position der Schriftzeichen +oder Umbruchpunkte in der Eingabe n"otig sind, um +eine lesbare Ausgabe zu erhalten. +Damit bietet \TeX\ auch dem Benutzer, der keine oder nur geringe +Kenntnisse von Satzregeln besitzt, die M"oglichkeit, eine +gut formatierte Ausgabe zu erzielen. Andererseits stellt \TeX\ +Mittel bereit, die es zulassen, da\3 der Benutzer den Text genau +nach seinen Vorstellungen formatieren kann. +Zu dem \Tss\ \TeX\ geh"ort das Programmpaket \mf\ \lit{\Knuthmf}, das +f"ur den Textsatz notwendige Zeichens"atze generieren kann. +\abs +Im folgenden werden die Gr"unde dargelegt, die +f"ur eine Anwendung des \Tss s \TeX\ +beim automatisierten Notensatz sprechen. +Einige Aspekte werden beim Vergleich der Anwendungsbereiche und +der Arbeitsweise von \TeX\ mit den speziellen Fragestellungen des +Notensatzes deutlich. Bei der Entwicklung der +Ein-- bzw. Ausgabeverfahren f"ur dieses Textsatzsystem mu\3ten +"ahnliche Probleme gel"ost werden. Die Gemeinsamkeiten dieser +Probleme betreffen vor allem +\item{---} die Umsetzung der zweidimensionalen in eine +lineare Notation, +\item{---} die Formatierung des Textes, +\item{---} die M"oglichkeit, verschiedenartige Texte miteinander +zu verarbeiten und +\item{---} die Wahl der Ausgabeger"ate. +\abs +Die aufgef"uhrten Punkte werden nun n"aher erl"autert und +in Verbindung mit dem Notensatz gebracht. +\abs +\item{1.} +Einer der entscheidenden +Gr"unde, die eine Anwendung des Textsatzsystems \TeX\ bei der +Automatisierung des Notensatzes rechtfertigen, +ist sicherlich, +da\3 es alle M"oglichkeiten bietet, um auch +mathematische Texte zu setzen. +Bisher mu\3ten mathematische +Manuskripte genau wie musikalische ausschlie\3lich von +ausgebildeten Schriftsetzern gesetzt werden. Der Einsatz des Satzsystems +\TeX\ macht es m"oglich, da\3 auch Laien mathematische Texte setzen +k"onnen. +F"ur den Notensatz ist das insofern von Bedeutung, weil +der Satz mathematischer und \m er Manuskripte +Gemeinsamkeiten aufweist, die sich vor allem darin begr"unden, da\3 in +beiden F"allen die Zeichen innerhalb eines zweidimensionalen Systems +angeordnet werden. +F"ur die Eingabe mathematischer Texte mu\3 ebenfalls +-- "ahnlich wie f"ur die Notenschrifteingabe -- +eine Methode gefunden werden, +die die oft zweidimensionale Notationsweise f"ur mathematische Formeln +in eine eindimensionale +"ubertr"agt. Knuth ist dies mit seinem \Tss\ auf eine f"ur den Benutzer +relativ leicht zu handhabende Weise gelungen, ohne da\3 das System die +M"oglichkeiten des Benutzers einschr"ankt oder Strukturen +der "ublichen Notation verf"alscht. +Mathematische Texte weisen eine +"ahnliche Blockstruktur wie Musikst"ucke auf. Mit \TeX\ werden die +vorkommenden Bl"ocke in der Eingabe auch +als solche kenntlich gemacht. Die Blockstruktur von Musikst"ucken +zeigt sich in der Zusammenfassung von Notenschriftzeichen +zu Gruppen wie Akkorde, +Verbalkungen, Takte oder im +Zusammenschlu\3 mehrerer Systeme zu einer Partitur. +\item{2.} +Mit dem Satzsystem von Knuth erfolgt auch dann eine gut formatierte +Ausgabe, +wenn der Benutzer keine +oder nur geringe Kenntnisse von Satzregeln besitzt. +Gleichzeitig weist das System +so viel Flexibilit"at auf, da\3 +es die Umsetzung fester Vorstellungen vom +Layout des gesetzten Textes zul"a\3t. Beide M"oglichkeiten sollen auch +f"ur den Notensatz verwirklicht werden. Das bedeutet, da\3 +mit Hilfe einer vorgegebenen Formatierung ein Benutzer, der mit den +Satzregeln +nicht vertraut ist, Partituren eingeben kann und +eine publikationsf"ahige Notenausgabe +erh"alt. Die W"unsche des Benutzers bez"uglich der Formatierung k"onnen +aber mittels Steuerbefehlen ebenfalls ber"ucksichtigt werden. +Des weiteren soll es auch f"ur eine vom Benutzer gew"ahlte +Formatierung nicht n"otig sein, +das Ende einer Zeile bzw. Seite einzugeben. Diese +Endpunkte sollen mittels eines Umbruchalgorithmus gesucht werden. +F"ur das \Tss\ \TeX\ wurde +ein Algorithmus entwickelt, der den \SZ\ optimiert und auf +diese Weise die Formatierung erleichtert. +\item{3.} +Mit Hilfe des Satzsystems von Knuth k"onnen Texte gemeinsam verarbeitet +werden, obwohl sie sich in ihrer Struktur unterscheiden. Beispiele +daf"ur sind mathematische bzw. chemische Formeln oder anderssprachige +Manuskripte, die andere Schriftzeichen verwenden. Dadurch scheint die +M"oglichkeit gegeben zu sein, auch musikalische St"ucke zusammen mit +anderem Textmaterial verarbeiten zu k"onnen. Erleichtert wird das noch +durch die Tatsache, da\3 die Verarbeitung mathematischer und +musikalischer Manuskripte "ahnliche Fragen aufwirft und diese f"ur +mathematische Texte gel"ost wurden. +\item{} +Die Kombination des Notensatzes mit +einem \Tss\ macht es au\3erdem "uberfl"ussig, Zeichens"atze zu +generieren, die die Schriftzeichen f"ur Texte, die innerhalb eines +Musikst"ucks vorkommen, enthalten. Die Zeichs"atze f"ur die +Notenschriftzeichen k"onnen mit dem Programmpaket \mf, das ebenfalls von +Knuth entwik\-kelt wurde, erzeugt werden. Mit \mf\ werden Zeichens"atze +verh"altnism"a\3ig schnell und ohne gro\3en Arbeitsaufwand des Benutzers +erstellt. +\item{4.} +Eine weitere Eigenschaft +des \Tss\ \TeX\ besteht darin, da\3 es maschinen-- und +ausgabeger"ateunabh"angig arbeitet. +Eine Ausgabe wird nicht nur mit einem bestimmten +Ausgabeger"at erreicht, sondern +jede \TeX--Eingabedatei kann durch geeignete +Programme so aufbereitet werden, da\3 die Ausgabe mit verschiedenen +Ausgabeger"aten m"oglich ist. +Dies ist in der heutigen Zeit nicht +unwesentlich, da es eine Vielzahl verschiedener Ger"ate zur +Datenverarbeitung gibt. +Allerdings h"angt die Qualit"at der Ausgabe vom benutzten +Ausgabeger"at ab. +\abs +Aufgrund dieser Gesichtspunkte +sollte im Zusammenhang mit der Automatisierung +des Notensatzes versucht werden, eine Notenausgabe mit Hilfe des \Tss s +\TeX\ zu +erzielen. Dazu ist es notwendig, zus"atzlich zu der Noteneingabesprache +ein "Ubersetzungsprogramm zu entwickeln, das die Eingabedatei +in eine Form "ubertr"agt, auf die \TeX\ +angewandt werden kann. Dieses Programm wird in +Anhang B beschrieben. +\abschnitt +Bevor eine Sprache zur Notenschrifteingabe entwickelt werden kann, +m"ussen die Grunds"atze, auf denen ein +solches Verfahren basieren soll, erarbeitet werden. +Dabei mu\3 vor allem beachtet werden, da\3 eine Noteneingabesprache +nicht speziell f"ur eine Anwendungsm"oglichkeit entwickelt werden soll, +sondern es soll jede Weiterverarbeitung m"oglich werden. +Nat"urlich ist +es dann notwendig, spezielle Programme, die die Eingabe nach +Wunsch aufbereiten, zu erstellen. "Anderungen am Eingabematerial sollten +allerdings unn"otig sein, \dh die Erstellung einer einzigen +Eingabedatei sollte ausreichen. +Denkbare Anwendungsbereiche k"onnten neben der Automatisierung +des Notensatzes die Analyse von Musikst"ucken, die Kopie einzelner +Stimmen zur Katalogisierung oder Transponieren der Stimmen sein. +\abs +Es werden nun +zun"achst die +Bedingungen gestellt, die eine Eingabemethode erf"ullen sollte. +Dabei wird die allgemeine Anwendbarkeit der Sprache +beachtet, obwohl haupts"achlich auf den Notensatz eingegangen wird. +\abschnitt\abschnitt +\centerline{\bf 1.3 Grundlegende Anforderungen an eine Sprache zur +Notenschrifteingabe}\abschnitt +F"ur die \A\ des Notensatzes ist eine sinnvolle +Methode zur Eingabe des musikalischen Materials von gro\3er Bedeutung, +weil sie -- zusammen mit der maschineninternen +Behandlung der eingegebenen Daten -- Auswirkungen auf die +Notenschriftausgabe hat. Eine Eingabesprache, die das Klangbild +musikalischer Werke nicht exakt erfassen kann, +f"uhrt dazu, da\3 +Musikst"ucke +unabh"angig von der +Beschaffenheit des Ausgabeverfahrens +verf"alscht oder fehlerhaft wiedergegeben werden. +Aus diesem Grund resultieren einige der Bedingungen aus +"Uberlegungen, die zur Ausgabe gemacht wurden. Die wichtigsten +Forderungen beziehen sich auf die Darstellung der Eingabedaten +und die +Einsatzm"oglichkeiten f"ur den Benutzer. +\abs +Es wurde schon zu Anfang dieses Kapitels erw"ahnt, +da\3 mit der Notenschrift das +Klangbild einer Partitur bis in Einzelheiten +erfa\3t werden kann. Das liegt daran, +da\3 zus"atzlich zu den Angaben zu jedem einzelnen Ton diese Darstellung +auch den Bezug jedes Tons zur Gesamtstruktur des Musikst"ucks in seinem +horizontalen +wie vertikalen Aufbau erkennen l"a\3t. +Das Ziel bei der Entwicklung einer Eingabesprache +mu\3 also sein, diese Informationsvielfalt der gebr"auchlichen +Notation wiederzugeben. +Aufgrund +der Komplexit"at der Musik und ihrer +Notationsform ist es nicht einfach, das mit einer linearen +Eingabemethode zu verwirklichen. +Zus"atzlich wird das noch durch die Tatsache erschwert, +da\3 eine lineare Notation ein anderes Zeichensystem als +Grundlage hat. Aus der Vielschichtigkeit der +Notenschrift lassen sich Bedingungen f"ur die +Eingabemethode in Textform ableiten. +\item{1.} +Die lineare Darstellung der Musik sollte die gleiche +"Ubersichtlichkeit aufweisen wie die "ubliche Notation. Das bedeutet, +da\3 die Art der Musik und +das Klangbild der Partitur deutlich werden mu\3 und unmittelbar +erkennbar sein sollte. +Dies wird +gew"ahrleistet, wenn die Eingabedatei haupts"achlich Daten zur +Funktion und Bedeutung eines Zeichens innerhalb des \m en Werks +enth"alt. +Die Alternative w"are, die Position der Zeichen anzugeben. +Dazu w"are es notwendig, das +Notenliniensystem mit einer Skalierung zu versehen und dann als +Koordinatensystem zu betrachten. +Allerdings +w"urde dabei +die geforderte "Uberschaubarkeit nicht vorhanden sein, weil +jedes Zeichen f"ur sich ohne Ber"ucksichtigung seiner Umgebung +eingegeben werden m"u\3te. +\abs +Da die Funktion und nicht die Position der Zeichen f"ur die +Eingabe relevant sein soll, kann die folgende Bedingung gestellt +werden. +\item{2.} +Die Eingabe soll nicht +zeilenweise erfolgen. Das Ende einer Zeile bzw. Seite +innerhalb eines +Musikst"ucks braucht deshalb bei der linearen \Em\ +nicht gekennzeichnet werden. Der Grund daf"ur liegt darin, da\3 +im Fall einer zeilenweise Eingabe +der Zusammenhang und die "Uber\-schau\-barkeit des Musikst"ucks +verloren geht. +Beispielsweise m"u\3ten bei +dieser Art der Eingabe die verschiedenen Instrumentenstimmen einer +Orchesterpartitur zerst"uckelt eingegeben werden. +\abs +Die weiteren Anforderungen betreffen die Kenntnisse, die ein +Benutzer haben sollte, der die Methode zur Noteneingabe benutzen +will. +\item{3.} +Ein \Ev\ sollte +schnell erlernbar und einfach zu handhaben sein. Diese +Forderung kann erf"ullt werden, wenn die +Angaben, die eingegeben werden m"ussen, +dem \m en Sprachgebrauch angepa\3t +sind. Das spricht wiederum daf"ur, auf Positionsangaben zu verzichten. +\item{4.} +Die Noteneingabesprache sollte so beschaffen +sein, da\3 auch Laien sie benutzen k"onnen. +Der Benutzer sollte weder +Programmierkenntnisse ben"otigen +noch Notensatzregeln beherrschen m"ussen. +Fertigkeiten im Notenlesen sollten ausreichen, um eine Eingabe f"ur den +Computer erstellen zu k"onnen. +\absatz +Anhand dieser Bedingungen soll im n"achsten Kapitel eine Eingabesprache +entwickelt werden. Dabei wird aufgrund der Themenstellung dieser Arbeit +vor allem die Automatisierung des Notensatzes ber"ucksichtigt. +Zuvor werden einige andere Noteneingabeverfahren vorgestellt, die +aus verschiedenen Motiven entwickelt wurden. +\abschnitt\abschnitt +\centerline{\bf 1.4 Er"orterung und Vergleich +vorhandener Eingabeverfahren} +\abschnitt +Schon seit einiger Zeit werden +einige Methoden zur Noteneingabe, die f"ur den Computer geeignet +sind, ver"offentlicht. Der Nachteil der meisten dieser Eingabeverfahren +besteht darin, da\3 sie nicht sehr flexibel und in ihrer Verwendbarkeit +eingeschr"ankt sind. Die Mehrzahl erf"ullt nur einen +Teil der oben genannten Bedingungen. Um einen ungef"ahren "Uberblick +"uber die bereits ver"offentlichten Arbeiten zu diesem Thema zu +erhalten, werden im folgenden einige davon beschrieben. Ein +Gesichtspunkt der Untersuchung dieser Eingabemethoden wird dabei sein, +ob die obigen Anforderungen erf"ullt werden. Daran kann erkannt werden, +wie geeignet die Methode f"ur die verschiedenen Aufgaben ist. \abs +Allerdings k"onnen an dieser Stelle nicht alle vorhandenen Methoden zur +computergerechten Noteneingabe erfa\3t werden. Genauso wenig ist es +m"oglich, die Eingabeverfahren vollst"andig zu beschreiben und auf jede +Codierungsvorschrift einzugehen. Doch ein "Uberblick "uber die +zug"anglichen Publikationen wird trotzdem vermittelt, und einige +grundlegende Unterschiede der einzelnen Methoden werden ersichtlich. +\abs +Die Eingabemethoden, die beschrieben werden, stehen +jeweils stellvertretend f"ur eine Gruppe +"ahnlicher Verfahren. Mit deren Hilfe werden typische Unterschiede +zwischen den Methoden deutlich. Die Vorstellung der \Ev\ erfolgt +anhand einer knappen Zusammenfassung der Regeln und einiger +Mustercodierungen. +\abschnitt\abschnitt +\subheading{1.4.1 Plaine and Easy Code \lit{\Brook}} +Den Angaben der Autoren zufolge ist diese Methode +nicht entwickelt worden, um vollst"andige Partituren einzugeben. Ihre +Absicht bestand darin, eine M"oglichkeit zu schaffen, Ausz"uge aus +Partituren -- vor allem den Anfang der Musikst"ucke -- speichern zu +k"onnen. Dies wird ben"otigt f"ur Bibliothekskarteien zur +Katologisierung und +schnellen +Identifizierung \m er Werke, f"ur Kataloge, f"ur Musikbeispiele in +Artikeln und B"uchern, bei der Aufstellung von Karteien mit den +wichtigsten Merkmalen eines Musikst"ucks. +\abs +Um den Aufbau der Eingabesprache von Brook und Gould trotz einer +knappen Beschreibung deutlich werden zu lassen, wird zun"achst ein +Beispiel f"ur ihre Eingabe vorgestellt. +% +% +% +$$\hbox{(All bBEAm 34) ,4G / C E G / 2C 4E / 2D ,4xF / 2.G + $\us$ / G /}$$ +\par\vskip-0.7cm +{\hsize13.5cm\parindent3cm +\nointerlineskip +\beginsong\bass\Es\^n{Allegro}{\meter3/4}\v0\|\v3\v5\v7\|% +\h{10}\v{12}\|\h{11}\x6\v6\|\group{\\{\h7\.1}\\{\|}\\{\h7\.1}} +{\\{7}\\{8}\\{7}}\uslur13\go\hfill\endsong} +\vskip-1cm\abs +%Beispiel Brook S.142 oben +% +% +Da es vor allem darum +geht, den Anfang eines Musikst"ucks f"ur eine Klassifizierung +computergerecht aufzubereiten, haben Brook und Gould die \Em\ in zwei +Teile aufgegliedert. +\abs +Der erste Teil enth"alt die Angaben zu Tempo, +Notenschl"ussel, Vorzeichnung und Taktart. Zus"atzlich k"onnen Aussagen +"uber Instrumente bzw. Stimmen, Satznummern und "ahnliches notiert +werden. Die Eingabe des Tempos und der Instrumente bzw. Stimmen erfolgt +durch eine Abk"urzung ihres Namens; die Taktart wird mit Hilfe zweier +Zahlen, die durch einen Schr"agstrich getrennt werden k"onnen, +notiert; f"ur die +Vorzeichnung wird die Art der Vorzeichen durch einen Buchstaben +eingegeben, auf den die Notennamen der Noten folgen, vor denen das +Vorzeichen steht; und der Notenschl"ussel wird durch ein Codewort +angegeben. +\abs +Der zweite Teil der Eingabe enth"alt ein St"uck des Melodieverlaufs. +Dabei werden die Notennamen durch Gro\3buchstaben angegeben. Vor den +Notennamen m"ussen zus"atzliche Angaben wie Tondauer, Oktave, +Versetzungszeichen und Punktierungen stehen. Diese werden gem"a\3 ihrem +Sprachgebrauch codiert: die Tondauer als Ziffer, Versetzungszeichen als +Buchstabe, Punktierungen durch die entsprechende Anzahl von Punkten und +Oktaven durch eine Anzahl von Kommata, die der Oktavlage entspricht. +\abs +Einzelne Noten werden durch Leerstellen voneinander getrennt, die +Takte werden mit einem Schr"agstrich abgeschlossen. +\abs +F"ur +die Verbindung einzelner Noten mit einem Bogen +wird von den Autoren unterschieden, ob zwei oder mehr +Noten mit einem Bogen verbunden werden. F"ur mehrere Noten wird der +Bogenanfang durch den Buchstaben `y', das Bogenende mit `z' markiert. +Falls nur zwei Noten miteinander verbunden werden, so reicht es aus, +dies mit einem Querstrich zwischen den beiden Noten zu kennzeichnen. +% +$$\bunch\hbox{($\sharp$FC 44) `4.D 8D 4E - / 4.F 8F F y ,8B E G z /}\\ +\hbox{G$\us$4F 8E D E y 4F$\us$ / 8F 6E D z 4E 2F //}\endbunch$$ +\par\vskip-0.7cm +{\hsize15cm +\def\beamlist{\\{1-\the\N,}} +\nointerlineskip\beginsong +\vio\D\meter4/4% +\v6\.1\a6\v7\pv\|\v8\.1\group{\\{\a8}\\{\a8}}{\\{8}\\{8}}\lbeam12\go +\group{\\{\a4}\\{\a7}\\{\a9}}{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}}{\\{9}\\{8}}\uslur12\go\a7% +\group{\\{\a6}\\{\a7}}{\\{6}\\{7}}\lbeam12\go% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\go\v7\h8\doublebarline +\endsong} +%Smith S. 303, aber mit verbundenen Achtel-Noten +\vskip-1cm\abs +% +% +% +Andere Arten von Notengruppen wie Triolen werden mit einer erkl"arenden, +codierten Bemerkung in runde Klammer eingefa\3t. +Auf Verbalkungen von Noten wird nicht n"aher eingegangen, da +vorausgesetzt wird, da\3 Balken immer dort gezeichnet werden, +wo zwei oder mehr aufeinanderfolgende Noten mindestens ein F"ahnchen +haben. +\abs +Die Erfassung der Notenschrift durch +diese Eingabemethode ist unkompliziert und leicht verst"andlich, schon +allein dadurch, da\3 versucht wurde, die normalerweise gebr"auchliche +\m e Ausdrucksweise zu simulieren. +Weiterhin leistet dieses Verfahren +genau das, wof"ur es von Brook und Gould +entwickelt wurde: +es erleichtert die Katalogisierung von Instrumentenstimmen, Themen, +charakteristischen Tonfolgen und "ahnliche Ausz"uge mit deren Hilfe eine +Partitur klassifiziert werden kann. +\abs +Damit sind die Anwendungsm"oglichkeiten +dieser Eingabesprache aber schon weitgehend ersch"opft. +Es werden von den Autoren keine Mittel bereitgestellt, um Partituren +oder andere mehrstimmige Musikst"ucke und Vokalmusik zu erfassen. Auch +f"ur die Notation kompletter einstimmiger Systeme ist das Verfahren in +der vorgestellten Form nicht geeignet, da f"ur viele in der Notenschrift +benutzten Zeichen und Symbole keine Synonyme in der linearen +Eingabemethode angegeben wurden, \zB f"ur Tonst"arkegrade wie crescendo, +descrescendo, Artikulationen oder Wiederholungen. +Es fehlen auch Angaben, ob +mehrzeilige Eingaben m"oglich sind und ob diese zeilenweise oder an +einem St"uck eingegeben werden m"ussen. Zumindest wurden dar"uber in den +Ver"offentlichungen der beiden Autoren keine Angaben gefunden. +Insgesamt l"a\3t der einfache Aufbau dieses Eingabeverfahrens aber +eine +Erweiterung zu, so da\3 es auch f"ur anderweitige Anwendungen benutzt +werden kann. +\abschnitt\abschnitt +Eine ganz andere Vorgehensweise benutzt Leland Smith \lit{\Smith} bei +dem von ihm entwickelten \Ev. +\abschnitt +\subheading{1.4.2 Verfahren zur Noteneingabe von L. Smith} +Smith besch"aftigt sich in seiner Arbeit mit dem automatisierten +Notensatz. Deshalb beschreibt er neben einer \Em\ auch die +Weiterverarbeitung der eingegebenen Daten und wie eine Ausgabe +angefertigt werden und aussehen kann. +\abs +Um eine Vorstellung "uber die Art des \Ev s zu gewinnen, wird vor der +Beschreibung wieder ein Beispiel, das aus der Computer--Eingabe und der +entsprechenden Notation in Notenschrift besteht, angegeben. +Die dargestellte Notenschrift entspricht allerdings nicht der Ausgabe +von Smith, sondern wurde mit dem Verfahren von A. Steinbach \lit{\Steinb} +erstellt. +\eject +% +% +%\abs +$$\bunch +\hbox{TR/K2S/4 4/D5//E/R/M/F///B4/E5/G/M/G/F/E/D/E/F/M/F/E/D/E/ +F/M/$*$}\\ +\hbox{4./8/4//4./8 x 6/4/8///4/8/16//4/2$*$}\\ +\hbox{7 9/ 16 18$*$}\\ +\hbox{7 9 2/ 10 11 1/ 15 16 1/ 15 18 2$*$}\endbunch$$ +\vskip-0.5cm +\par +{\hsize15cm +\parindent0pt +\beginsong +\vio\D\meter4/4% +\v6\.1\a6\v7\pv\|\v8\.1\a8\a8% +\group{\\{\a4}\\{\a7}\\{\a9}}{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}}{\\{9}\\{8}}\uslur12\go\a7\a6\a7% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\go\v7\h8\doublebarline +\endsong} +\vskip -1.cm\abs +% +%Smith S. 303 +% +An diesem Beispiel ist die Struktur der Eingabedatei erkennbar. Sie ist +in verschiedene Abschnitte unterteilt, die jeweils andere Informationen +zu den Zeichen der Notenschrift enthalten. Au\3erdem mu\3 die Eingabe +zeilenweise erfolgen, \dh das Ende einer Notenzeile wird bei der Eingabe +f"ur den Computer durch ein besonderes Zeichen, einen Stern, +gekennzeichnet. +Einzelne Informationen zu einem Zeichen, die zu einer Datengruppe +geh"oren, sind bei der +Computer--Eingabe durch Schr"agstriche voneinander getrennt. Falls eine +Angabe zu einem Zeichen mit der vorhergehenden +identisch ist, so kann diese weggelassen werden, der trennende +Schr"agstrich mu\3 aber auf jeden Fall geschrieben werden. +\abs +Der erste Datenabschnitt enth"alt in codierter Form Angaben zum +Notenschl"ussel, zur Ton-- und Taktart. Darauf folgen die zur Melodie +geh"orenden Noten, angegeben durch ihren Namen (Buchstabe) und die +Oktave (Zahl), die sich an der Klaviertastatur orientiert. +Danach werden in einer neuen Zeile die Informationen "uber die zu den +Noten geh"orenden Tondauern gegeben, indem die Dauer durch eine ganze +Zahl und eventuell vorkommende Punktierungen durch Punkte dargestellt +werden. +\abs +Im n"achsten Eingabeabschnitt werden die zu verbalkenden Noten +angegeben. Dazu m"ussen die Noten einer Zeile durchnummeriert werden. +Die Eingabe enth"alt dann f"ur jede Balkengruppe jeweils die Nummer der +ersten und letzten Note, die zu der Gruppe geh"oren. +\abs +Als n"achstes k"onnen Angaben zu Akzentuierungen gemacht werden. Im +obigem Beispiel kommen allerdings keine vor, deshalb entf"allt dort +diese Zeile. Sie mu\3 aber nicht durch eine Leerzeile ersetzt werden. +\abs +Zuletzt werden genauso wie bei den Verbalkungen die Noten angegeben, +die durch einen Bogen verbunden werden sollen. Jeder durch +Schr"agstrich getrennte Informationsteil enth"alt au\3er der Nummer f"ur +die erste und letzte Note noch eine Zahl, die die Kr"ummung des zu +zeichnenden Bogens angibt. +\abs +Mit diesem \Ev\ k"onnen ebenfalls Partituren und Vokalmusik eingegeben +werden. Zus"atzlich zu der Noteneingabe wird f"ur Vokalmusik +der Liedtext zusammen mit Angaben zur +Positionierung der Silben notiert. +% +% +$$\bunch \hbox{KY/-/RI/-/E,/KY/-/RI/-/E . . . }\\ +\hbox{1/1.6/2/2.6/3/4/4.7/5/ ....}\endbunch$$ +\par\vskip-0.2cm +{\hsize15cm +\universal +\nointerlineskip\beginsong +\vio\D\meter4/4% +\_{KY - }{\v6\.1}\_{RI - }{\a6}\_{E,}{\v7}\pv\|% +\_{KY - }{\v8\.1}\_{RI - }{\a8}\_{E}{\a8}% +\group{\\{\_{E}{\a4}}\\{\a7}\\{\_{-}{\a9}}} +{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}} +{\\{9}\\{8}}\uslur12\_n{ LE - }\hskip20pt{\gluebrule}\go\_{I-}{\a7}% +\_c{SON,}{\a6}\_{E - }{\a7}% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\_n{ LE\hskip10pt-\hskip10pt -} +{\go}\_{I - }{\v7}\_c{SON.}{\h8}\doublebarline +\endsong} +\vskip -0.4cm\abs +%smith S.305 +% +% +Unter Verwendung der beschriebenen Eingabe wird nun die +genaue +Position der Zeichen im Notenliniensystem festgelegt. Dazu wird das +Liniensystem in horizontaler wie vertikaler Richtung mit einer Skala +versehen. Die Positionsangaben m"ussen f"ur jedes Zeichen und Symbol, +also f"ur Notenkopf, Notenhals, Punktierungen, Balken, Bogen, +Akkorde, Liniensystem, Pausen usw., gesondert berechnet und +gespeichert werden. +\abs +Mit dieser Methode wird eine optisch ansprechende Ausgabe erreicht, die +Druckqualit"at hat. St"orend erscheint dabei aber der benutzte +Schrifttext, der im Gegensatz zur Notenschrift nicht gut aussieht. +\abs +Das Verfahren von L. Smith kann zur Eingabe aller Musikst"ucke in +traditioneller Notation benutzt werden: f"ur einstimmige und +mehrstimmige Systeme, Partituren und Vokalmusik. Die Art der Eingabe +ist schnell erlernt und einfach, wird aber durch die Verwendung +verschiedener Informationszeilen +sehr aufwendig und umst"andlich. +Ebenfalls negativ erscheint die Tatsache, da\3 eine zeilenweise +Eingabe notwendig ist. +Zus"atzlich werden an einigen Stellen (\zB bei Liedern mit Text) au\3er +Angaben zur Funktion der Zeichen noch Positionsangaben f"ur die +Eingabedatei ben"otigt. Durch diese Notationsform geht die +"Ubersicht "uber die Gesamtstruktur des Musikst"ucks, die die +Notenschrift besitzt, und die Lesbarkeit verloren. +\abschnitt\abschnitt +Ein Verfahren, in dem verschiedene Eingabedateien zur Festlegung der +musikalischen Daten benutzt werden, wird in der Arbeit von R. Werner +\lit{\Werner} dargestellt. +Allerdings kann die dort beschriebene Methode nur in sehr groben +Z"ugen charakterisiert werden, weil sie sehr aufwendig und vielschichtig +ist. Eine genaue Beschreibung w"are deshalb an dieser Stelle zu +umfangreich. +\abschnitt +\subheading{1.4.3 EDM} +(Eingabemethode f"ur Daten der Musik) +Diese \Em\ wurde mit dem Ziel entwickelt, eine umfangreiche und +vollst"andige Musikanalyse aufgrund der Eingabedaten f"ur den Computer +durchf"uhren zu k"onnen. +Die vorgeschlagene Methode benutzt drei verschieden strukturierte +Dateien, um die \m en Informationen abzuspeichern. Jede der drei Dateien +entspricht einer Art, wie die notenbildliche Partitur gelesen werden +kann. +\abs +Eine Datei gibt den horizontalen Verlauf der Musik wieder. Sie +enth"alt Informationen zu allen Noten. +In der n"achsten Datei werden die Daten der T"one, die zusammen +erklingen, gespeichert, \dh sie repr"asentiert die vertikalen Ebene. +Eine weitere Datei beinhaltet alle Strukturen des zeitlichen Ablaufs, +die f"ur die beiden anderen Dateien ben"otigt werden. +Mit diesen drei kurz beschriebenen Dateien wird eine Musikanalyse +m"oglich, deren Vorgehensweise +in der Arbeit von R. Werner beschrieben wird. Da eine n"ahere +Erl"auterung den Rahmen einer Kurzbeschreibung sprengen w"urde, folgt +nun eine Beispielcodierung. Daf"ur wird aus der Vielzahl der m"oglichen +Dateien die ausgew"ahlt, die Informationen zu den Noten enth"alt. +Zur Notation einer Partitur reicht dies aber nicht aus. +% +% +$$\bunch\hbox{F4\T S\T F$*$B5$*<$4; $\sharp$F5\T A4\T\@ B5\T=; +E6\T?1V2?A\T.; P\T A$*$H;}\endbunch$$ +\par\vskip-0.4cm +{\hsize9.5cm\parindent5cm\nointerlineskip +\loose% +\beginsong\vio\C% +\s1\x8\s8\s3\b{11}\s{11}\a{14}\pa\ph\hfill\hbox{}\endsong} +% +\vskip -0.6cm\abs +Die \Em\ bietet die M"oglichkeit, Partituren, die +in hergebrachter Notation +vorliegen, vollst"an\-dig zu codieren und damit eine Vielfalt von +Anwendungsm"oglichkeiten. Obwohl +bei der Entwicklung einer geeigneten Codierung +versucht wurde, diese weitgehend an den musikalischen +Sprachgebrauch anzupassen, +wird durch die Vielzahl der einzugebenden Daten und +Einzelinformationen zu einem Zeichen die Noteneingabe erschwert. +Au\3erdem geht durch die Aufgliederung in drei Dateien mit +verschiedenen Informationsstrukturen die "Ubersicht "uber das +Musikst"uck verloren. +Diese Aussage ist schon anhand obigen Beispiels deutlich geworden. +Um den Gesamtbezug wiederzugewinnen, m"u\3ten +die Dateien parallel gelesen werden. +\abschnitt\abschnitt +Eine letzte Eingabemethode ist +erst in j"ungster Zeit von John Gourlay in der Zeitschrift +``Communications of the ACM'' +ver"offentlicht worden \lit{\Gourlay}. +\abschnitt +\subheading{1.4.4 Sprache zur Noteneingabe von J. Gourlay} +Gourlay beabsichtigte wie L. Smith mit der Entwicklung einer +Noteneingabesprache f"ur den Computer, eine M"oglichkeit zur +Automatisierung des Notensatzes zu schaffen. +\abs +Bei der Verwirklichung dieser Absicht sind seiner Ansicht nach zwei +Ziele im Auge zu behalten: +das Computer--System soll Druckvorlagen in gleicher Qualit"at wie +gestochene liefern, gleichzeitig auf jeden Computer "ubertragbar sein +und nur ein Minimum an Hardware erfordern, um die Kosten +gering zu halten +und die Anwendungsm"oglichkeiten breit zu f"achern. +\abs +% +% +% +Um dies zu erreichen, schl"agt Gourlay vor, +die Eingabesprache mit Hilfe des von Knuth +entwickelten \Tss s \TeX\ +und einiger zus"atzlicher +Programmabschnitte zu verarbeiten. +\abs +F"ur die Eingabesprache von Gourlay +existiert bisher nur eine Beschreibung der Syntax in +Backus--Naur--Form. An diesem Syntaxdiagramm l"a\3t sich erkennen, da\3 +die Eingabesprache f"ur die Anwendung von \TeX\ in Frage kommen k"onnte. +"Ahnlich wie bei \TeX\ werden +Kontrollw"orter bzw. Klammern benutzt, +um anzugeben, was mit dem folgenden +Text geschehen soll bzw. um zusammengeh"orenden Text zu kennzeichnen. +\abschnitt +\leftskip35pt +{\tt title} ``Beispiel'' {\tt system} ({\tt staff} one) +\abs{\tt block} +(voice ({\tt measure} ({\tt clef trebleclef key} 2{\tt sharps meter}4/4 +\abs +(4.;D5) (8;D5) (4;E5) (4))\abs +{\tt measure} ((4.;F5) (8;F5) (8;F5) +{\tt beam slur} ((8;B4) (8;E5) (8;G5))) +\abs +{\tt measure} ({\tt slur} ((8;G5) (4;F5)) (8;E5) (8;D5) (8;E5)\abs +{\tt begin} name1 ({\tt slur}) {\tt begin} name2 ({\tt tie}) +(4;F5))\abs +{\tt measure} ({\tt beam} ((8;F5) {\tt end} name2 (16;E5) (16;D5) +{\tt end} name1) (4;E5) (2;F5)\abs {\tt barline final}))) +%Smith S.303 mit verbundenen Achtel-Noten +\par +\leftskip0pt +\par +{\hsize15cm +\parindent0pt +\beginsong +\vio\D\meter4/4% +\v6\.1\a6\v7\pv\|\v8\.1\a8\a8% +\group{\\{\a4}\\{\a7}\\{\a9}}{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}}{\\{9}\\{8}}\uslur12\go\a7\a6\a7% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\go\v7\h8\doublebarline +\endsong} +\vskip-0.6cm\abs +% +Falls dieses System zur Anwendung kommt, k"onnen mit seiner +Hilfe alle Arten von Musik in traditioneller Notation verarbeitet +werden. Die Notenschrift wird mit dieser Eingabesprache fast +vollst"andig +codiert, fehlende Vorschriften k"onnten erg"anzt werden. Dadurch +wird auch eine Vielzahl von Anwendungen au\3er dem automatisierten +Notensatz m"oglich gemacht. +\abs +Der Aufbau der Sprache ist komplizierter als \zB bei Brook und +Gould. Dies liegt +daran, da\3 Brook und Gould nicht die gesamte +Notenschrift in eine +lineare Eingabe "ubertragen haben. Da die Eingabesprache von Gourlay dem +Sprachgebrauch der Musiker angepa\3t wurde, ist sie nach kurzer Zeit +trotzdem leicht zu handhaben und einpr"agsam. So deuten \zB die +auftretenden Kontrollw"orter immer an, auf welche Art der folgende +Text verarbeitet werden soll und welche Bedeutung dieser f"ur das +Musikst"uck hat. +\abs +Gourlay kommt in seiner Arbeit der Vorstellung einer optimalen \Em\ +schon sehr nahe, allerdings hat er nicht ausgef"uhrt, wie er sich eine +Weiterverarbeitung mit \TeX\ +vorstellt. +Seine Methode beschreibt die bisher vollst"andigste und gleichzeitig +eing"angigste +Codierung. Falls eine Implementierung gelingen sollte, bietet sie im +Vergleich mit den anderen \Ev\ die vielf"altigsten +Verwendungsm"oglichkeiten. +\abschnitt +Der "Uberblick "uber die \Ev\ verschiedener Autoren, die jeweils eine +andere Methode zur Darstellung der Eingabe verwendeten, zeigt, da\3 +jedes dieser +Verfahren, das von Gourlay ausgenommen, +in mindestens einem Punkt den Anspr"uche an eine +Eingabesprache (siehe 1.3) nicht gen"ugen. +\abs +Im Prinzip h"atte diese Arbeit von der +Eingabesprache von Gourlay ausgehen k"onnen. +Dazu w"aren einige Erweiterungen bzw. Ab"anderungen notwendig +gewesen. Allerdings +erfolgte die Ver"offentlichung erst, als dieser +Teil der Arbeit bereits ausgearbeitet und eine Implementierung +der Noteneingabesprache erfolgt war. +Da die anderen vorgestellten Eingabemethoden zu mangelhaft schienen, +war es notwendig, ein neues Verfahren zu entwickeln, das diese +Bedingungen erf"ullt und universell anwendbar ist. Dabei soll nat"urlich +auch die Einbettung in das \Tss\ \TeX\ ber"ucksichtigt werden, denn das +ist ein Teil der Aufgabenstellung der vorliegenden Arbeit. +\absatz +Die Aufgabe der anschlie\3enden Kapitel ist es, die entwickelte +Eingabesprache exakt zu definieren. Dies geschieht in zwei Schritten: +zuerst wird mit der Beschreibung der Syntax die "au\3ere Form +pr"azisiert (Kapitel 2), danach wird auf die Semantik eingegangen und +die Wirkungsweise und Bedeutung einzelner Kommandos n"aher +erl"autert (Kapitel 3). +\abschnitt +\vfill\eject diff --git a/macros/mtex/documentation/mdoc10.tex b/macros/mtex/documentation/mdoc10.tex new file mode 100644 index 0000000000..65b0256017 --- /dev/null +++ b/macros/mtex/documentation/mdoc10.tex @@ -0,0 +1,205 @@ +\heading{Einf"ugen von Texten und Spielanweisungen} +Neben den bisher behandelten Notenschriftelementen m"ussen Texte und +einige andere Zeichen, wie Vortragsbezeichnungen, +Artikulationsanweisungen und Dynamikangaben, in das Notenbild eingef"ugt +werden. +Satztechnisch sind dabei zu unterscheiden: +\item{1)}\disp{Artikulations}zeichen an Noten, +\item{2)} Texte unterhalb des Liniensystems und +\item{3)}Texte oberhalb des Liniensystems. + +Die Artikulationszeichen betreffen die musikalische Ausf"uhrung einer +einzelnen Note. Sie werden also direkt an einer Note angebracht. +Texte unterhalb des Systems k"onnen Angaben zur \disp{Dynamik} sein, +d.h. Tonst"arkegrade (laut, leise) oder "Ubergangsbezeichnungen +(Crescendo, Decrescendo), aber auch Gesangstexte. Texte oberhalb des +Systems geben meistens Vortragsbezeichnungen (Allegro, Moderato), +Orientierungsziffern sowie +Verzierungen einer Note (verschiedene Triller-Zeichen) an. Bei +Vokalmusik werden oft auch Begleitakkorde oberhalb des Systems notiert. + +\subheading{Regeln f"ur das Einf"ugen von Texten} +\item{T1)}Mit Ausnahme der Gesangstexte werden alle Texte so plaziert, +da\3 sie keinen zus"atzlichen horizontalen Raum ben"otigen. Die Texte +oberhalb werden im Abstand von \verbatimon|\nhh| von der Notenlinie +gesetzt, falls dadurch keine "Uberschneidung mit schon gesetzten Noten +auftritt. In diesem Fall wird der Text vertikal in den freien Raum +"uber das Hindernis gesetzt. Ebenso werden die Dynamikangaben +in den freien Raum unterhalb des Systems unter das Hindernis plaziert. +\item{T2)}Gesangstexte m"ussen auf einer horizontalen Linie unterhalb +des Systems ausgeschlossen werden. Da keine M"oglichkeit besteht, +vertikal in Freiraum auszuweichen, kann es vorkommen, da\3 diese Texte +zus"atzlich horizontalen Raum erfordern. Sie m"ussen daher "ahnlich wie +Hunks behandelt werden. Der Text mu\3 so unter der Note plaziert werden, +da\3 ein Erweitern des Raumes zwischen den Noten vermieden wird. +\item{T3)}Alle Artikulationszeichen m"ussen, falls keine mehrstimmige +Notation in einem System vorliegt, am Notenkopf und zwar bei aufw"arts +gestielten Noten direkt unterhalb, bei abw"arts gestielten Noten direkt +oberhalb des Notenkopfes angebracht werden. Dabei m"ussen die Zeichen so +plaziert werden, da\3 sie deutlich erkennbar sind. M"ussen sie innerhalb +des Liniensystems positioniert werden, so kann dies also nur in einem +benachbarten Zwischenraum geschehen. In jedem Fall werden sie horizontal +bzgl. des Notenkopfes zentriert. +\item{}Bei mehrstimmiger Notation in einem +System m"ussen die Artikulationszeichen der Oberstimme wie auch die +Bogen immer oberhalb, die Artikulationszeichen der Unterstimme +unterhalb der Noten (d.h. eventuell auch "uber bzw. unter dem Endpunkt +des Notenhalses) angebracht werden. +\Beispiel +%Artikulationszeichen +{\loose +\hsize9cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C{\stac\h5}{\staccatissimo\h8}\tenuto\h1\h2 +\lchord\h5\h{-2}\endchord% +\two{\group{\\{\a6}\\{\a6}}{\\{6}\\{6}}\ubeam12\go} +{\group{\\{\a3}\\{\a3}}{\\{3}\\{3}}\lbeam12\go}% +\=\endsong} +\goodbreak +\endBeispiel +\subheading{Textunterlage} +F"ur die genaue Positionierung der Gesangstexte unter einer Note oder +einer Notengruppe gibt es keine Regeln. Sie ist im wesentlichen davon +abh"angig, ob der jeweilige Text ein Teil eines mehrsilbigen +oder eines einsilbigen Wortes ist. Die mehrsilbigen W"orter werden in der +Regel so plaziert, da\3 das Wort nicht zu sehr auseinandergerissen wird. +% +Ziel ist es jedoch, da\3 der Text m"oglichst wenig das Notenbild st"ort. +Das Erweitern des Raumes zwischen den Noten soll vermieden werden. + +Abh"angig vom zur Verf"ugung stehenden Raum kann der Text unter +der Note (ohne Beachtung eventuell vorhandener Hunks) zentriert, +linksb"undig oder auch rechtsb"undig unter der Note ausgeschlossen +werden. +Dazu wurde ein Algorithmus entwickelt, der die Textverteilung automatisch +vornimmt. F"ur den Benutzer ist es jedoch m"oglich im Einzelfall auf +den Ausschlu\3 einzuwirken und im Fall eines nicht akzeptablen +automatischen Ausschlusses +selbst zu bestimmen, wie der Text gesetzt werden +soll. + +\def\wt{\ifmmode w_t\else$w_t$ \fi} +\def\wn{\ifmmode w_n\else$w_n$ \fi} +\def\wg{\ifmmode w_g\else$w_g$ \fi} +Sei im folgenden \wt die Breite des zu unterlegenden Textes, +\wn die Breite der Notenbox (ohne Glue und ohne Hunks) +und \wg die nat"urliche +Breite des zugeh"origen Glues. +Dann gibt es folgende M"oglichkeiten: +\medskip + +\def\vt#1{\vtop {\setbox0=\hbox{Parameter\quad}% + \advance\hsize-\wd0#1\par}} +\halign{#\hfil&#\hfil\cr +\strut Parameter\quad&Aktion\cr +\noalign{\hrule} +\strut n&\vt{\strut\wt wird nicht beachtet. Der +Text wird linksb"undig unter der Note ausgeschlossen. Dies ist +platzsparend. Es besteht jedoch die Gefahr der Text"uberlappung.}\cr +\strut l&\vt{\wt bestimmt den Raum, den die +Note(n) einnimmt (einnehmen).}\cr +\strut c&\vt{der Text wird ohne Beachtung von \wt unter der Note +zentriert.}\cr +\strut r&\vt{der Text wird auf $\wt + \wg $ rechtsb"undig, +links"uberlappend gesetzt, wobei nicht ber"ucksichtigt wird, ob der Text +mit vorherigem Text "uberlappt.}\cr} +\medskip + +Bei der automatischen Textverteilung wird +\item{n}verwendet, falls $\wt - \wn \leq 0$, +\item{c}verwendet, falls $0< \wt-\wn \leq \wg$, +\item{r}verwendet, falls $\wg<\wt-\wn\leq 2\wg$, +\item{l} in allen anderen F"allen. + + +F"ur Text oberhalb der Notenzeile gelten f"ur den automatischen Satz +die gleichen Regeln. +Vertikal wird der Text, falls die H"ohe der Notenbox +nicht gr"o\3er ist, |\nhh| oberhalb der 5. Notenlinie gesetzt, sonst +oberhalb der Note. Der Text wird also nicht notwendig auf einer Linie +ausgeschlossen, sondern kann vertikal verschoben werden, falls dies +erforderlich sein sollte. +Diese Variabilit"at ist auch f"ur die Dynamikangaben unterhalb +der Notenlinien erforderlich. Durch Angabe des Parameters +v wird der Text nicht auf der Textlinie ausgeschlossen, sondern direkt +unterhalb der Grundlinie der Notenzeile, falls keine "Uberlappung +mit der zugeh"origen Note auftritt. + +Der Gesangstext wird, falls nicht anders angegeben, in +8-Punkt Schriftgr"o\3e gesetzt, da dies platzsparender ist. +Die Schriftlinie befindet sich eine Rastralh"ohe +unterhalb der Grundlinie. +Der Abstand der Schriftlinie von der Grundlinie +ist im Parameter |\textline| gespeichert. +Da die verschiedenen Textsilben jeder Note einzeln angeheftet sind, kann + eine eventuelle "Uberschneidung mit anderen Notenschriftelementen nicht +vermieden werden. In einem solchen Fall mu\3 der Wert des Parameters +|\textline| erh"oht werden. +Als Beispiel sei die in der Arbeit zur Noteneingabe \lit\Schofer +\ oft verwendete Notenzeile angegeben \lit\smith. +\par\vskip-0.5cm +{\parindent=0.5\iindent +\universal +\beginsong +\vio\D\meter4/4% +\_{KY - }{\v6\.1}\_l{RI -}{\a4}\_{E,}{\v7}\pv\|% +\_{KY - }{\v8\.1}\_l{RI -}{\a8}\_{E}{\a8}% +\group{\\{\_{E}{\a4}}\\{\a7}\\{\_{-}{\a9}}} +{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}} +{\\{9}\\{8}}\uslur12\_n{ LE - }{\gluebrule}\go\_l{I-}{\a7}% +\_l{SON, }{\a6}\_{E - }{\a7}% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\_n{ LE\quad-\quad -}{\gluebrule}% +{\go}\_{I - }{\v7}\_c{SON.}{\h8}\doublebarline +\endsong} +\vskip-1.2cm +Beispiele f"ur die Textunterlage finden sich auch im Anhang A. +\subheading{Positionierung der Artikulationszeichen} +Neben Legatobogen unterscheidet man in der Artikulation \tex{tenuto} +(gehalten), das durch einen langgezogenen Strich gekennzeichnet wird, +von \tex{staccato} (getrennt), \tex{staccatissimo} (stark getrennt), das +durch einen Punkt bzw. durch einen Keil gekennzeichnet wird, und +\tex{portato} (getragen), das durch \tex{staccato} bzw. +\tex{tenuto}-Zeichen zusammen mit Legatobogen dargestellt wird. Da die +Artikulationsanweisung oft mehrere aufeinanderfolgende Noten betrifft, +wurde f"ur die L"osung des Plazierungsproblems folgende Vorgehensweise +gew"ahlt. Eine Box wird mit dem zu setzenden Zeichen belegt und, solange +diese nicht durch eine leere Box ersetzt wird, den Notationsregeln +entsprechend allen Noten angeheftet. +Die Box wird nur durch eine leere Box ersetzt, +falls +dies ausdr"ucklich angegeben wird (durch Eingabe des Kommandos |\noaccent +| oder wenn die Klammerebene, in der die +Box belegt wurde, verlassen wird. +\Beispiel +\item{}Durch die Eingabe von +\begindisplay +|{\stac|\\|}|\ +\enddisplay +oder durch +\begindisplay +|\stac|\\|\noaccent|\ +\enddisplay +erh"alt man jeweils das gleiche Ergebnis: + +{\loose +\hsize5cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong \vio \C {\stac\v5\v1}\v7\|\endsong} +\vskip-1cm\ +\item{} +Das Kommando |\stac| gilt also, obwohl nur einmal angegeben, f"ur +die ersten beiden Noten. Dabei wird der Punkt "uber dem Notenkopf der +ersten Note und unter dem Notenkopf der zweiten Note, den Notationsregeln +entsprechend, plaziert. +Vor dem Setzen der dritten Note wurde die Box, die +den Punkt enth"alt, durch eine leere Box ersetzt. Diese Note erh"alt also +keinen Staccato-Punkt. +\endBeispiel + +\vfill\eject diff --git a/macros/mtex/documentation/mdoc11.tex b/macros/mtex/documentation/mdoc11.tex new file mode 100644 index 0000000000..f9ef11754d --- /dev/null +++ b/macros/mtex/documentation/mdoc11.tex @@ -0,0 +1,283 @@ +\heading{Mehrstimmiger Notensatz} +Abschlie\3end soll auf die Problematik mehrstimmiger Notation im +automatischen Notensatz eingegangen werden. +\subheading{Regeln f"ur die mehrstimmige Notation} +Die Regeln hierzu sind im wesentlichen schon in den vorangegangenen +Kapiteln aufgef"uhrt worden. +Neben einigen Notationsvereinbarungen (siehe Kapitel \adchap{-3} N4d und +N9b und Kapitel \adchap{-2} P2), gilt als grunds"atzliche Regel, +da\3 alle T"one, die zur gleichen Zeit einsetzen, untereinander zu +notieren sind. Einige Ausnahmen ergeben sich bei mehrstimmiger Notation +in einem Zeilensystem. In diesem Fall kann es vorkommen, da\3 zur +Verdeutlichung der Stimmf"uhrung einige Noten nach links oder rechts +ausweichen m"ussen, wobei in einem solchen Fall der Ausschlu\3 vom +vorgegebenen Schema abweicht. +\Beispiel +{\hsize5cm +\parindent2\iindent\advance\hsize2\iindent +\beginsong\vio\C\two{\group{\\{\hskip\seminhh +\a1}\\{\advance\sk-\seminhh\a5}}{\\{1}\\{5}}\ubeam12\go}{% +\group{\\{\a3}\\{\a5}}{\\{3}\\{5}}\lbeam12\go} {\rm oder}\two{\group{% +\\{\a5}\\{\a5}\\{\a5}\\{\a5}}{\\{5}\\{5}\\{5}\\{5}}\ubeam14\go}{% +\hskip1.5\nhw\h5}\|\endsong} +\vskip-1cm +\endBeispiel +Da die Noten, abgesehen von den obigen Ausnahmen, untereinander notiert +werden m"ussen, mu\3 der gleiche zus"atzliche Raum, der in einer Stimme +f"ur Hunks ben"otigt wird (z.B. Versetzungszeichen), in den anderen +Stimmen gleicherma\3en ber"ucksichtigt werden. + +F"ur den korrekten Ausschlu\3 mehrstimmiger Notenliteratur reichen die +in Kapitel~\adchap{-4} angegebenen Aus\-schlu\3schemata +im allgemeinen nicht aus, da diese gerade so gew"ahlt sind, da\3 keine +Linearit"at bzgl. der Tondauer besteht. + +\Beispiel Der Raum, den eine Viertel Note einnimmt, ist im allgemeinen +kleiner als der Raum, den zwei Achtel Noten einnehmen. Sollen diese +Noten rhythmisch korrekt untereinander notiert werden, so ist also der +Viertel Note ein gr"o\3erer Raum zuzuordnen. +\par +{\hsize = 4cm +\parindent2\iindent\advance\hsize2\iindent +\beginsong\vio\C\meter3/4\v1\a1\a1\v1\|\endsong +\vskip -1cm +\beginsong\vio\C\meter3/4\v1\v1\a1\a1\|\endsong +} +\vskip -1cm +\item{}Dies ergibt in zweistimmiger +Notation\par +{\hsize = 5cm +\parindent2\iindent\advance\hsize2\iindent +\beginsong\vio\C\meter3/4\two{\v1}{\v1}\two{\a1\a1}{\v1}% +\two{\v1}{\a1\a1}\|\endsong} +\vskip -1cm +\item{}Es ist also in zweistimmigen Fall +mehr horizontaler Raum erforderlich, + obwohl im normalen Satz der insgesamt +ben"otigte Raum im Einzelfall gleich ist. +\endBeispiel + +\subheading{Vertikale Ausrichtung bei D.A. Gomberg} +Als einziger gibt Gomberg (\lit{\gomb, S.70--78}) ein Verfahren +f"ur eine rhythmische (d.h. vertikale) Ausrichtung der Noten an. Dabei +werden sowohl unregelm"a\3ige Unterteilungen von Notenwerten (z.B. +Triolen) als auch das Einf"ugen von Hunks ber"ucksichtigt. Dieses +Verfahren ist kompliziert, jedoch anwendbar auf beliebig viele Stimmen +in mehreren Systemen. Dabei wird eine weitere (imagin"are ) Stimme --- +der sogenannte \disp{Spine} (R"uckgrat) --- konstruiert, die mit den +einzuf"ugenden Hunks versehen ist, nach der alle "ubrigen Stimmen +rhythmisch ausgerichtet werden k"onnen. + +\subsubheading{Konstruktion des Spine} +F"ur Noten, die nicht unregelm"a\3ig unterteilt sind, wird der Spine wie +folgt iterativ konstruiert. +Zur Initialisierung wird eine Stimme als Spine ausgezeichnet. Dieser +Spine wird nun jeweils mit einer weiteren Stimme verglichen und nach +folgendem Verfahren ver"andert. +Sei $m$ die Anzahl der Noten des Spine und \folgi {\bar q}im die +Notenwerte dieser Noten, die im folgenden durch Br"uche +dargestellt seien, d.h. $\folgi {\bar q}im \in \qz^+$. +(Einer Viertel entspricht demnach der Wert $\frac14$, +einer Viertel mit Wertpunkt $\frac38=\frac14+\frac18$.) +Seien die Notenwerte der zu vergleichenden +Stimme durch die Folge $\folgi qjn \in \qz^+$ gegeben. +Dann lautet der Algorithmus: +\item{I)}Initialisierung: $i:=1$, $j:=1$. +\item{II)}Gilt $\bar q_i =q_j$, erh"ohe $i$ und $j$. +\item{III)}Gilt $\bar q_i< q_j$, dann setze $q_j := q_j-\bar q_i$, +iteriere $i$ und fahre mit V) fort. +\item{IV)}Aufspaltung des Spine (\disp{splitting}): Gilt + $\bar q_i> q_j$, dann ersetze $\bar q_i $ durch die beiden +Werte $Q_1=q_j$ und $Q_2=\bar q_i-q_j$, +wobei der neue Spine nun $m+1$ +Elemente besitzt und das $i+1$-te Element gerade $Q_2$ ist. +%Iteriere also $i$ und $j$. +\item{V)} Gilt $j>n$ , dann HALT, sonst fahre mit II) fort. + +Es ergibt sich hierbei die Frage, ob garantiert ist, da\3 der oben +beschriebene Proze\3 der Aufspaltung des Spine immer ``legale'' +Notenwerte ergibt, d.h. Notenwerte, die durch eine Note unter +Zuhilfenahme von Wertpunkten dargestellt werden k"onnen. +Diese Frage ist jedoch zu verneinen: ``legale'' Notenwerte sind +nicht abgeschlossen unter Subtraktion. + +Gomberg f"uhrt dazu folgendes Beispiel an: + + +\hbox to \hsize{% + \hfil + \vbox{% + \hbox{% + \hbox to 2cm{$\bar q:$\hfil}% + \vtop{\hsize=50mm% + \beginsong\vio\C + \hbox to 19mm{\s1\.2\hfil}% + \hbox to 4mm{\d1\hfil}% + \hbox to 15mm{\v1\.1\hfil}% + \endsong + }% + \hfil}% + \vskip-10mm% + \hbox{% + \hbox to 2cm{$ q:$\hfil}% + \vtop{\hsize=50mm% + \beginsong\vio\C + \hbox to 6mm{\z1\hfil}% + \hbox to 28mm{\a1\.2\hfil}% + \hbox to 4mm{\v1\hfil}% + \endsong + }% + \hfil}% + \vskip-10mm + \hbox{% + \hbox to 2cm{neues $\bar q:$\hfil}% + \vtop{\hsize=50mm% + \beginsong\vio\C + \hbox to 6mm{\z1\hfil}% + \hbox to 13mm{${\phantom{x}}^{\tenrm ?}$\hfil}% + \hbox to 4mm{\d1\hfil}% + \hbox to 11mm{\a1\hfil}% + \hbox to 4mm{\v1\hfil}% + \endsong + }% + \hfil}% + }% + \hfil +}% +\vskip -1cm + + +Sei die erste Zeile als Spine ausgezeichnet, dann ist $\bar q = +\frac7{64},\;\frac1{64},\;\frac{24}{64} $ und +$q=\frac2{64},\;\frac{14}{64},\;\frac14$. F"ur den neuen Spine gilt +nun nach dem Algorithmus: $\bar q_1 = \frac1{32} $, +$\bar q_2=\frac{7}{64}-\frac2{64}=\frac5{64}$, +$\bar q_3=\frac1{32}$, $ \bar q_4=\frac18$ und +$\bar q_5=\frac14$. +Dabei ist $\bar q_2$ kein legaler Notenwert, denn dieser Notenwert l"a\3t +sich nur durch "Uberbindung einer Sechzehntel mit einer +Vierundsechzigstel darstellen. In diesem Fall wird diese Note +ausgeschlossen wie eine $\frac6{64}$, d.h. eine mit Wertpunkt versehene +Sechzehntel. + +Anhand des Ausschlu\3schemas kann nun dem Spine der zugeh"orige +Ausschlu\3 zugeordnet und die Noten darunter angeordnet werden. + +Zu bemerken ist, da\3 das oben geschilderte Verfahren +nat"urlich unabh"angig von der Reihenfolge der anzugleichenden Stimmen +ist.\vskip0.5cm +\subsubheading{Unregelm"a\3ige Unterteilungen} +Neben der zweiteiligen Untergliederung der Notenwerte +({\def\beamlist{\\{1-2,}}% +\universal\group{\\{\a0}\\{\a0}}{\\{0}\\{0}}\ubeam12\hskip-\nhh +\go\global\sk=0pt}% +\ ) gibt es +\vadjust{\kern-4pt}% +auch mehrteilige Untergliederungen, z.B. dreiteilige +({\staffheight 3\nhh\small\def\beamlist{\\{1-3,}}% +\group{\\{\a0}\\{\^{3}{\a0}}\\{\a0}}{\\{0}\\{0}\\{0}}\ubeam13\hskip-\nhh +\go}% +\global\sk=0pt\ ). Der +Notenwert einer solchen Triolen-Note entspricht also dem dritten Teil +der Dauer einer Viertel Note: $\frac1{12}$. Gekennzeichnet werden +\vadjust{\kern-4pt}% +unregelm"a\3ige Unterteilungen der Bezugsnote am Balken oder unter einer +Klammer: {\small\setbox2=\hbox{\v0\v0\global\sk0pt}% +\dimen1=\wd2\advance\dimen1 by-\nhh\setbox3\hbox to \dimen1{\vbox{\hrule +\offinterlineskip\hbox to \dimen1{\vrule depth-2pt width0.5pt\hss +\eightpoint 2\hss% +\vrule depth-2pt width0.5pt}}}\vbox{\offinterlineskip +\moveright\nhh\box3\box2} +}. (N"aheres dazu siehe \lit{\ziegen,{\bf 79}f{}f}.) + +Die Unregelm"a\3igkeit wird auch durch einen etwas engeren Ausschlu\3 +verdeutlicht. Der Raum, den eine Achtel Triole einnimmt, unterscheidet +sich also vom Raum, den drei Achtel Noten einnehmen. + +Gomberg verwendet als Ausschlu\3 unregelm"a\3iger Unterteilungen das +n"achst kleinere Ausschlu\3schema, beispielsweise wird + bei ``universellem'' Ausschlu\3 also +``enger'' Ausschlu\3 verwendet +(s. \adchap{-4}.1.1). M"ussen mehrere verschiedene +unregelm"a\3ige Unterteilungen auf einem Notenwert des Spines +ausgeschlossen werden, so wird innerhalb einer solchen ``Nachbarschaft'' +der kleinste Notenwert $\bar a$ ausgew"ahlt und diesem der zugeh"orige +Ausschlu\3 $A$ zugeordnet. F"ur die anderen Notenwerte $\bar a_i$ ergibt +sich dann der Raum, der diesem Notenwert zugeordnet wird, aus der Formel: +$ \Frac A{\bar a}*\bar a_i$. +\subheading{Ausf"uhrung des zweistimmigen Setzens} +Die obige von + D. A. Gomberg vorgeschlagene Vorgehensweise +ist naheliegend +und scheint eine gute M"oglichkeit zu sein, beliebige mehrstimmige +Partituren korrekt zu setzen. Abgesehen von dem Problem, zu den +eingegebenen Noten den passenden Spine zu konstruieren, ergibt sich +jedoch bei der Verwirklichung mit \TeX\ ein weiteres Problem, das die +Anwendung des Algorithmus erschwert. +Mit einem gegebenen Spine k"onnten die einzelnen Noten der Stimmen mit +einigem Aufwand in einer Tabelle plaziert werden. Um den Zeilenumbruch +zu erm"oglichen, m"u\3te also f"ur jedes Spinelement eine Tabelle +angelegt werden, da innerhalb einer gro\3en umfassenden Tabelle kein +Zeilenumbruch m"oglich ist. Dies w"urde zun"achst den variablen Glue +\disp{fest}legen; ein korrekter Ausschlu\3 w"are damit nicht mehr +gew"ahrleistet. Au\3erdem ist eine Verbalkung und eine Plazierung der +Bogen nicht mehr m"oglich, da die Listenverarbeitung in der +vorgestellten Art nicht mehr durchf"uhrbar ist. + +Aus diesen Gr"unden wurde zun"achst nur eine M"oglichkeit +bereitgestellt, einfachere zweistimmige Notenkonstellationen in einem +Zeilensystem, die ohne Spine auskommen, zu setzen. Beispiele sind schon +an einigen Stellen dieser Arbeit demonstriert worden. +Ein mehrstimmiges Setzen von ganzen Nachbarschaften, die nur mit Hilfe +eines Spines gesetzt werden k"onnen, ist noch nicht gegeben. Ohne +zus"atzliches manuelles Eingreifen, d.h. Einf"ugen von weiterem +Ausschlu\3material, erscheinen z.B. die +unten aufgef"uhrten Einzelstimmen +zweistimmig inkorrekt gesetzt: + +{\hsize=8cm +\parindent2\iindent\advance\hsize2\iindent +\beginsong\vio\C +\group{\\{\s7}\\{\s8}\\{\s7}\\{\s9}}{\\{7}\\{8}\\{7}\\{9}}% +\def\beamlist{\\{1-\the\N,}% +\\{1-\the\N,}}\ubeam14\go\hskip20pt +\def\beamlist{\\{1-\the\N,}}% +\group{\\{\a3}\\{\a3}}{\\{3}\\{3}}\lbeam12\go\hskip40pt +\two{\group{\\{\s7}\\{\s8}\\{\s7}\\{\s9}}{\\{7}\\{8}\\{7}\\{9}}% +\def\beamlist{\\{1-\the\N,}% +\\{1-\the\N,}}\ubeam14\go}{% +\def\beamlist{\\{1-\the\N,}}% +\group{\\{\a3}\\{\a3}}{\\{3}\\{3}}\lbeam12\go} \hfill\endsong +}\vskip -1cm +Im Anhang A wurde ein Beispiel eingef"ugt, das zeigt, da\3 das +angegebene Verfahren f"ur viele Musikst"ucke gut anwendbar ist. + +Das zweistimmige Setzen erfolgt nach folgendem Verfahren. Beide +Stimmen werden einzeln wie im einstimmigen Satz unter Ber"ucksichtigung +der Notationsregeln ausgeschlossen. Dann werden die Stimmen linksb"undig +ineinander geschoben. Dabei wird als neuer \verbatimon |\spaceskip| der +aktuelle |\spaceskip| der Stimme gew"ahlt, die mehr horizontalen Raum +erfordert. Zu beachten ist, da\3 eventuelle Versetzungszeichen vor der +Notengruppe wie Vorzeichenakkorde gesetzt werden. +\Beispiel +\par\noindent\vbox{\hsize=8cm +\loose +\parindent2\iindent\advance\hsize2\iindent +\beginsong\vio\C +\group{\\{{\tr\a2}}\\{\x1\s1}\\{\s0}} +{\\{2}\\{1}\\{0}}\def\beamlist{\\{1-3,}\\{2-3,}}% +\ubeam13\lslur23\go +\def\beamlist{\\{1-7,}\\{-2,3-7,}\\{6-7,}} +\x{-5}\n{-1}\two{\group{\\{\s{-1}}\\{\n1\z1}\\{\z0}\\{\z{-1}}% +\\{\z{-2}}\\{\d{-1}}\\{\d{-3}}} +{\\{-1}\\{1}\\{0}\\{-1}\\{-2}\\{-1}\\{-3}}\ubeam17\lslur27\go}{\a{-5}}\|% +\endsong} +\vskip -1cm +\endBeispiel +Unregelm"a\3ige Unterteilungen wurden bisher noch nicht ber"ucksichtigt, +da zum korrekten Setzen ein weiterer Zeichensatz f"ur die Klammerung +eingef"uhrt werden mu\3. Das Setzen von Notengruppen dieser Art ergibt +im einstimmigen Satz jedoch keine weiteren satztechnischen Probleme. +\par + +\vfill\eject diff --git a/macros/mtex/documentation/mdoc12.tex b/macros/mtex/documentation/mdoc12.tex new file mode 100644 index 0000000000..8456673948 --- /dev/null +++ b/macros/mtex/documentation/mdoc12.tex @@ -0,0 +1,89 @@ +\def\ck{\discretionary{k-}{}{c}k} +\heading{Zusammenfassung} + +Abschlie\3end sollen die Ergebnisse der beiden vorliegenden Arbeiten +knapp zusammengefa\3t werden. \par +Mit der in Teil 1 +beschriebenen Noteneingabesprache ist es gelungen, eine +lineare Notation zu entwi\ck eln, mit der alle Arten konventioneller +Musik dargestellt werden k"onnen. +Bis auf wenige Ausnahmen wird der +gesamte Umfang der Notenschrift erfa\3t. +Die Eingabesprache k"onnte zum Beispiel noch um +Befehle f"ur Vor-- und Nachschl"age, Oktavierungszeichen +und verschiedene Triller erg"anzt werden. +Gr"o\3ere Erweiterungen w"aren notwendig, um die Notation +moderner Musik +erfassen zu k"onnen, die sich in vielen F"allen +von der herk"ommlichen Schreibweise +unterscheidet. +\parsep +Die vorgestellte Eingabesprache orientiert sich am musikalischen +Sprachgebrauch. Dadurch bleiben der +Aufbau eines Musikst"ucks erkennbar +und die Codierungsvorschriften einpr"agsam. +\parsep +Die Entwicklung der +Sprache geschah haupts"achlich im Hinblick auf die +Anwendung bei der +Automatisierung des Notensatzes. Sie bietet hier +nicht nur die +M"oglichkeit, Texte zur Beschriftung der Musikst"ucke einzusetzen, +sondern die codierten Partituren k"onnen auch in "ubliche +Schrifttexte eingebettet werden. +Ebenso k"onnen beliebige Befehle zur Formatsteuerung +innerhalb der Noteneingabe eingef"ugt werden, die an nachfolgende +Programme weitergegeben werden. +Zus"atzlich zur Anwendung beim automatisierten Notensatz sind +andere Weiterverarbeitungsm"oglichkeiten, zum Beispiel Musikanalysen +oder Katalogisierungen, f"ur die Eingabedaten denkbar und mittels +geeigneter Programme durchf"uhrbar. +\par +Nachdem es sich herausgestellt hatte, da\3 das verwendete +Textsatzsystem \TeX\ f"ur den Notensatz erweiterbar ist (Teil 2 +der Arbeit), mu\3te eine M"oglichkeit geschaffen werden, das mit Hilfe +der Eingabesprache codierte Musikst"uck in eine f"ur die +Weiterverarbeitung mit \TeX\ geeignete Form zu bringen. Das wird von +dem in Anhang B beschriebenen "Ubersetzungsprogramm geleistet, das +die Eingabedaten in der gew"unschten Form bearbeitet. +\par +Um in Teil 2 der vorliegenden Arbeit zu zeigen, da\3 das verwendete +Textsatzsystem f"ur den Notensatz erweitert werden kann, +wurden zun"achst die Satz- und Notationsregeln systematisiert und die +zugeh"origen Verfahren f"ur den automatisierten Notensatz entwickelt. +Als Anwendung ist ein Satzsystem erstellt worden, +das den eingangs erw"ahnten Erfordernissen hinsichtlich +Ausgabequalit"at und Unabh"angigkeit vom Ausgabeger"at gen"ugt. + +Die Frage zu Beginn war, +inwieweit die Datenstrukturen und Satzalgorithmen dieses +Textsatzsystems den Anforderungen des Notensatzes angemessen sind. +Es zeigt sich, da\3 die an jedes Notensatzsystem gestellten Anforderungen, +die den korrekten Ausschlu\3 betreffen, einfach zu erf"ullen sind. +Das Box-Glue-Konzept erm"oglicht das Einf"ugen von Hunks. Der vorhandene +Zeilen- und Seitenumbruchalgorithmus kann erfolgreich eingesetzt werden. +Die Darstellung der einzelnen Notenschriftelemente wird ebenfalls durch +das Box-Glue-Konzept unterst"utzt. Weiterhin ist dadurch auch das +Zusammensetzen der variablen Notenschriftelemente (Noten, Balken, Bogen) +erm"oglicht worden. + +Die Grenzen des Textsatzsystems zeigen sich dort, wo die Plazierung +eines einzelnen Notenschriftelementes vom zweidimensionalen Umfeld +abh"angig ist, da die Datenstrukturen des +Textsatzsystems in diesem Fall den Problemen nicht angemessen sind. + +Als Folgerung daraus ergibt sich, da\3 der Satz in mehreren Systemen +problematisch ist. +Wie alle bisher erschienenen Notensatzsysteme kann auch dieses +in der augenblicklichen Form + nur +einen Teilbereich der konventionellen Notenschrift abdecken. +Es besitzt jedoch den Vorteil, + da\3 hier die Notenschrift, wie in dieser +Arbeit demonstriert, + in laufenden Text +eingebettet werden kann. +Die weitergehenden Anforderungen k"onnen z.B. + durch die Losl"osung vom Textsatzsystem erf"ullt +werden. +\vfill\eject diff --git a/macros/mtex/documentation/mdoc13.tex b/macros/mtex/documentation/mdoc13.tex new file mode 100644 index 0000000000..15b64dfc8f --- /dev/null +++ b/macros/mtex/documentation/mdoc13.tex @@ -0,0 +1,95 @@ + + +\heading{Literatur} + +\ref\keyy{\lit{\Brook}} +\by B.S. Brook, M. Gould \paper +Notating Music with Ordinary Typewriter Characters\jour +Fontes Artis Musicae \vol XI\pages 142--159 \yr1964\endref +\ref \keyy{\lit{\byrd}} +\by D. Byrd \paper A system for music printing by computer +\jour Computers and the +Humanities \vol 8 \pages161--172 \yr 1974 +\endref +\ref \keyy{\lit{\genzmeier}} +\by F. Genzmer \book Das Buch des Setzers \publ Verlag Ullstein +GmbH\publaddr Frankfurt/M.$\cdot$ Berlin \yr 1961 +\endref +\ref\keyy{\lit{\gomb}} +\by D.A. Gomberg \paper A computer--oriented system for music printing +\jour Computers and the Humanities \vol 11 \pages 63--80 \yr 1978 +\endref +\ref\keyy{\lit{\Gourlay}} +\by J.S. Gourlay \paper A language for music printing +\jour Communications +of the ACM \vol 29 \yr 1986 +\endref +\ref\keyy{\lit{\grabner}} +\by H. Grabner \book Allgemeine Musiklehre +\publ B"arenreiter Kassel \publaddr Basel$\cdot$% +Paris$\cdot$London \yr 1970 +\endref +\ref\keyy{\lit{\Hader}} +\by K. Hader +\book Aus der Werkstatt eines Notenstechers +\publ Waldheim--Eberle Verlag \publaddr Wien \yr 1948 +\endref +\ref\keyy{\lit{\Knuth}} +\by D.E. Knuth, M.F. Plass +\paper Breaking Paragraphs into Lines +\jour Software,Practic \& Experience \vol11\yr1981 \pages1118--1184 +\endref +\ref\keyy{\lit{\TeXbook}} +\by D.E. Knuth \book The \TeX book \publ Addison--Wesley +Publ. Comp. \yr 1984 +\endref +\ref\keyy{\lit{\Knuthmf}} +\by D.E. Knuth \book The \mf book \publ Addison-Wesley Publ. Comp. +\yr1986\endref +\ref\keyy{\lit{\Peters}} +\by Peters \paper Informatik I und II +\publ (Vorlesungsausarbeitung, Univ. Bonn) +\yr WS 1978/79 und SS 1979\endref +\ref\keyy{\lit{\Schofer}} +\by A. Schofer \paper Automatisierter +Notensatz mit \TeX\ -- Ein Verfahren zur Notenschrifteingabe +\publ (Diplomarbeit, Univ. Bonn 1986) +\endref +\ref\keyy{\lit{\Smith}} +\by L.C. Smith \paper Editing and printing music by computer +\jour J. Music Theory \vol 17 +\issue 2 \pages 292--309 \yr1973 +\endref +\ref\keyy{\lit{\Steinb}} +\by A. Steinbach \paper Automatisierter +Notensatz mit \TeX\ -- Verfahren zur Notenschriftausgabe +\publ (Diplomarbeit, Univ. Bonn 1986) +\endref +\ref\keyy{\lit{\Werner}} +\by R. Werner \paper EDM (EDV f"ur Musik) -- Modell + kommunikationstheoretisch begr"undeter Musikanalysen +\publ (Dissertation, +Univ. M"unster (Westf.) 1978) +\endref +\ref\keyy{\lit{\Wirth}} +\by N. Wirth \book Compilerbau +\publ Teubner Taschenbuch \publaddr Stuttgart \yr 1984\endref +\ref\keyy{\lit{\Ziegen}} +\by W. Ziegenr"ucker \book Allgemeine Musiklehre +\publ Wilhelm Goldmann Verlag \publaddr +Musikverlag, B. Schotts S"ohne \issue 6 \yr1983 +\endref +\ref\keyy{\lit{\Zima}} +\by H. Zima \book Compilerbau 1 +\publ BI Wissenschaftsverlag \publaddr Mannheim, Wien, Z"urich +\yr 1982\endref +\ref\keyy{\lit{\Zimat}} +\by H. Zima \book Compilerbau 2 +\publ BI Wissenschaftsverlag \publaddr Mannheim, Wien, Z"urich +\yr 1983 +\endref +\vfill\eject + + + + diff --git a/macros/mtex/documentation/mdoc2.tex b/macros/mtex/documentation/mdoc2.tex new file mode 100644 index 0000000000..5cbcf78290 --- /dev/null +++ b/macros/mtex/documentation/mdoc2.tex @@ -0,0 +1,1206 @@ +\heading{Formale Darstellung der Noteneingabesprache} + +Eingabeverfahren, die f"ur den Computer geeignet sein sollen, +m"ussen eine +streng formalisierte +"au\3ere Form haben, um Mehrdeutigkeiten bez"uglich der Bedeutung zu +vermeiden. +Solche \Ev\ geh"oren zur Klasse der formalen Sprachen, deren Syntax in +den meisten F"allen mit Hilfe sogenannter Regelgrammatiken definiert +werden kann. +\abs +Auch bei der hier entwickelten Noteneingabesprache kann die Theorie +der formalen Sprachen zugrunde gelegt werden. +Ihre Syntax wird durch die \BNF, +mit der \kf e \G en beschrieben werden k"onnen, dargestellt. Doch +bevor die Syntax der Eingabesprache definiert wird, sollen die +theoretischen Grundlagen dieser Darstellungsweise geschaffen werden. +Deshalb folgt eine kurze Einf"uhrung in formale Sprachen und \kf e \G +en \lit{\Zima}, \lit{\Peters}. +\abschnitt\abschnitt +\centerline{\bf 2.1 Theoretische Grundlagen} +\abschnitt\abschnitt +\subheading{2.1.1 Formale Sprachen} +Um den oben erw"ahnten Begriff der formalen Sprache zu +er\-kl"a\-ren, sind +zun"achst einige andere Definitionen n"otig. +\absatz +\subheading{Definition} +Eine nichtleere endliche Menge +$\Sigma=\{a_1,a_2,\ldots,a_n\}$, $n\ge 1$, hei\3t (endliches) +\de{Alphabet} und die $a_i$, +$1\le i\le n$ sind die Zeichen oder Symbole des Alphabets $\Sigma$. +\absatz +Diese Zeichen lassen sich nach folgender Vorschrift zu W"ortern +zusammensetzen. +\abs +\subheading{Definition} +Sei $\Sigma=\{a_1,\ldots,a_n\}$, $n\ge 1$. Dann hei\3t die endliche +Folge +$$x=a_{i_{\ssize 1}}\cdots a_{i_{\ssize r}}\;, +\q r\ge 0\;,\q 1\le i_j\le n\;, +\q j\in \lbrack 1,r\rbrack$$ +\de{Wort} "uber dem Alphabet $\Sigma$. +Dabei ist $r$ die L"ange des Wortes und wird geschrieben als +$|x|=r$. +Falls $r=0$, so ist $x$ gleich dem leeren Wort $\epsilon$. +Die Menge aller Worte "uber $\Sigma$ wird mit $\Sigma^*$ bezeichnet und +$\Sigma^+=\Sigma^*\setminus \{\epsilon\}$ +ist die Menge aller Worte "uber dem Alphabet $\Sigma$ ohne das leere +Wort. +\absatz +Auf der Menge aller W"orter ist eine Verkn"upfung, die +Konkatenation, wie folgt definiert. +\abs +\subheading{Definition} +Seien +$x=a_{i_{\ssize 1}}\cdots a_{i_{\ssize r}}$ und +$y=a_{k_{\ssize 1}}\cdots a_{k_{\ssize s}}$ +zwei Worte "uber dem Alphabet $\Sigma$. Dann +wird das Wort $z=a_{i_{\ssize 1}}\cdots a_{i_{\ssize r}}a_{k_{\ssize 1}} +\cdots a_{k_{\ssize s}}$ +als \de{Konkatenation} oder \de{Produkt} +von $x$ und $y$ bezeichnet und $z$ +wird geschrieben als $z=xy$. +\absatz +Mit den definierten Begriffen k"onnen nun formale Sprachen eingef"uhrt +werden. +\abs +\subheading{Definition} +Eine +\de{(formale) Sprache} "uber dem Alphabet +$\Sigma$ ist eine beliebige Menge +$L\subseteq \Sigma^*$. +\abschnitt +Es stellt sich die Frage, wie die Sprache $L$ +spezifiziert werden kann und wie die Elemente dieser Menge +beschrieben werden k"onnen. Die +Beantwortung h"angt davon ab, ob die Sprache $L$ endlich oder +nicht endlich ist. +Handelt es sich bei $L$ um eine endliche Wortmenge, so k"onnen die +Elemente aufgez"ahlt werden. +Falls $L$ jedoch nicht endlich ist, mu\3 eine endliche Beschreibung der +Sprache gefunden werden. Bei dieser Beschreibung soll auf nat"urliche +Sprachen verzichtet und formale Methoden angewandt werden, um +Mehrdeutigkeiten zu vermeiden. Es gibt verschiedene Hilfsmittel, um +solch eine Beschreibung zu erhalten. +\abs +Eine der gebr"auchlichsten Methoden zur Beschreibung formaler Sprachen +sind die Regelgrammatiken, die je nach M"achtigkeit verschiedene Klassen +formaler Sprachen definieren. +Die geeignetste Regelgrammatik +zur Darstellung von Eingabesprachen, wie sie bei der +Aufgabenstellung dieser Arbeit vorkommen, sind die \kf en \G en. Sie +erfassen weite Teile der Syntax dieser Eingabesprachen. +\abschnitt\abschnitt +\subheading{2.1.2 Kontext--freie Grammatiken} +Es folgen nun einige Definitionen zu \kf en \G en und Sprachen. +\absatz +\subheading{Definition} +Eine \de{\kf e \G\ } ist ein Quadrupel +$G=(N,\Sigma,P,S)$, +wobei +$N$ die endliche Menge der \de{Nichtterminalsymbole} und +$\Sigma$ die endliche Menge der \de{Terminalsymbole} ist. Es soll +$N\cap\Sigma=\emptyset$ gelten. +Die endliche Menge $\Gamma=N\cup \Sigma$ wird als \de{Gesamtalphabet} +bezeichnet. +$P\subseteq N\times\Gamma^*$ ist die Menge der Regeln oder +\de{Produktionen}. $P$ ist eine endliche Menge. $(A,v)\in P$ +hei\3t eine Regel +f"ur $A$ und wird in der Form +$A\longrightarrow v$ geschrieben. +$S\in N$ hei\3t \de{Startsymbol}. +\absatz +Produktionsregeln aus $P$ lassen sich hintereinander ausf"uhren. +Dies f"uhrt zu folgender Definition +\abs +\subheading{Definition} +Sei +$G=(N,\Sigma,P,S)$ eine \kf e \G\ und +$w,w_0\in \Gamma^*$. Dann hei\3t $w$ aus $w_0$ +\de{ableitbar} bez"uglich $P$, wenn es eine Folge +$w_1,w_2,\ldots,w_m\in \Gamma^*$ gibt, mit +$w_m=w$ und folgender Eigenschaft:\abs +F"ur jedes $i=1,\ldots, m$ gibt es eine Regel +$(A_i,v_i)\in P$ und W"orter +$x_i, y_i\in\Gamma^*$, so da\3 gilt: +$$w_{i-1}=x_iA_iy_i\qq\hbox{und}\qq w_i=x_iv_iy_i\;.$$ +Die Folge +$w_i$, $i=0,\ldots, m$, hei\3t +\de{Ableitung} der L"ange $m$ und wird in der Gestalt +$$w_0\longrightarrow w_1\longrightarrow \ldots +\longrightarrow w_m=w$$ +als solche angedeutet. +Die Tatsache, da\3 es eine Ableitung von $w$ aus $w_0$ in $P$ gibt, +wird durch $w_0\abl^P w$ notiert. +\abs +Mit einer \kf en \G\ lassen sich W"orter erzeugen. Ausgehend vom +Startsymbol $S$ k"onnen nach Belieben Produktionsregeln der +Grammatik angewandt werden. Eine Produktion ersetzt jeweils ein +Nichtterminalsymbol durch ein Element aus der Menge $N\cup\Sigma$. +Terminalsymbole k"onnen nicht ersetzt werden. +Der Ableitungsvorgang terminiert sp"atestens dann, wenn das Wort nur +noch Symbole aus dem Terminalalphabet enth"alt. Er endet auch, +wenn f"ur ein +Nichtterminalzeichen keine Produktion existiert. +Die bei einer Ableitung entstandenen W"orter, die nur +Terminalsymbole enthalten, +hei\3en \de{Terminalw"orter} oder S"atze. Sie geh"oren zur Menge +$\Sigma^*$. Die Menge aller von einer \kf en \G\ erzeugten +Terminalw"orter bilden die zu der \G\ geh"orende \kf e Sprache. +\absatz +\subheading{Definition} +Eine formale Sprache +$L\subseteq \Sigma^*$ hei\3t \de{\kf} genau dann, +wenn es eine \kf e \G\ +$G=(N,\Sigma,P,S)$ gibt, f"ur die +$$L=L(G):=\{w\,\mid\,w\in\Sigma^*\hbox{ und } +S\abl^P w\}$$ +gilt. +\abs +\subheading{Beispiel} +Sei $G_1=(\{S,T\}, \{a,b\}, \{S\to aT|Ta|\epsilon, T\to Sb|bS\}, S)$ +eine kontext--freie Grammatik. +Die verschiedenen Produktionen f"ur ein Nichtterminalsymbol +werden "ublicherweise zu einer Regel zusammengefa\3t und durch +einen senkrechten Strich getrennt. $T\to Sb|bS$ bedeutet also +$T\to Sb$ oder $T\to bS$. +Es gibt zum Beispiel folgende +Ableitungen: +$$S\longrightarrow aT\longrightarrow aSb\longrightarrow ab$$ +oder +$$S\longrightarrow Ta\longrightarrow Sba\longrightarrow aTba +\longrightarrow aSbba\longrightarrow abba\;.$$ +Die W"orter $ab$ bzw. $abba$ sind Terminalworte. +\abschnitt +Sei im folgenden +$G=(N,\Sigma,P,S)$ eine \kf e \G, +$w\in\Sigma^*$ und $L(G)$ die von $G$ erzeugte \kf e Sprache. +\abs +Im Zusammenhang mit \kf en \G en und Sprachen stellt sich +die Frage, ob die Syntax der erzeugten Sprache korrekt ist. +Deshalb sind drei Probleme, auf die im folgenden n"aher eingegangen +wird, +von besonderem Interesse: +\item{---} "Aquivalenz von Grammatiken, +\item{---} +Entscheidbarkeit "uber die Zugeh"origkeit eines Wortes zu der von +der Grammatik $G$ erzeugten Sprache $L(G)$, +\item{---} Eindeutigkeit der Ableitung f"ur ein Wort +$w\in L(G)$. +\abs +Auf diese drei Punkte wird nun n"aher eingegangen. +\abschnitt\abschnitt +\subheading{2.1.3 "Aquivalenz \kf er \G en} +Es kann sein, da\3 eine +\kf e \G\ in ihren Alphabeten Zeichen enth"alt, +f"ur die es keine Ableitungen gibt oder die in den Terminalw"ortern der +erzeugten +Sprache nicht vorkommen. Auch die Menge der Produktionen kann nutzlose +Regeln enthalten, die zur Erzeugung der Sprache, also der +Terminalw"orter, nicht beitragen. +\abs +Es w"are sicherlich w"unschenswert, wenn diese redundanten +beziehungsweise nutzlosen Zeichen +und Regeln aus der \kf en \G\ entfernt werden k"onnten, ohne da\3 sich +die \G\ wesentlich "andert. +Dies geht, indem folgende Einschr"ankungen gemacht werden: +(1) das Startsymbol kommt nur auf der linken Seite einer Ableitung auf, +(2) keine Regel f"uhrt nur zum leeren Wort, (3) kein Nichtterminalsymbol +wird in ein Nichtterminalsymbol abgeleitet und (4) jede Ableitung f"uhrt +zu einem Terminalwort. +Auf welche Art ein Grammatik dahingehend abge"andert werden kann, da\3 +sie diese Bedingungen erf"ullt, wird im Anschlu\3 an die Definition +der "Aquivalenz geschildert. +\absatz +\subheading{Definition} +Zwei \kf e \G en +$G=(N,\Sigma,P,S)$ und +$G'=(N',\Sigma',P',S')$ hei\3en +\de{"aqui\-va\-lent} genau dann, wenn +$L(G)=L(G')$; \dh, wenn die beiden \G en die gleiche Sprache +erzeugen. +\abschnitt +Der folgende Algorithmus "uberf"uhrt die \kf e Grammatik $G$ in +eine \kf e Grammatik $G'$, die +die obigen Bedingungen erf"ullt und "aquivalent zu $G$ ist. +Die Grammatik $G'$ wird \de{reduziert} genannt. F"ur eine +ausf"uhrlichere +Beschreibung des Algorithmus sei auf \lit{\Zima} oder \lit{\Peters} +verwiesen. +\abs +Eine \kf e \G\ +$G=(N,\Sigma,P,S)$ kann durch folgende Schritte reduziert werden: +\abs +\item{1.} +Das Startsymbol $S$ soll nicht auf der rechten Seite einer Ableitung +vorkommen, \dh +in +$A\longrightarrow v$, $A\in N$, $v\in\Gamma^*$, tritt $S$ nicht in $v$ +auf. Diese Bedingung kann erf"ullt werden durch Einf"uhrung eines neuen +Startsymbols $S'$ und der Hinzunahme der Regel $S'\longrightarrow S$. +$N'$ ist dann +$N\cup\{S'\}$. +\item{2.} +Die Produktionen sollen \de{$\epsilon$--frei} sein, \dh +keine Regel soll die Form +$C\longrightarrow \epsilon$, $C\in N$, haben. +Sei $v\in\Gamma^*$ und das Nichtterminalsymbol $C$ kommt in $v$ vor. +Dann kann zu jeder Regel +$A\longrightarrow v$, $A\in N$, +eine Produktion +$A\longrightarrow w$, $w\in\Gamma^*$, hinzugef"ugt werden. +Diese entsteht aus +$A\longrightarrow v$, indem in $w$ alle $C$ durch +$\epsilon$ ersetzt werden. Die Regel +$C\longrightarrow \epsilon$ kann dann eliminiert werden. +\item{3.} +Die Menge der Produktionen enth"alt keine \de{single production}, +also keine Regel der Form +$A\longrightarrow B$ mit $A,B\in N$. Dazu werden alle Produktionen +$C\longrightarrow x$, $x\in\Sigma$ betrachtet. Nun wird +f"ur alle $A$ mit +$ A\longrightarrow B$ und alle +$ C\longrightarrow x$ "uberpr"uft, ob eine Ableitung +$A\abl^P C$ existiert. Falls es so eine Ableitung gibt, wird +$A\longrightarrow x$ als neue Regel hinzugenommen und die Regel +$A\longrightarrow B$ entfernt. +\item{4.} +Jede abgeschlossene Ableitung soll zu einem Terminalwort f"uhren. +Das bedeutet, da\3 es +immer eine Ableitung $S\abl^P vAw\abl^P vuw$ mit +$v,w,u\in\Sigma^*$, $A\in N$, gibt. Dies kann erreicht werden, indem +alle Nichtterminalzeichen aus dem Nichtterminalalphabet $N$ gestrichen +werden, aus denen kein Terminalwort abgeleitet werden kann. Au\3erdem +werden alle nichterreichbaren Symbole aus den Alphabeten gestrichen. +\abs +Die durch obigen Proze\3 entstandene \kf e \G\ +$G'=(N',\Sigma',P',S')$ ist "aquivalent zu der \kf en \G\ $G$, \dh +$L(G')=L(G)$ (Beweis siehe \lit{\Zima}, \lit{\Peters}). +Mit der \G\ $G'$ kann die Sprache $L$ ohne unn"otige bzw. +redundante Ableitungen erzeugt werden. +Au\3erdem wird mit jeder vollst"andigen +Ableitung +ein Terminalwort erreicht. +Ein Ziel wird es demnach sein, +zur Erzeugung einer Sprache eine reduzierte +\kf e \G\ zu benutzen. +\abschnitt +Im folgenden sei die \kf e \G\ +$G=(N,\Sigma,P,S)$ laut obigen Vereinbarungen eine reduzierte Grammatik. +\abschnitt\abschnitt +\subheading{2.1.4 Entscheidbarkeit} +Immer dann, wenn die Syntax einer Sprache "uberpr"uft werden soll, +stellt sich +die Frage nach der Zugeh"origkeit eines Wortes zu dieser +Sprache. +Eine syntaktisch korrekte Sprache enth"alt nur +W"orter, die durch die zugeh"orige Grammatik erzeugt +wurden. Deshalb ist es f"ur die Syntaxanalyse wichtig, entscheiden zu +k"onnen, ob ein Wort zu der von einer Grammatik erzeugten Sprache +geh"ort oder nicht. Falls diese Frage f"ur ein Wort entschieden werden +kann, so mu\3 als +n"achster Schritt eine Ableitung f"ur dieses Wort gefunden werden -- +vorausgesetzt, das Wort geh"ort zu der Sprache. +Anhand der gefundenen Ableitung f"ur ein Wort $x$ kann seine syntaktische +Struktur erkannt werden. +\absatz +\subheading{Definition} +Eine Sprache +$L\subseteq \Sigma^*$ mit der Eigenschaft, da\3 f"ur jedes Wort +$v\in\Sigma^*$ entschieden werden kann, ob +$v\in L$ oder $v\notin L$, hei\3t +\de{entscheidbar}. +\absatz +Jede \kf e Sprache ist entscheidbar (siehe +\lit{\Peters} oder \lit{\Zima}). +Das bedeutet, da\3 in jedem Fall festgestellt werden +kann, ob ein Wort durch die Grammatik erzeugt wird und damit zu +der Sprache geh"ort. +Im Zusammenhang mit der +Entscheidbarkeit \kf er Sprachen werden +Verfahren angegeben, mit denen eine Ableitung f"ur +ein Terminalwort gefunden werden kann. +Verfahren zum systematischen Aufsuchen einer Ableitung zu einer +gegebenen Grammatik $G$ und einem gegebenen Wort +$w\in \Sigma^*$ werden +\de{Syntax--Anlayse--Verfahren} genannt. +\abs +Bei der Konstruktion einer zu $w$ geh"orenden Ableitung k"onnen zwei +prinzipiell verschiedene Wege eingeschlagen werden: +Einerseits kann von den Terminalzeichen, die das Wort $w$ bilden, +ausgegangen und versucht werden, das Startsymbol $S$ zu erreichen +(``bottom--up--Analyse''). Andererseits kann die Konstruktion einer +Ableitung mit dem Startsymbol begonnen werden, um auf diesen Weg das +Terminalwort $w$ zu erreichen (``top--down--Analyse''). +\abs +W"ahrend einer Analyse mu\3 h"aufig zwischen mehreren Regeln gew"ahlt +werden, weil es f"ur ein Nichtterminalsymbol verschiedene Produktionen +geben kann und es oft nicht absehbar ist, ob die eine oder die +andere Regel zum gew"unschten Ergebnis f"uhrt. +Dies zeigt das folgende Beispiel. +\absatz +\subheading{Beispiel} +Sei $G$ eine \kf e \G\ mit $\Sigma=\{a,+,*,(,)\}$, $N=\{S\}$, +\par +$P=\{S\to S+S/S*S/(S)/a\}$ und dem Startsymbol $S$. +Dann kann der Ausdruck $a+a*a$ mit verschiedenen Ableitungen +erreicht werden: +$$S\to S+S\to S+S*S\to a+S\to a+a*S\to a+a*a$$ +oder +$$S\to S+S\to a+S\to a+S*S\to a+a*S\to a+a*a\,.$$ +\absatz +Es kann auch sein, da\3 durch die Wahl einer ungeeigneten Regel +die Anlayse vor Erreichen des Startsymbols $S$ bzw. des Terminalworts +$w$ terminiert. Dann mu\3 die Ableitung bis zu der mehrdeutigen Stelle +r"uckg"angig gemacht werden (``back--tracking'') und von dort aus wieder +mit der Analyse begonnen werden. Allerdings werden die Bem"uhungen +dahingehen, solche Sackgassen zu vermeiden und m"oglichst effiziente +Analysealgorithmen zu verwenden. +\abs +Verfahren, die solche Analysealgorithmen f"ur \kf e Sprachen automatisch +generieren, sind die +$LL(1)$-- und die +$LALR(1)$--Analyse. Die Besprechung dieser Analyseverfahren w"urde +hier zu weit f"uhren, deshalb sei an dieser Stelle wiederum auf +\lit{\Zima} verwiesen. +\absatz +Es ist noch zu sagen, da\3 diese Analysestrategien ausschlie\3lich auf +eindeutige \G en anwendbar sind. Darum schlie\3t an dieser Stelle +eine kurze +Zusammenfassung "uber den Eindeutigkeitsbegriff \kf er \G en an. +\abschnitt\abschnitt +\subheading{2.1.5 Eindeutigkeit} +Bevor Aussagen zur Eindeutigkeit einer \kf en \G\ gemacht werden +k"onnen, m"ussen einige Vereinbarungen "uber Ableitungen getroffen +werden. +Um daf"ur einen anschaulichen Hintergrund zu haben, werden die +Ableitungen durch sogenannte Ableitungsb"aume graphisch dargestellt. +\absatz +\subheading{Definition} +Sei $G$ eine \kf e \G\ und +$w\in L(G)\subseteq\Sigma^*$. Ein +\de{Ableitungsbaum von $w$ in $G$} ist ein Baum mit +den Eigenschaften: +\item{---} +Die Wurzel hat die Marke $S$. +\item{---} +Alle mit Nichtterminalzeichen $A$ markierten Knoten haben +Nachfolger; sind f"ur einen mit $A$ markierten Knoten die Nachfolger mit +$v_1,\ldots, v_n\in\Gamma$ markiert, dann enth"alt $G$ die Regel +$A\longrightarrow v_1\cdots v_n$. +\item{---} +Die Marken der Bl"atter ergeben von links nach rechts gelesen das +Wort $w$. +\absatz +Zu einer Ableitung +$S\abl^P w$ mit +$S\longrightarrow w_1\longrightarrow w_2\longrightarrow +\cdots \longrightarrow w_m=w$, +$w\in L(G)$, kann nach folgenden Regeln ein \de{Ableitungsbaum} +zusammengef"ugt werden: +\par +\item{1.} +Zu jeder Regel +$A\longrightarrow v_1\cdots v_n\in P$ mit +$v_i\in \Gamma$, +$1\le i\le n$, wird der zugeh"orige \de{Regelbaum} +\par +% +\input mdocpic1 +% +\item{ } gebildet. +\item{2.} +Nun wird der Ableitungsbaum f"ur +$S\abl^P w$ begonnen, indem der Regelbaum zur Regel +$S\longrightarrow w_1$ erstellt wird. +\item{3.} +Sei $w_i=xAy$, $1\le i$\cr +\bs{\bf diminuendo}&dim.& +\bs{\bf rallentando}&rall.\cr +\bs{\bf forte}&f& +\bs{\bf ritardando}&rit.\cr +\bs{\bf fortissimo}&ff& +\bs{\bf ritenuto}&riten.\cr +\bs{\bf fortissimoposs}&fff& +\bs{\bf tr}&tr\cr +\bs{\bf mezzoforte}&mf& +\bs{\bf staccato}&stacc.\cr +\bs{\bf mezzopiano}&mp& +\bs{\bf piano}&p\cr}}$$ +Diese Hinweise f"ur den musikalischen Vortrag m"ussen ebenfalls auf das +Notenschriftzeichen folgen, "uber dem sie beginnen sollen. +Sie k"onnen wiederum +mit obigen Positionsangaben versehen werden. In diesem Fall +m"ussen sie dann +zusammen mit den Positionsangaben in Klammern eingeschlossen werden. +\absatz +\subheading{Artikulationen} +Die verschiedenen M"oglichkeiten, T"one miteinander zu verbinden bzw. +abzuheben, werden mit dem Begriff Artikulation zusammengefa\3t. +Die zu trennenden T"one k"onnen breit oder kurz musiziert werden, +was mit den Begriffen \bs{\bf stac}, \bs{\bf staccatissimo} oder +\bs{\bf tenuto} umschrieben wird. Sie entsprechen folgenden +Artikulationszeichen, die stets am Notenkopf stehen, ausgenommen +bei mehrstimmiger Notierung: +$$\align +\bs{\bf staccatissimo}\q&\q\ssize\prime\\ +\bs{\bf stac}\q&\q.\\ +\bs{\bf tenuto}\q&\q\hbox{\vrule width4pt height1pt}\endalign$$ +Sollen Noten mit Artikulationszeichen versehen werden, so wird der +Beginn mit \bs{\bf stac}, \bs{\bf staccatissimo} oder +\bs{\bf tenuto} angezeigt. Darauf folgen die Notenschriftzeichen, +die die Melodie beschreiben. Jede auftretende Note erh"alt das +angegebene Artikulationszeichen. Dieser Vorgang wird mit +\bs{\bf noaccent} beendet. +\abschnitt\abschnitt +\centerline{\bf 3.6 Ein-- oder mehrstimmige St"ucke in einem System} +\abschnitt +Ein System beschreibt den gesamten Melodieverlauf eines +St"uckes. Bevor die Melodie beschrieben wird, k"onnen +"Uberschriften eingegeben werden, die den Titel, Komponisten und +Verfasser des St"uckes nennen. +Diese "Uberschriften werden mit den Makros \ks{title}, +\ks{composer} und \ks{poet} eingegeben, +nach denen in Klammern der entsprechende +Text steht. Ein Beispiel daf"ur steht in Anhang A. +\par +Bei einem St"uck, das in einem System notiert ist, kann es sich +entweder um ein einstimmiges oder zweistimmiges Musikst"uck handeln, +oder um ein Lied. +F"ur einstimmige St"ucke mu\3 der Melodieverlauf eingegeben werden. +Das geschieht, indem die bisher erkl"arten Zeichen und Kontrollsequenzen +benutzt werden. Zus"atzlich k"onnen mit dem Makro \ks{text} +noch schriftliche Anweisungen \zB zu Tonst"arke und Tempo +gegeben werden. Die Anwendung dieses Makros wurde in 3.4 erl"autert. +Handelt es sich bei dem einzugebenden St"uck um ein zweistimmiges, +so mu\3 das Makro \ks{two} benutzt werden. Dieses Makro hat +zwei Parameter, die jeweils den Melodieverlauf einer Stimme beschreiben. +Jede dieser Melodien steht wiederum in Klammern. +Da die Zeichen, die "ubereinander stehen, gekennzeichnet werden m"ussen, +wurde das Auslassungszeichen \slash\ +eingef"uhrt. Dieses Zeichen erscheint +immer dann, wenn ein Zeichen der einen Stimme kein dazugeh"origes in +der anderen Stimme hat. +$$\bunch\hbox{\bf{\ks{two}\{ +4g p nf\strich 8xc \slash\ \slash\ \slash\ 4d\strich +\ks{beam}\{8,g `g\} 4.,a 8p\strich\ks{chord}\{2.,d .a `.d\} +\} }}\\ +%%% +\hbox{\bf{ +\{\ks{slur}\{{`}{`}4d `a\} {`}{`}d\strich +\ks{beam}\{\ks{slur}\{8`g f\} g e\} 4f\strich +\slash\ \slash\ 4.e \ks{tr} 8d\strich \slash\ +\} } }\endbunch$$ +\vskip-0.4cm\par +%%% +{\hsize14cm\parindent 2cm +\nointerlineskip\universal +\beginsong\alto\F\meter3/4% +\two{% +\group{\\{\v{12}}\\{\v9}}{\\{12}\\{9}}\uslur12\go}{\v8\pv}\n7% +\two{\v{12}}{\v7}\|\x4\two{\group{\\{\a8}\\{\a7}\\{\a8}\\{\a6}} +{\\{8}\\{7}\\{8}\\{6}}\ubeam14\uslur12\go}{\a4}\two{\v7}{\v5}\|% +\group{\\{\a1}\\{\a8}}{\\{1}\\{8}}\lbeam12\go\two{\tr\v6\.1}{\v2\.1}% +\two{\a5}{\raise-1.5\nhh\hbox{\pa}}% +\|\lchord \h5\.1\h2\.1\h{-2}\.1\endchord +\rightrepeat +\endsong +} +%%% +\vskip-1cm \abs +Die Eingabe von Vokalmusik geschieht mit dem Schl"usselwort \ks{vocal}. +Dieses Makro hat ebenfalls zwei Parameter. Der erste Parameter +enth"alt den Melodieverlauf, der zweistimmig sein kann, +der zweite den Text des Liedes. +Auch hierbei wird das Auslassungszeichen \slash\ dann benutzt, +wenn einer Note der Melodie keine +zugeh"orige Silbe im Text entspricht. +Silben werden durch Leerzeichen voneinander getrennt und unter +den zugeh"origen Noten zentriert. +Diese Standardsetzung f"ur die Silben kann umgangen werden, indem +eine Positionsangabe (siehe 3.5, schriftliche Erl"auterungen) +vor die Silbe, die anders positioniert werden soll, geschrieben wird. +$$\bunch\hbox{ +\ks{treble}\ks{D}\ks{meter}{\bf\{4/4\}}} +\hbox{\ks{vocal} +{\bf\{4.''d 8d 4e 4p\strich 4.f 8f f \ks{slur}\{\ks{beam} +\{8'h ''e g\}\}\strich}}\\ +\hbox{{\bf \ks{slur}\{8g f\} e d e \ks{group}\{ +4f\strich 8f 6e d\}}}\\ +\hbox{\bf{\ks{gslur}\{1-3,1-5\}\ks{gbeam}\{3-5,4-5\} 4e 2f +\strich\strich\}}}\\ +\hbox{{\bf\{}KY- RI- E, \slash KY- RI- E } +\hbox{E- \slash \slash LE- \slash I- SON,} +\hbox{E- LE- \slash\slash\slash I- SON.{\bf\}}}\endbunch$$ +\vskip-0.4cm\par +{\hsize15cm\parindent1cm +\universal +\nointerlineskip\beginsong +\vio\D\meter4/4% +\_{KY - }{\v6\.1}\_{RI - }{\a6}\_{E,}{\v7}\pv\|% +\_{KY - }{\v8\.1}\_{RI - }{\a8}\_{E}{\a8}% +\group{\\{\_{E}{\a4}}\\{\a7}\\{\_{-}{\a9}}} +{\\{4}\\{7}\\{9}}\lbeam13\uslur13\go\|% +\group{\\{\a9}\\{\v8}} +{\\{9}\\{8}}\uslur12\_n{ LE - }\hskip20pt{\gluebrule}\go\_{I-}{\a7}% +\_c{SON,}{\a6}\_{E - }{\a7}% +\def\beamlist{\\{3-5,}\\{4-5,}} +\group{\\{\v8}\\{\|}\\{\a8}\\{\s7}\\{\s6}}{\\{8}\\{8}\\{8}\\{7}\\{6}}\lbeam35% +\uslur13\uslur15\_n{ LE\hskip10pt-\hskip10pt -}{\gluebrule}% +{\go}\_{I - }{\v7}\_c{SON.}{\h8}\doublebarline +\endsong} +\abs +\centerline{\bf 3.7 Mehrstimmige St"ucke in mehreren Systemen} +\abschnitt +Falls ein St"uck aus verschiedenen Stimmen besteht, die in +mehreren Systemen notiert werden, so wird das mit der +Kontrollsequenz \ks{system} angezeigt. +Danach folgt in Klammern die Melodie der Stimme. +Sie wird auf die in 3.5 beschriebene Art eingegeben. +Dies mu\3 f"ur jede einzelne Stimme gemacht werden, wobei immer +die Kontrollsequenz \ks{system} vorangestellt wird. +\par +Bei mehreren Systemen m"ussen die Zeichen erkenntlich sein, +die gemeinsam erklingen sollen. Sie stehen in den Systemen untereinander. +Deshalb mu\3 die Reihenfolge der Zeichen in den einzelnen Systemen +korrekt angegeben werden. Falls ein Zeichen in einem System mehrerer +Zeichen in einem anderen entsprechen, so mu\3 das Auslassungszeichen +\slash\ eingesetzt werden. F"ur jede freie Stelle in einem System, +an der +in dem anderen ein Notenschriftzeichen +steht, mu\3 also dieses Auslassungszeichen +eingesetzt werden. +$$\bunch +\hbox{\ks{system}\{\ks{vio}\ks{metre}{\bf \{3\slash4\}} +\ks{slur}\{\ks{beam} +{\bf \{`8f g ba bh {`}{`}c `f\}\strich 4.g\} . . .\}}}\\ +\hbox{\ks{system}\{\ks{bass}\ks{metre}{\bf\{3/4\}}\ks{slur}{\bf \{ +{`}{`}.4d \slash \slash 8e \ks{beam}\{nf ng\}\strich 2.a\}. . .}} +\endbunch$$ +\par\vfill\eject +\centerline{\bf 3.8 Allgemeine Anweisungen} +\abschnitt +In diesem Abschnitt werden Anweisungen gegeben, wie die bisher +beschriebenen Zeichen bzw. Zeichengruppen eingegeben werden k"onnen.\abs +Ein Musikst"uck kann in Text eingebettet werden. Der Text +mu\3 als eine g"ultige \TeX--Eingabedatei vorliegen. +Die Noteneingabe erfolgt nicht +zeilenweise, sie h"angt also nicht vom Zeilenumbruch der gebr"auchlichen +Notation ab. Bei der linearen Schreibweise kann an jeder Stelle mit +einer neuen +Zeile begonnen werden. +Leerzeilen innerhalb einer Noteneingabe haben keine Bedeutung und +werden "uberlesen. +\par +In der Eingabedatei f"ur Musikst"ucke k"onnen auch Kommentare eingegeben +werden. Dies geschieht wie in \TeX\ mit dem Zeichen {\bf\%}, +auf das der kommentierende Text folgt. F"ur eine +Weiterverarbeitung ist der Kommentar unerheblich und wird deshalb +"uberlesen. +\par +Bei der Eingabe mehrerer Informationen, die die gleiche Angabe +betreffen, wird die zuletzt gelesene als g"ultig angenommen. +\abschnitt\abschnitt +Mit den Regeln 3.1 bis 3.8 ist eine Eingabe von Partituren m"oglich. +% Es folgt die "Anderung zur Version O. +Beispiele zur Noteneingabe mit der hier entwickelten Eingabesprache +werden in Anhang A gegeben. Dabei folgt bei den Beispielen 1, 3 und +4 auf die Notation in Notenschrift, die mit dem Ausgabeverfahren von +A.~Steinbach \lit{\Steinb} erstellt wurde, die Darstellung durch die +Noteneingabesprache. + +\par\vfill\eject +\endinput + +In Abschnitt 3.9 werden Beispiel zur Noteneingabe +mit der hier entwickelten Eingabesprache gegeben. Dabei folgt +auf die Notation in Notenschrift, +die mit dem Ausgabeverfahren von A.~Steinbach \lit{\Steinb} erstellt +wurde, die Darstellung durch die Noteneingabesprache. +\abschnitt\abschnitt +\goodbreak +\centerline{\bf 3.9 Beispiele zur Noteneingabe} +\abschnitt +\subheading{Beispiel 1} +(aus: Johann Sebastian Bach, Sechs Suiten, f"ur Viola bearbeitet von +Franz Schmidtner, Musikverlag Hans Sikorski, Hamburg) +\abschnitt\abschnitt +% +\input bach +\abschnitt +% +{\bf !!}\ks{title}\{6 Suiten f"ur Cello Solo \bs{atop} +Suite II Menuet I\}\par +\ks{composer}\{Johann Sebastian Bach\}\par +\ks{poet}\{F"ur Viola "ubertragen \bs{atop} von Franz Schmidtner\}\par +\ks{alto}\ks{F}\ks{meter}\{{\bf3}\slash {\bf4}\}\ks{two} +\par {\bf +\{\ \ \ \ks{chord}\{2`d f a\} 4h +\ks{chord}\{`8c `e\}\slash\ \slash\ \slash\ 4a\strich +\par +\ks{chord}\{4,h `d\} g\ks{beam}\{8f e\}\strich +,8a \slash\ \slash\ \slash\ \slash\ \slash\ \strich\par +\ks{chord}\{`2d f a\} 4h\strich \ks{chord}\{8c e\} +\slash\ \slash\ \slash\ +{`}{`}4c \strich\par +\ks{chord}\{4`f a\}\ks{chord}\{,h `f {`}{`}d\} +\ks{chord}\{,g `g {`}{`}e\}\strich +\ks{chord}\{2.,a .`e .x{`}{`}c\} +\dpkt\strich\strich\dpkt +\par\ks{chord}\{2`a {`}{`}e\}\ks{slur}\{\ks{beam}\{8d 6e f\}\}\strich +8`g\slash\ \slash\ \slash\ \slash\ \slash\ \strich +\par2f \slash\ 4e\strich 8d +\slash\ \slash\ \slash\ \slash\ \slash\ +\ks{slur}\{4g f\}e\strich 8f +\slash\ \slash\ \slash\ +\ks{chord}4,h `e {`}{`}d\}\strich \par +\ks{chord}\{4,a `f {`}{`}c\} +\ks{beam}\{8`h a g a\}\strich \ks{beam}\{8f e f a g h\}\strich +\par 2xf 4p \strich b8c +\slash\ \slash\ \slash\ +4f \ks{tr}\strich\par\ks{chord}\{4,h `g {`}{`}d\} +\ks{chord}\{4`c g {`}{`}c\} `d\slash\ \strich +\par\ks{beam}\{\ks{chord}\{,8g `d {`}{`}c\} 8`h a h g h\}\strich +%%%%%%%%%%%%%TEIL 1%%%%%%%%%%% +4g p nf\strich 8xc \slash\ \slash\ \slash\ 4d\strich +\par\ks{beam}\{8,g `g\} 4.,a 8p\strich\ \slash\ +\dpkt\strich\strich\ \ \}\par +%%%%%%%%%%%%%%%%%%%%%%%%%%% +\{\ \ \slash\ \slash\ +\ks{beam}\{\ks{slur}\{8{`}h a\} h g\}\slash\ \strich +\slash\ \slash\ \slash\ \slash\ \strich +\par\ks{beam}\{\ks{slur}\{8f e d\}`xc ,nh a\}\strich +\slash\ \slash\ \strich\par\ks{beam}\{\ks{slur}\{8h a\}\ks{tenuto} h +f \ks{noaccent} \slash\ \}\strich +\slash\ \slash\ \slash\ \strich +\slash\ \dpkt\strich\strich\dpkt\par +\slash\ \slash\ \slash\ \slash\ \strich +\ks{beam}\{\ks{slur}\{8{`}{`}e d xc e `a\}g\}\strich\par +\ks{slur}\{`4a {`}{`}d\}xc\strich +\ks{beam}\{\ks{slur}\{8{`}{`}g f e f d \}nc\}\strich\par +`2h\slash\ {`}{`}4c\strich \ks{beam}\{8`a g a f\}\slash\ \strich +\slash\ \slash\ \slash\ \slash\ \slash\strich +\slash\ \slash\ \slash\ \slash\ \slash\ \slash\strich\par +2`a \ks{tr} 4h\strich +\ks{beam}\{\ks{slur}\{8g f\} g e\}\slash\strich\par +\slash\ \slash\ \ks{beam}\{\ks{slur}\{8h a\}\}\strich +\slash\ \slash\ \slash\ \slash\ \slash\ \slash\ \strich\par +%%%%%%%%%%%%%TEIL 2%%%%%%%%%%% +\ks{slur}\{{`}{`}4d `a\} {`}{`}d\strich +\ks{beam}\{\ks{slur}\{8`g f\} g e\} 4f\strich +\slash\ \slash\ 4.e \ks{tr} 8d\strich +\ks{chord}\{2.,d .a `.d\} +\dpkt\strich\strich +\ \ \}{\bf !!} } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\abschnitt\abschnitt +\goodbreak +\subheading{Beispiel 2} +(aus: D. Byrd ``A system for music printing by computer'', +Computers and the Humanities 8, 161--172, 1974) +\abschnitt\abschnitt +% +\input byrd +% +\abschnitt +{\bf!!} +\ks{title}\{String Quartett\} +\ks{composer}\{Donald Byrd, 1968\}\ks{voice}\{violin 1\}\par +{\ks{treble}}\ks{meter}\{{\bf9}\slash{\bf8}\} +\ks{text}\{\ks{\os{ }l} moderato\}\par +{\bf 1p\strich\ks{slur}\{4.`a\{\ks{\us v}\ks{mezzopiano}\} +2.{`}{`}e\ks{text}\{\ks{\us v} cant\}\}}\strich \par +{\ks{slur}}{\bf \{\ks{beam}\{8.{`}{`}f b.`h\} b4{`}{`}.d\}} +\ks{slur}{\bf \{\ks{beam}\{8`a h {`}{`}c\}\}}\strich\par +{\bf{\ks{slur}}\{4n.d x`.h\}\ks{slur}\{\ks{beam}\{8`a bh n{`}{`}c\}\}} +\strich\par +{\bf{\ks{meter}}\{6\slash8\} 4.d +\ks{slur}\{{`}{`}.a\strich \ks{meter}\{9/8\} +{`}{`}.a\{\ks{\us v}\ks{crescendo}\}\} +\ks{slur}\{.f {`}{`}{`}.d\}}\strich\par +{\bf{\ks{slur}}\{\ks{beam}\{8.be b{`}{`}.h\}\} +\ks{slur}\{4{`}{`}{`}.f 8f\} +4ne 6g}\strich\par +{\bf{\ks{slur}}\{b.e\{\ks{\us v}\ks{diminuendo}\} +b.{`}{`}a .{`}{`}{`}c\}}\strich\par +{\ks{tenuto}\bf.{`}{`}h \ks{noaccent} \ks{group} +\{2.e \strich\ks{meter}\{6\slash 8\} .e\strich 4.e\}\par +\ks{glsur}\{1-4,4-6\}\ks{slur}\{b.e\{\ks{\us v}\ks{piano}\} +\strich\ks{meter}\{9\slash 8\} .a\} +4.p}\strich\par +{\bf +1p\strich \ks{meter}\{6\slash 8\}\ks{slur} +\{\ks{beam}\{8f\{\ks{\us v}\ks{crescendo}\} .bh {`}{`}{`}d\}\} +4x .c}\strich\par +{\bf{\ks{slur}}\{\ks{beam}\{{`}{`}6a bh n{`}{`}{`}c d\}\} +\ks{slur}\{\ks{beam}\{6xd e xf xg\}\}}\strich\par +{\bf 8a\{\ks{\us v}\ks{forte}\} p p 4.p \gleich !!}\abs +\abschnitt\abschnitt +\goodbreak +\subheading{Beispiel 3} +(aus: R. Baum, ``Geselliges Chorbuch I'' B"arenreiter--Verlag, +Kassel und Basel) +\abschnitt\abschnitt +% +\input distler +\abschnitt +% +{\bf !!}\ks{title}\{Lobe den Herren\} +\ks{composer}\{Hugo Distler\} +\par +\ks{voice}\{Sopran\} +\ks{treble}\ks{signature}\{{`}{`}xf\} +\ks{text}\{\ks{\os{ }r} Schnell\} +\ks{meter}\{{\bf3}\slash {\bf4}\}\ks{vocal} +\par {\bf\{\ \ \ +4g\ks{mezzoforte} g {`}{`}d\strich `h. 8a 4g\strich f e d \strich 2e +\ks{slur}\{4f\strich\ks{meter}\{2\slash 4\} f\} 4g\strich +\par\ks{meter}\{4\slash 4\} 2a 2g\dpkt\strich\strich +\ks{meter}\{3\slash 4\} 4{`}{`}d d d \strich 2.e 0p\strich +\par `4h 8{`}{`}c c +\ks{group}\{4d\strich 8d e d `h 4{`}{`}d\strich 8d e 4.d 8e\strich 4.d\} +\ks{gslur}\{1-3, 1-13\}\par +\ks{gbeam}\{3-6, 9-10\} 8c 4`h\strich 2a +\ks{piano} 0p\ks{beam}\{8h g\}\strich 2a\ks{decr} 0p\par +\ks{beam}\{8h \ks{text}\{{\rm zart}\}g\}\strich +{`}{`}2.d\ks{decr} 0p\strich +\par `4d\ks{forte} .e 8f\strich \ks{meter}\{4\slash 4\} 2g 4a h\strich +\par +\ks{meter}\{7\slash 4\}\ks{slur}\{{`}{`}2c `4.h 8a 4g 2a\}\strich +\ks{meter}\{3\slash 4\} 2.g =\ \ \ \} } +\par +\{\ \ \ \{Lo-\bs{atop} Mei-\} \{be\bs{atop} ne\} \{den\bs{atop} ge-\} +\{Her-\bs{atop} lie-\} \{ren,\bs{atop} be-\}\par +\{den \bs{atop} te\} \{m"ach-\bs{atop} See-\} +\{ti-\bs{atop} le,\} \{gen\bs{atop} das\} \par +\{K"o-\bs{atop} ist\} +\{nig--\bs{atop} mein--\} \slash\ +\{der\bs{atop} Be-\} \{Eh-\bs{atop} geh-\} +\{ren!\bs{atop} ren.\} +\par Kom- met zu Hauf! Psal- ter und Har- +\slash\ \slash\ \slash\ +\slash\ \slash\ \slash\ +\slash\ \slash\ \slash\ \slash\ +fe, \par +wacht auf, wacht \slash\ auf, wacht \slash\ \slash\ auf, \par +las- set +den Lob- ge- sang h"o- +\slash\ \slash\ \slash\ \slash\ +ren!\ \ \ \}{\bf !!} +\vfill\eject diff --git a/macros/mtex/documentation/mdoc4.tex b/macros/mtex/documentation/mdoc4.tex new file mode 100644 index 0000000000..e8613ab111 --- /dev/null +++ b/macros/mtex/documentation/mdoc4.tex @@ -0,0 +1,288 @@ +\heading{Anforderungen an das Notensatzsystem} + +\subheading{Arbeitsschritte beim manuellen Notensatz} + Der Proze\3, eine handgeschriebene Komposition +in eine druckreife Partitur umzuformen, ist eine zeitaufwendige und +fehleranf"allige Arbeit, denn es ist im Laufe der Zeit + ein umfangreiches Notations- und Satzregelwerk +entstanden. +Ein klares und gleichm"a\3iges Notenbild hilft schlie\3lich +dem Musiker, die Notenschrift schnell zu erfassen. + +Die Aufgabe eines Systems zum automatisierten Notensatz sollte es +deshalb sein, eine +Ausgabequalit"at zu erreichen, die dem Handnotensatz nahe kommt. Dabei +ist es nicht notwendig, die Arbeitsweise des Setzers nachzuahmen, +sondern das Ergebnis ist entscheidend. +Die wesentlichen Arbeitschritte sind gleich, jedoch die +Reihenfolge kann ge"andert werden. Deshalb sei hier der + Arbeitsablauf skizziert. + +Der erste und wichtigste Schritt ist die grobe Aufteilung des +Manuskripts in Seiten und Zeilen, das sogenannte \disp{Abstecken}. Dabei +wird die vertikale Position der einzelnen +Notenschriftzeilen festgelegt, abh"angig +von der H"ohe oder Tiefe des Zeileninhaltes. Diese Einteilung geschieht +oft unter "okonomischen Aspekten -- die Gesamtzahl der Seiten soll ein +Vielfaches von acht oder sechzehn ergeben -- , aber auch aus +auf{}f"uhrungstechnischen Gr"unden. +Eine Pause auf der rechten Seite unten +soll das Wenden der Seite erm"oglichen, ohne das Spiel zu verz"ogern. + + +Als n"achstes erfolgt die +\disp{genaue} vertikale Einteilung der einzelnen +Zeilen, so da\3 sp"ater beim Ausf"ullen der Zeilen keine "Uberlappungen +auftreten k"onnen. Diese Voreinteilung ist besonders sorgf"altig +auszuf"uhren, da im Fehlerfall die ganze Seite erneut bearbeitet werden +mu\3. + +Nach dem Abstecken erfolgt das +\disp{Punktieren}. Dies ist die pr"azise +horizontale Einteilung der Noten und Takte in jeder Zeile. + +Dann erst werden die Balken und Notenh"alse angebracht. + +Im f"unften +Schritt werden Akzente und sonstige Verzierungen eingeschlagen, die +keinen zus"atz\-lichen horizontalen Raum ben"otigen. + +Zum Schlu\3 werden die +Phrasierungs-, Ligatur- und Haltebogen, die restlichen Zeichen, die +Information "uber Spielanweisungen enthalten, sowie Vortragsbezeichnungen +gestochen. +\subheading{Anforderungen f"ur den automatisierten Notensatz} +Die oben beschriebene Vorgehensweise +ist direkt abh"angig von den mechanischen Mitteln, +die dem Setzer zu Verf"ugung stehen, d.h. der Stichplatte, den Stempeln +und "ahnlichen Instrumenten. + +Beim automatisierten Notensatz kann daher eine andere Vorgehensweise +gew"ahlt werden. + +Da die einzelnen Elemente der Notenschrift nicht sofort auf einer Platte +plaziert werden m"ussen, ist es m"oglich, sowohl +die vertikale Verteilung als +auch die Seiteneinteilung erst nach der Zeileneinteilung vorzunehmen. + +Man wird demnach erst global punktieren, danach in Abh"angigkeit vom zur +Verf"ugung stehenden Platz eine Einteilung in die einzelnen Zeilen +vornehmen, d.h. den Zeilenumbruch durchf"uhren. Gleichzeitig k"onnen die +Zeichen lokal punktiert werden und diejenigen Zeichen hinzugef"ugt +werden, die +keinen zus"atzlichen horizontalen Raum ben"otigen, und +die vertikale Einteilung der Seite ist erst am Schlu\3 erforderlich. + +Die wesentlichen von einem Notensatzsystem +zu l"osenden Aufgaben sind also: +\item{1)} das Abstecken und die Darstellung des Liniensystems, +\item{2)} die Darstellung der Notenschriftelemente, +\item{3)} die L"osung des Punktierungsproblems, +\item{4)} die Darstellung und Positionierung der Balken und Bogen, +\item{5)} das Einf"ugen von zus"atzlichen Texten und Spielanweisungen +aller Art, +\item{6)} die mehrstimmige Notation + +Ein Versuch der L"osung dieser Probleme mit dem Textsatzsystem \TeX\ +soll im folgenden dargelegt werden. + +Dabei wurde so vorgegangen, da\3 zu Beginn eines Kapitels zun"achst die +Forderungen an das System, die durch die Notensatzregeln (soweit +vorhanden) gegeben sind, beschrieben werden. +Dazu werden L"osungs\-m"og\-lichkeiten f"ur den automatisierten Notensatz + angegeben, die teilweise allgemeiner Natur sind, teilweise jedoch nur +speziell f"ur das Textsatzsystem \TeX\ G"ultigkeit besitzen. + +% +\subheading{Vor"uberlegungen} +Zun"achst seien einige Voraussetzungen, die als Grundlage f"ur alle +folgenden Kapitel gelten, angef"uhrt. + +\subsubheading{Umgebungen} +Die Schwierigkeiten, die beim automatisierten Notensatz +auftreten, sind anderer Natur als die der internen Darstellung von T"onen +z.B. f"ur die Musikanalyse, denn es m"ussen +gleichartige T"one in verschiedenen Umgebungen im +Notenbild unterschiedlich dargestellt werden. +\Beispiel +Betrachte {\tt c'} als Achtelnote in verschiedenen Umgebungen: + +{\hsize10cm +\loose +\advance\hsize2\iindent +\parindent=2\iindent +\beginsong +\alto\C\_{a)}{\a4}\bass\a{10}\vio\a{-2}\doublebarline +\_{b)}{\lchord\a{-2}\a0\a2\endchord}% +\group{\\{\_{c)}{\a{-2}}}\\{\a0}\\{\a2}}{\\{-2}\\{0}\\{2}}\ubeam13\go +\_{d)}{\gluebrule}\two{\a5}{\a{-2}}\=% +\endsong} +\endBeispiel +\vskip-1cm\par + +Die Gestalt einer Note h"angt nicht von ihrer absoluten Tonh"ohe ab, +sondern von ihrer Position im Liniensystem sowie den Umgebungen, in +denen sie auftritt. + +Es gibt im wesentlichen vier verschiedene Umgebungen: +\item{a)} eine alleinstehende Note, +\item{b)} eine Note als Teil eines Akkordes, +\item{c)} eine Note als Teil einer Gruppe von Noten, die durch einen +oder mehrere Balken verbunden sind, +\item{d)} eine Note im zwei- (oder mehr-)stimmigen Satz in einem +Liniensystem. + +Nat"urlich kann die Note gleichzeitig mehreren Umgebungen zugeordnet +sein. +\Beispiel + +{\loose\hsize=5.5cm +\advance\hsize2\iindent +\parindent=2\iindent +\beginsong +\vio\C +\group{\\{\lchord\a{-2}\a0\endchord}\\{\a0}}{\\{0}\\{0}}\ubeam12\go +\two{\group{\\{\a6}\\{\a8}}{\\{6}\\{8}}\ubeam12\go}{\v2}% +\two{\group{\\{\a8}\\{\a{10}}}{\\{8}\\{10}}\ubeam12\go} +{\rchord\v2\v4\endchord}\=% +\endsong +} +\endBeispiel +\vskip-1cm\par +Die Positionierung aller weiteren Informationen, die einer Note +zugewiesen werden, z.B. Versetzungszeichen, Wertpunkte, Spielanweisungen +oder Artikulationsbezeichnungen, ist abh"angig von der jeweiligen +Umgebung sowie der Position der Note im Liniensystem. +\par\vfill\eject +\Beispiel + +Positionierung von Wertpunkten: + +{\loose\hsize=8cm%wertpunkte +\advance\hsize2\iindent +\parindent=2\iindent +\beginsong +\vio\C \h4\.1\h5\.1\lchord\h1\.1\h3\.1\h5\.1\endchord + \lchord{\def\doteven{\dotdown}% + \h2\.1}\leftfalse\h3\.1\lefttrue\h5\.1\endchord + \rchord\h2\.1\lefttrue\h5\.1\leftfalse\h6\.1\endchord +\=\endsong} +\vskip-1cm\par +Positionierung von Versetzungszeichen: + +{\loose\hsize=6cm%Versetzungszeichen +\advance\hsize2\iindent +\parindent=2\iindent +\beginsong +\vio\C \b4\h4\x5\x{-2}\lchord\h5\h{-2}\endchord + \x{-1}\x5\lchord\h5\h{-1}\endchord +\=\endsong} +\vskip-1cm\par +Positionierung von Artikulationszeichen. +%Artikulationszeichen + +{\loose\hsize=8cm +\advance\hsize2\iindent +\parindent=2\iindent +\beginsong +\vio\C\stac\h5\h8\h1\h2\lchord\h5\h{-2}\endchord% +\two{\group{\\{\a6}\\{\a6}}{\\{6}\\{6}}\ubeam12\go} +{\group{\\{\a3}\\{\a3}}{\\{3}\\{3}}\lbeam12\go}% +\=\endsong} +\endBeispiel +\vskip-1cm\par + +\subsubheading{Aufbau des Systems} +Die bildliche Wiedergabe von T"onen und Kl"angen l"a\3t sich an einem + Koordinatensystem verdeutlichen, wobei die horizontale +Achse den zeitlichen Ablauf des Musikst"uckes, den Rhythmus, +wiedergibt und die vertikale +die Tonh"ohe fixiert (\lit{\ziegen}). +Da alle Noten die gleiche Breite besitzen, mu\3 der Raum, +den sie einnehmen, zus"atzlich ihre zeitliche Dauer ausdr"ucken, d.h. +der Notenwert mu\3 durch die "au\3ere Gestalt der Note \disp{und} den +horizontalen Raum dargestellt werden. +\Beispiel + +{\hsize=5cm\loose +\advance\hsize 2\iindent +\parindent=2\iindent +\setbox240=\hbox to 0pt{\hbox{$\overrightarrow{\hbox to105pt{\hfil}}$% +\hskip-102pt\vbox{\offinterlineskip +\setbox0\hbox{$\uparrow$}\setbox1=\hbox to \wd0{\hss +\vrule height31pt width 0.5pt depth 3pt\hss}\box0\box1}}\hss} +\beginsong +\vio\C\^{\vbox{\offinterlineskip\hbox{\eightrm% +\vrule depth 6pt width 0pt Tonh"ohe}\null}}{\gluebrule}\hskip5pt +\lower17pt\box240\hskip15pt +\two{\v5\v6\hfil}{\rchord \h1\h3\endchord}% +\two{\h5\hfil}{\rchord \h0\h2\endchord} +\_n{Tondauer}{\gluebrule}\hfill\null\endsong +} +\endBeispiel +\vskip-1cm\par + +Das hier erarbeitete Notensatzsystem ist daher +so angelegt, da\3 die Einteilung in die Notenzeilen +bzw. in die Seiten nach optimalen Gesichtspunkten vorgenommen wird. +Dazu werden zun"achst die Notenschrift\-elemente des Musikst"uckes +intern in \disp{einer} beliebig langen Zeile angeordnet, +die dann gleichm"a\3ig so auf Zeilen einer bestimmten L"ange +verteilt werden, da\3 die Einteilung des Raumes erhalten bleibt. + +Die Einteilung in die einzelnen Zeilen ist also +nicht vom Benutzer vorgegeben. +Dies ergibt die Schwierigkeit, da\3 das Notensatzsystem f"ur die Angabe +des aktuellen Notenschl"ussels und der aktuellen +Tonart am Anfang jeder Zeile zust"andig ist. + +Dieses Problem mu\3 von jedem Notensatzsystem +individuell gel"ost werden. Deshalb soll in dieser Arbeit nur eine +L"osungsm"oglichkeit f"ur \TeX\ angeben werden. + +\subsubheading{Ma\3einheiten} +Allen Berechnungen liegen einige wenige voneinander unabh"angige +Ma\3einheiten zugrunde. + +Als Berechnungsgrundlage f"ur alle Abstandsberechnungen, die die +vertikale Richtung betreffen, gilt die H"ohe des ausgef"ullten +Notenkopfes (\disp{noteheadheight}) des verwendeten Zeichensatzes, +im folgenden mit dem \TeX-Parameter |\nhh| bezeichnet. +Dadurch wird vor allem der vertikale Abstand der Notenlinien +festgelegt. + +Allen horizontalen Berechnungen liegt die Breite des ausgef"ullten +Notenkopfes (\disp{noteheadwidth}) --- im folgenden |\nhw| genannt +--- zugrunde. + +Die St"arke aller d"unnen Linien (Notenlinien, Hilfslinien und +Notenh"alse) ist unabh"angig von den obengenannten Ma\3einheiten und +somit unabh"angig vom ausgew"ahlten Zeichensatz (\disp{Font}), da sie +das Notenlesen nur unterst"utzen und nicht dominieren sollen. Sie +sollten so schmal sein, wie das Ausgabeger"at es zul"a\3t. +F"ur den Drucker +AGFA - P400 konnte eine St"arke von 0.15 \pt\ gew"ahlt werden. + +F"ur die Hilfslinien wurde jedoch +die doppelte Linienst"arke verwendet. Dies wurde von +K. Hader (\lit{\hader}) als "ubliche St"arke f"ur den Handnotensatz +angegeben. + +W"ahrend die St"arke der d"unnen Linien unabh"angig vom ausgew"ahlten +Font ist, gilt dies nicht f"ur die dickeren Linien (Balken und +Schlu\3striche). + +K. Hader gibt als Schema f"ur die St"arke der Balken an: + +{\leftskip=30pt\rightskip=\leftskip\sl Sie ist dann richtig, +wenn drei Balken mit ihren +Spatien (Zwischenr"aumen) zusammen genau drei Zwischenr"aume der +Notenzeile ausf"ullen.\par} + +W"ahlt man die Dicke der Spatien so gro\3 wie +die Balkendicke, so ergibt sich $\frac35$ |\nhh| +als Ma\3 f"ur die Balkendicke. +Dieser Wert wurde auch f"ur alle Arten von Schlu\3strichen +( \gleich ) "ubernommen. + +\vfill\eject diff --git a/macros/mtex/documentation/mdoc5.tex b/macros/mtex/documentation/mdoc5.tex new file mode 100644 index 0000000000..2b64cd0ecd --- /dev/null +++ b/macros/mtex/documentation/mdoc5.tex @@ -0,0 +1,1123 @@ +\heading{\TeX\ - Konzepte} +In diesem Kapitel sollen die Konzepte von \TeX\ erl"autert werden, die +die Grundlage f"ur das entwickelte Notensatzsystem sind. Dies ist im +wesentlichen das Box-Glue-Konzept f"ur den Seitenaufbau, das f"ur die +Konstruktion der Notenschriftelemente verwendet wurde, und der +Zeilen- und Seitenumbruchalgorithmus. + +Alle anderen Konzepte (z.B. Definitionen von Makros und +die Definition und +Behandlung der internen Parameter) will ich als bekannt voraussetzen und +f"ur Informationen dazu auf das \TeX book \lit{\Texbook} +verweisen. Daf"ur seien die +obigen Konzepte ausf"uhrlicher dargestellt. +Das vorliegende Kapitel ist im wesentlichen eine Zusammenfassung der +Kapitel~14 und~15 des \TeX book unter Ber"ucksichtigung des Artikels +``Breaking Paragraphs Into Lines'' von D. E. Knuth und M. Plass +\lit\Knuth. Dabei wurden die verwendeten Begriffe: Box, Glue, Penalty, +Kern, Rule, Badness, Interline Glue und Interword Glue +als Fachbegriffe "ubernommen und nicht "ubersetzt. + +\subheading{Basiselemente} +Eine \TeX-Seite wird im wesentlichen aus zwei verschiedenen +Basiselementen aufgebaut: +$$\align &\hbox{1. Box,}\cr&\hbox{2. Glue.}\endalign$$ + +Boxes k"onnen nebeneinander oder untereinander geheftet werden, wobei +sie durch Glue verbunden werden. +Die verschiedenen Formen, in denen Boxes und Glue auftreten k"onnen, und +die Verfahren, wie sie aneinandergeheftet werden, sollen + Gegenstand dieses Abschnitts sein. + +\subsubheading{Die Box} +Eine \defi{Box} +ist ein zweidimensionales Gebilde von rechteckiger Gestalt, die +durch das Tripel $(w,h,d)\in\rz^3 $ vollst"andig +beschrieben ist. Dabei gibt $w$ die Breite, $h$ die H"ohe und $d$ die +Tiefe an. Durch $h$ und $d$ ist die Grundlinie (\tex{baseline}) oder auch +Schriftlinie der Box definiert. Der linke Endpunkt der Grundlinie ist +als Referenzpunkt (\tex{reference point}) ausgezeichnet. +\medskip +{\eightpoint +\setbox0=\hbox{$\uparrow$} +\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up +\setbox2=\vbox{\copy0 + \nointerlineskip \kern-.5pt \copy1 + \nointerlineskip \kern-.5pt \copy1 + \moveleft 1em\hbox{H"ohe} + \copy1 \nointerlineskip \kern-.5pt + \copy1 \nointerlineskip \kern-.5pt + \hbox{$\downarrow$} + \kern.2pt} +\setbox3=\vbox{\kern.2pt\copy0 + \moveleft 1em\hbox{Tiefe} + \hbox{$\downarrow$} + \kern0pt} +\setbox4=\vtop{\kern-3pt % this cancels the null text above the samplebox + \hbox{\samplebox{\ht2}{\ht3}{6em}{}% + \kern-6em + \raise3pt\hbox to 6em{\hss Grundlinie\hss}} + \kern3pt + \arrows{6em}{Breite}} +\medskip\indent\hskip30pt +\setbox0=\hbox{$\vcenter{}$}% \ht0 is the axis height +\lower\ht0\hbox{Referenzpunkt$-$\kern-.2em$\rightarrow$\kern2pt}% +\raise\ht2\box4 +\kern1.5em +\raise\ht2\vtop{\kern0pt\box2\nointerlineskip\box3}} +\medskip + +\Beispiel +Die Box wird zur Beschreibung der Schriftelemente verwendet, z.B. +Buchstaben eines Zeichensatzes (\tex{characters}), aber auch Elemente, +die aus +mehreren Zeichen zusammen gesetzt sind, z.B. \`a oder eine mathematische +Formel $\root n \of {x^n+y^n}$. \item{} +Ein Spezialfall ist ein ausgef"ulltes +Rechteck, eine sogenannte \defi{Rule}. +\endBeispiel + +\Bemerkung +F"ur alle Berechnungen werden nur die Werte von $w$, $h$ und $d$ +verwendet, unabh"angig von Inhalt der Box. Viele Zeichen sind z.B. so +konstruiert, da\3 sie entweder die Box nicht ganz ausf"ullen oder +"uber den Rand hinaus ragen, wie z.B. bei \tex{kursiver} Schrift. +Wie sich sp"ater zeigen wird, ist dies eine n"utzliche Eigenschaft. Man +kann Boxes konstruieren, die nichts zur horizontalen Berechnung +beitragen und somit andere Zeichen "uberlappen. +\endBemerkung + +Wie oben bemerkt, kann eine Box wiederum aus mehreren Elementen +bestehen. Diese Elemente k"onnen wiederum Boxes, aber auch Glue sein. +Man unterscheidet Boxes, deren Elemente horizontal aneinander gereiht +werden, von solchen, deren Elemente vertikal untereinandergeheftet +werden. + +\subsubheading{Der Glue} +\defi{Glue} +beschreibt das Ausschlu\3material, das Hilfsmaterial zum F"ullen +der Zeilen. Glue mu\3 also wie der Ausschlu\3 beim Handsatz sowohl +erweiterbar als auch verringerbar sein, um gleiche Zeilenl"angen zu +erhalten. (F"ur die satztechnische Definition der Begriffe: Ausschlu\3, +Erweiterung und Verringerung, verweise ich auf das Buch von F. Genzmer, +``Das Buch des Setzers'' \lit{\genzmer}.) + +Glue wird durch das Tripel $(w,y,z)\in\rz^3 $ vollst"andig +beschrieben. Dabei gibt die Gr"o\3e +$w$ den nat"urlichen Abstand (\tex{natural +space}) an, $y$ den Wert, um den der Abstand erweitert werden kann, +und $z$ den Wert, um den der Abstand verk"urzt werden +kann. D. E. Knuth und M. Plass \lit\Knuth\ beschreiben +die ``variablen'' Gr"o\3en $y$ und $z$ mit ``\tex{strechability}'' und +``\tex{shrinkability}''. +F"ur das folgende Zeilenumbruchverfahren ist es wichtig, da\3 +die Gr"o\3en, die den Glue bestimmen, nach bestimmten Kriterien gew"ahlt +werden. Da +$w$ der Betrag ist, um den in horizontaler bzw. vertikaler Richtung +vorger"uckt (falls $w>0$) bzw. zur"uckgesetzt wird (falls $w<0$), +sollte dieser Wert +so gew"ahlt werden, da\3 der Abstand zwischen den Boxes +optisch gef"allig aussieht. Die ``variablen'' Gr"o\3en $y$ und $z$ +sollten so gew"ahlt werden, da\3 +beim Ausschlu\3 der Zeile der freie Raum $w+y$ bzw. $w+z$ noch akzeptabel +ist. Es sei dabei betont, da\3 +$w$, $y$ und $z$ auch negative Werte annehmen k"onnen. +\Bemerkung +Dimensionen:\par +\item{} +Eine der leistungsf"ahigsten Eigenschaften des Glue-Konzeptes ist, +Streck- und Stauchwerte verschiedener St"arke angeben zu +k"onnen. Es gibt neben den gew"ohnlichen Dimensionsangaben, z.B. 10 \pt\ +(s.\lit{\Texbook, Kapitel 10}), + drei Ma\3einheiten, mit denen ``unbegrenzter'' Glue beschrieben werden +kann. Diese werden in +Einheiten von \fil, \fill\ und \filll\ angegeben. +Im folgenden bezeichne \defi{Glue der Ordnung} $j\in\{0,\ldots,3\} +$ +Glue, dessen Streck- bzw. Stauchwerte in Einheiten von +\pt, \fil, \fill, oder \filll\ angegeben wurden. Glue der +Ordnung 0 ist also ``begrenzter Glue''. +\item{}Im folgenden Ausschlu\3verfahren (\the\chap.2\XX) +wird die Wirkung der verschiedenen M"oglichkeiten, Glue anzugeben, +noch n"aher betrachtet. +\endBemerkung + +Ein Spezialfall von Glue ist \defi{Kern}. Darunter versteht man einen +Freiraum, der nicht variabel ist. Er wird benutzt, um Zeichen zu einer +Einheit zu verbinden, z.B. f"ur das \TeX-Logo, wobei die einzelnen +Buchstaben T, E und X durch Kern ineinander geschoben sind. + +Die Einf"uhrung von Kern im Unterschied zu Glue ohne Streck- und +Stauchwerte ist notwendig, um Glue, an dem eine +Zeile oder Seite umgebrochen werden darf, von Freiraum zu unterscheiden, +bei dem dies verboten ist. (Das \TeX-Logo kann nicht getrennt +werden.) + +Ein weiterer Spezialfall f"ur Glue ist das Ausf"ullen von Leerraum mit +Boxes \verbatimon(|\leaders|). +Dabei wird die Box oder auch Rule so oft gesetzt, wie Glue +daf"ur vorhanden ist. Dies wird z.B. beim Auf{}f"ullen einer Zeile mit +Punkten benutzt \leaders\hbox to 5pt{\hss.\hss}\hfill. + +\subsubheading{Kontrollsequenzen im Zusammenhang mit Box und +Glue} + +Im folgenden seien einige Kontrollsequenzen angegeben. (Die Angaben in +eckigen Klammern ($\lit{ }$) bedeuten, da\3 diese Angabe optional ist.) +\subsubsubheading{Box-Kontrollsequenzen} + +$\left \{{\hbox{\vo|\vbox|\voff}\atop\hbox{\vo|\vtop|\voff}}\right\} +\hbox{\vo| to |\voff}\text{\}\{\text +{\}\}$\par +\indent\hbox{\vo|\hbox to |\voff}\$\{$\<% +Material f"ur eine horizontale Liste>$\}$\par +\verbatimon\rm +\indent\hbox{|\hrule |}$\lbrack$ +|width | \$\rbrack$% +$\lbrack$|height |\$\rbrack$% +$\lbrack$|depth |\$\rbrack$% +\par +\indent\hbox{|\vrule |}$\lbrack$% +|width |\$\rbrack$% +$\lbrack$|height |\$\rbrack$% +$\lbrack$|depth |\$\rbrack$% +\par +\subsubsubheading{Glue-Kontrollsequenzen} + +\indent\hbox{|\vskip |}\% +$\lbrack$|plus |\$\rbrack$% +$\lbrack$|minus |\$\rbrack$% +\par\indent +\hbox{|\hskip |}\% +$\lbrack$|plus |\$\rbrack$% +$\lbrack$|minus |\$\rbrack$ +\par\indent +\hbox{|\kern |}\\par\indent +\hbox{|\leaders |}\\\par +\verbatimon\rm + +\subsubheading{Anwendung f"ur den Notensatz} + +Da eine Box einen rechtwinkligen Umri\3 besitzt, k"onnen Boxes nur +horizontaler und vertikaler Richtung aneinandergeheftet werden. +Es besteht daher zun"achst keine M"oglichkeit, +Linien in beliebiger Richtung zu setzen. Dies ist jedoch f"ur den +Notensatz zur korrekten Darstellung der Balken notwendig. + Dieses Problem tritt bei allen +pixel-orientierten Graphiksystemen auf. +Mit dem \TeX-Konzept kann es gel"ost werden durch eine +geeignete Zerlegung der Linie in mehrere Rules, die passend +aneinandergeheftet werden. +Das folgende Beispiel zeigt einen Balken, der gegen die +Horizontale um 45 Grad geneigt ist, wobei die verwendeten Rules jeweils +1\pt\ breit sind. Mit +{\obeylines +\begindisplay +|\def\vr{\vrule width 1pt height 4pt depth 0pt}|\cr +|\def\diag#1#2{\length=#1 \gradient=#2pt \m=0|\cr +| \hbox{\loop\advance\length by -1 $\raise\m\gradient\hbox{\vr}$|\cr +| \advance\m by 1|\cr +| \ifnum\length>0 \repeat}|\cr +\enddisplay +} +\def\vr{\vrule width 1pt height 4pt depth 0pt} +\def\diag#1#2{\count1=0 \count2=#1 \dimen3=#2pt% + \hbox{\loop\advance\count2 by -1 $\raise\count1\dimen3\hbox{\vr}$% + \advance\count1 by 1 + \ifnum\count2>0 \repeat}} + +ergibt |\diag{20}{1}| : \hskip20pt{\diag{20}{1}} + +Die Anwendung dieses Verfahrens f"ur den Notensatz +ist jedoch +sehr zeit- und speicherplatzintensiv, wenn eine hohe Aufl"osung erreicht +werden soll, da auf einem Notenblatt eine gro\3e Anzahl solcher Balken +zu setzen sind. +Da \TeX\ selbst keine bessere L"osung dieses Problems bietet, wurden +die notwendigen Balken``linien'' in einem Zeichensatz erzeugt (s. Kapitel +{\advance\chap4 \the\chap}). +\subheading{Verfahren zum Ausschlu\3 einer Box auf gew"unschte Breite +bzw. H"ohe} +\defi{Ausschlu\3} (\tex{setting the glue}) ist der Proze\3, +Glue innerhalb +einer Box so zu erweitern oder zu verringern, da\3 eine bestimmte +Breite erreicht wird. + +Fa\3t man eine Zeile als horizontale Liste von Box- und +Glue-Elementen auf, so bedeutet Zeilenausschlu\3 das Vergr"o\3ern oder +Verkleinern der Glue-Elemente dieser Liste auf die gew"unschte +Zeilenl"ange. Ebenso bedeutet Seitenausschlu\3 das Erweitern oder +Verringern der Glue-Elemente einer Seite, die als vertikale Liste +aufgefa\3t werden kann. + +\subsubheading{Ausschlu\3 einer horizontalen Box} +Der Ausschlu\3 einer horizontalen Box +(\hbox{\vo|\hbox|}) +erfolgt in drei Schritten: + +\item{1)} +Bestimmung der nat"urlichen Breite $x\in\rz$ (\tex{natural width}) der +Box und der zur Verf"ugung stehenden totalen Streck- und +Stauchbarkeit $Y$ bzw. $Z$. + +\item{2)} Sei $\omega>0$ die gew"unschte Breite der Box. Dann wird der +Proportionalit"atsfaktor $r$ (\tex{glue set}) bestimmt, der $x$ in +$\omega$ +"uberf"uhrt, abh"angig von der Ordnung des Ausschlu\3materials $i$ +(\tex{glue set order}). + +\item{3)} +Bestimmung der H"ohe und Tiefe der neuen Box und Festlegung ihres +Referenzpunktes. +\medskip +Diese sollen im folgenden n"aher erl"autert werden. + +Seien $x_1,\ldots,x_m$ die Basiselemente der horizontalen Liste +und $(w_1,y_1,z_1),\ldots ,(w_m,y_m,z_m)$ die zu\-ge\-h"o\-ri\-gen +Tripel, wobei, falls ein $x_j, j\in \{1,\ldots,m\}$ eine Box oder Kern +beschreibt, die Variablen $y_j$ und +$z_j$ verschwinden. Dann erh"alt man die +na\-t"ur\-liche Breite +durch Aufsummieren aller na\-t"ur\-lichen Ab\-st"ande: +$x=\sum_{j=1}^m w_j$. + +Die totale Streckbarkeit $Y$ bzw. Stauchbarkeit $Z$ ergibt sich +ebenfalls durch Bilden von +$Y=\sum_{j=1}^m y_j$ und $Z=\sum_{j=1}^m z_j$. Da die $y_i$ bzw $z_i$ +jeweils Werte verschiedener Ordnungen (im Sinne von \the\chap.1.2) +darstellen, +k"onnen diese +Summen nach den jeweiligen Einheiten aufgespalten werden, d.h. in +$$Y=Y_0+Y_1\fil+Y_2\fill+Y_3\filll$$ +und +$$Z=Z_0+Z_1\fil+Z_2\fill+Z_3\filll\;,$$ +wobei $Y_k$ bzw. $Z_k$, $k\in\{0,\ldots,3\}$ Anzahl der Einheiten von +Glue der Ordnung $k$ + angeben. Dabei bezeichnet $k=0$ ``begrenzten'' +Glue (in Einheiten von z.B. \pt). + +Die \defi{Ordnung des Ausschlu\3materials} +$i$ wird definiert als: +$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: } + Y_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Y_k\ne0\}\;,& + \text{sonst}\endcases$$bzw. +$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: } + Z_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Z_k\ne0\}\;,& + \text{sonst}\;.\endcases$$ +\medskip +Der Proportionalit"atsfaktor $r$ berechnet sich wie folgt: +\hfil\break +Sei $\omega>0$ die gew"unschte Breite der Box. + +F"ur $x= \omega$ gilt: $r=0$ und jeder Glue erh"alt seinen +nat"urlichen Abstand. + +F"ur $x< \omega$ ist eine Erweiterung erforderlich und es gilt: + +$$r= \cases (\omega -x)/Y_i,&\text{falls $i\ne0$,}\\ + (\omega -x)/Y_0,&\text{falls $i=0$ und $Y_0\ne0$,}\\ + 0, &\text{falls $i=0$ und $Y_0=0$.}\endcases$$ + +F"ur $x> \omega$ ist ein Verringern erforderlich und es gilt: + + $$r= \cases (x -\omega )/Z_i,&\text{falls $i\ne0$,}\\ + (x -\omega )/Z_0,&\text{falls $i=0$ und $((x-\omega)\le Z_0 + $,}\\ +0,&\text{falls $i=0$ und $Z_0=0$,}\\ +1,&\text{falls $i=0$ und $(x-\omega)>Z_0$.}\endcases$$ +\medskip +Damit ergibt sich f"ur jeden Glue $(w,y,z)$ der horizontalen Liste mit +einem Streckwert $y$ von $j$-ter Ordnung und einem +Stauchwert $z$ von $k$-ter Ordnung die neue Breite +\item{a)}bei Erweiterung: $\; w_{{\rm neu}}=\cases w+r\cdot y\;,& +\text{f"ur $j=i$,}\\ +w\;,&\text{sonst,}\endcases$\par +\item{b)}bei Verringerung: $w_{{\rm neu}}=\cases w-r\cdot z\;,& +\text{falls $k=i$,}\\ +w\;,&\text{sonst.}\endcases$ + +\Bemerkung +\item{1)}Da die Glue-Elemente $w$, $y$, $z$ auch negative Werte annehmen +k"onnen, ist es m"oglich, da\3 die Werte f"ur $Y$ und $Z$ auch negativ +werden k"onnen. Dies soll jedoch ausgeschlossen sein, da $\omega$ nur +positive Werte annimmt. +\item{2)}Der Glue wird nur erweitert bzw. verringert, falls die +zugeh"orige Ordnung des Glue der Ordnung des Ausschlu\3materials +$i$ entspricht. Das Einf"ugen von Glue hoher Ordnung kann +also eine Erweiterung oder Verringerung an anderen Stellen +unterdr"ucken. Ebenso kann es vorkommen, da\3 Glue h"oherer Ordnung +ausgel"oscht wird. +\endBemerkung +\medskip +Alle Boxelemente werden so aneinandergereiht, da\3 ihre +Referenzpunkte auf einer Horizontalen liegen. Die Grundlinie der neuen +Box ist demnach die gemeinsame Grundlinie der inneren Elemente. Die +H"ohe bzw. Tiefe der neuen Box ergibt sich als der Maximum der Tiefen +bzw. H"ohen der eingeschlossenen +Boxes. Eine horizontale Box +kann demnach keine negative H"ohe bzw. Tiefe besitzen jedoch eine +negative Breite. +\Bemerkung +Um bei der Eingabe von Texten nicht hinter jedem Wort eine +Kontrollsequenz +einf"ugen zu m"ussen, die den Zwischenraum zum n"achsten Wort angibt, +wird das erste Leerzeichen hinter einem Wort als +Glue interpretiert. +(Gleiches kann mit \hbox{{|\|\tt\char`\ }} erreicht werden.) +Der Wert des Glue richtet sich nach dem +dem aktuell g"ultigen Zeichensatz (\defi{Interword Glue}). +Jedem Zeichensatz ist ein solcher Glue zugeordnet. +In einem Zeichensatz, der f"ur Textsatz verwendet wird, +entspricht der nat"urliche Abstand +der gew"unschten Breite eines Leerzeichens. +Da bei mathematischen +Formeln ein anderer Ausschlu\3 verwendet wird und einige +mathematische Zeichen (z.B. gro\3e Klammern) aus mehreren Elementen der +mathematischen Zeichens"atze zusammengesetzt werden, ist der +{Interword +Glue} in diesem Fall mit |0pt plus 0pt minus 0pt| vorbelegt. +Der {Interword Glue} kann +durch "Andern des Wertes des Parameters |\spaceskip| +ver"andert werden. +Verschwindet dieser Wert nicht, so wird der Wert +dieses Parameters an Stelle des Glue des aktuellen Fonts eingef"ugt. +Da im Notensatz der Glue abh"angig vom Notenwert der vorangegangenen +Note gesetzt werden mu\3, ist dies eine M"oglichkeit, den Glue zwischen +den Noten zu variieren. +\endBemerkung +\verbatimon +\subsubheading{Beispiele und Anwendungen zum horizontalen Ausschlu\3} +\item{1)}Im Notensatz ist es oft notwendig, die Breite eines +oder mehrerer Zeichen zu ignorieren (z.B. f"ur die Oktavstellung von +Versetzungszeichen (s. {\advance\chap3 \the\chap}.1), +f"ur die Textunterlage ({\advance\chap5 \the\chap}.2) oder auch +f"ur die Unterlage des Notenliniensystems). +Dies ist eine einfache Anwendung des +Ausschlu\3verfahrens. Man kann eine Box der Breite Null erzeugen, wobei +der Boxinhalt links- oder rechts"uberlappend erscheint. Das Prinzip soll +am mathematische Zeichen $\ne$ demonstriert werden. Es kann +erzeugt werden durch die Eingabe +\begindisplay +|\hbox to 0pt{/\hskip0pt minus1fil}=| +\enddisplay +\item{}Durch den Glue der Ordnung 1 ist gen"ugend +Stauchm"oglichkeit vorhanden. Das Zeichen |/| wird gesetzt, ohne jedoch +in die horizontale Berechnung einzugehen. Es wird also rechts "uber den +``Rand'' der Box hinausgeschoben. Anschlie\3end wird das +Gleichheitszeichen gesetzt, und man erh"alt $\ne$. + +\item{}Umgekehrt kann das Ergebnis auch erreicht werden durch die Eingabe +\begindisplay +|/\hbox to 0pt{\hskip0pt minus1fil=}| +\enddisplay +\item{} +In diesem Fall wird der Inhalt der Box "uber den linken ``Rand'' der +Box hinausgeschoben. +\item{2)} Die Zeichen |ab| k"onnen in einer Zeile zentriert werden durch +die Eingabe +\begindisplay +|\hbox to\hsize{\hskip0pt plus1fil ab\hskip0pt plus1fil}| +\enddisplay +\item{}Man erh"alt + +\hbox to\hsize{\hskip\iindent\hskip0pt plus1fil \bf ab\hskip0pt plus1fil} +\item{} +Auf beiden Seiten der Zeichen befindet sich Glue der +Ordnung 1. Die Box wird auf Zeilenbreite (|\hsize|) +ausgeschlossen, indem der zur Verf"ugung stehende Raum zu gleichen +Teilen vor |a| bzw. nach |b| aufgeteilt wird. +Verwendet man +\begindisplay +|\hbox to\hsize{\hskip0pt plus2fil ab\hskip0pt plus1fil}| +\enddisplay +\item{}so erh"alt man\par\nobreak +\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf ab\hskip0pt plus1fil} +\item{} +In diesem Fall wird der Glue im Verh"altnis 2:1 aufgeteilt. F"ugt man +zwischen |a| und |b| Glue der Ordnung 2 ein durch die +Eingabe +\begindisplay +\hskip-20pt|\hbox to\hsize{\hskip0pt plus2fil a\hskip0pt plus1fill +b\hskip0pt plus1fil}| +\enddisplay +\item{}so erh"alt man:\par +\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf a\hskip0pt plus1fill +b\hskip0pt plus1fil} +\item{}In diesem Fall werden also die Streckwerte der +Ordnung 1 +unterdr"uckt und die Zeichen jeweils an den linken bzw. rechten +Zeilenrand geschoben. +Die Ausl"oschung von Glue h"oherer Ordnung sei mit dem folgenden Beispiel +demonstriert. Die Eingabe +\begindisplay +\hskip-20pt|\hbox to\hsize{\hskip0pt plus1fill a\hskip0pt plus1fil +b\hskip0pt plus-1fill}| +\enddisplay +\item{}ergibt + +\hbox to\hsize{\hskip\iindent\hskip0pt plus1fill \bf a\hskip0pt plus1fil +b\hskip0pt plus-1fill} +\item{3)} Als weiteres Beispiel sei ein spezielles Notensatzproblem +angef"uhrt: +\item{} +Unabh"angig von der Umgebung, in der eine Note auftritt, soll +die Breite der Noten +immer auf gleiche Art in +die horizontale Rechnung eingehen, d.h. gleich auch f"ur Noten mit und +ohne Hilfslinien (dies sind +kurze Notenlinien, die die Bestimmung der Tonh"ohe +einer Note erleichtert, die nicht au\3erhalb des +Liniensystems plaziert wurde) +denn die Breite solcher Hilfslinien soll nicht +ber"ucksichtigt werden. +\verbatimon +\item{}Die Hilfslinien sind (horizontal) zentriert den Noten zu +unterlegen. Dies geschieht am einfachsten, indem man Note und Hilfslinien +in je einer Box der Breite Null zentriert und diese zusammen zu einer +Box der Breite |\nhw| ausschlie\3t. +Mit +\begindisplay +|\hbox to\nhw{\hskip0pt plus1fil minus 1fil|\cr +|\hbox to0pt{\hskip0pt minus1fil |\|\hskip0pt minus1fil}|\cr +\hskip2\iindent +|\hbox to0pt{\hskip0pt minus1fil |\|\hskip0pt minus1fil}|\cr +|\hskip0pt minus1fil}| +\enddisplay +\item{}erh"alt man z.B. \quad \v{14}\global\sk=0pt +\subsubheading{Ausschlu\3 einer vertikalen Box} +Der Ausschlu\3 einer vertikalen Box +(\hbox{\vo |\vbox| oder |\vtop|}) +verl"auft "ahnlich wie bei der +horizontalen Box, jedoch erfolgt die Aneinanderheftung nach einem +komplizierteren Schema. + +Ist kein Glue angegeben, wird der Zeilenzwischenraum nach folgendem +Verfahren berechnet: + +Um einen gleichm"a\3igen Ausschlu\3 zu erhalten, sollte der Abstand +zwischen den Grundlinien m"oglichst gleich bleiben. + +Sei der gew"unschte Abstand der Grundlinien +(\hbox{\vo|\baselineskip|\voff}) +zweier +benachbarter Zeilen durch Glue der Form $b$ |plus| $y$ |minus| $z$ +(s. \the\chap.3.2) +gegeben. Sei $l$ Glue (|\lineskip|), +der eingef"ugt werden soll, falls der +berechnete Zwischenraum den Wert $\bar l$ +(\hbox{\vo|\lineskiplimit|\voff}) unterschreitet. Weiter sei +$d$ die Tiefe der oberen Box und $h$ die H"ohe der unteren Box. + +Dann ergibt sich f"ur den Glue, der zwischen den Boxes eingef"ugt wird +(\defi{Interline Glue}): + +\item{1)} Falls $d\le-1000\pt$, wird kein {Interline Glue} +eingef"ugt. +\item{2)} Falls $d>1000\pt$ und $(b-d-h)\ge \bar l$, +wird ein {Interline Glue} von $(b-d-h)$ |plus| $y$ |minus| $z$ +vor der unteren Box eingef"ugt. +\item{3)}Gilt weder 1) noch 2), wird $l$ als {Interline Glue} +eingef"ugt. +\par +\midinsert +\medskip +{\eightpoint +\setbox0=\hbox{$\uparrow$} +\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up +\setbox2=\vbox{\copy0 + \nointerlineskip \kern-.5pt \copy1 + \moveleft0em\hbox{$h$}% + \copy1 \nointerlineskip \kern-.5pt + \hbox{$\downarrow$}% + \kern.2pt} +\setbox3=\vbox{\kern.2pt\copy0 + \moveleft 0em\hbox{$d$}% + \hbox{$\downarrow$}% + \kern0pt} +\setbox4=\vbox{\kern.2pt\copy0 + \moveleft 1em\hbox{$(b-d-h)$}% + \hbox{$\downarrow$}% + \kern0pt} +\setbox5=\vbox to 0pt{\vss\copy0 + \nointerlineskip \kern-.5pt \copy1 + \nointerlineskip \kern-.5pt \copy1 + \nointerlineskip \kern-.5pt \copy1 + \nointerlineskip \kern-.5pt \copy1 + \nointerlineskip \kern-.5pt \copy1 + \moveleft0em\hbox{$b$} + \copy1 \nointerlineskip \kern-.5pt + \copy1 \nointerlineskip \kern-.5pt + \copy1 \nointerlineskip \kern-.5pt + \copy1 \nointerlineskip \kern-.5pt + \hbox to \wd0{$\hss\vrule height4pt\hss$}\nointerlineskip \kern-.5pt + \hbox{$\downarrow$}% + \kern.2pt} +\setbox6=\vtop{\kern-3pt % this cancels the null text above the samplebox + \hbox{\samplebox{\ht2}{\ht3}{6em}{}% + \kern-6em + \lower\ht3\hbox to 6em{\hskip1em \vtop{\copy3\nointerlineskip + \copy4}\hss}}% + \kern-3.4pt + \hbox{\samplebox{\ht2}{\ht3}{6em}{}% + \kern-6em + \hbox to 6em{\hbox to 0pt{\hss\box5\hskip1em}\hskip1em \copy2\hss}}% + } +\hbox to \hsize{\hfil\box6\hfil} +} +\medskip +\centerline{{\eightrm Skizze zum Verdeutlichen des Interline Glue +(\the\chap.2.3) }} +\endinsert +\goodbreak +\Bemerkung +\item{1)} +Vor oder hinter einer Rule wird dieser Algorithmus nicht angewendet. +\item{2)}Dieses Verfahren wurde so konzipiert, da\3 + zwischen den Zeilen +immer ein Mindestabstand eingehalten wird, + falls der nat"urliche Abstand von $l$ gleich $\bar l$ ist. + Jedoch k"onnen durch +Ver"andern der Parameter $b$, $l$, $\bar l$ auch andere Effekte erzielt +werden, z.B. wird mit |\baselineskip -10000pt| |\lineskip 0pt| und +|\lineskiplimit 0pt| kein {Interline Glue} +zwischen den Zeilen eingef"ugt. +%Dies wird durch die Kontrollsequenz |\offinterlineskip| erreicht. +\endBemerkung +\goodbreak + +Die vertikale Box wird nach folgendem Verfahren +ausgeschlossen:\item{1)}Bestimmung der ``nat"urlichen H"ohe'', der Tiefe +und Breite sowie des Referenzpunktes, +\item{2)}Bestimmung des Proportionalfaktors $r$. +\medskip +Dazu werden die +Elemente einer vertikalen Liste werden unter +Einbeziehung des {Interline Glue} +so untereinander geheftet, da\3 ihre +Referenzpunkte auf einer Vertikalen liegen. + +{}Der neue Referenzpunkt ist, falls +|\vbox| verwendet wurde, der +Referenzpunkt der untersten inneren Box, bei |\vtop| der der obersten. + +{}Das genaue Verfahren zur Bestimmung des Referenzpunktes, der +nat"urlichen H"ohe $h$ und Tiefe $d$ bei |\vbox| lautet: +\item{I)} Enth"alt die Liste keine Box, gilt $d=0\pt$. +\item{} Ebenso, falls das letzte Element keine Box ist. +Der neue +Referenzpunkt ist also in diesem Fall die linke untere Ecke der +umfassenden Box. +\item{} +Ist das letzte Element eine Box mit Tiefe $\bar d$, gilt $d=\bar d $. +\item{II)} +Ist $d>\hbox{\vo|\boxmaxdepth|\voff}$, wobei dies die Tiefe + ist, die eine Box h"ochstens annehmen kann, gilt + $d:=\hbox{\vo|\boxmaxdepth|\voff}$. +Dieser Paramter wurde eingef"uhrt, damit die Box der letzten Zeile +vollst"andig auf der Seite erscheint. +\item{}Der "Uberschu\3 wird in diesem Fall + zur nat"urlichen H"ohe addiert, was eine Verschiebung des +Referenzpunktes nach unten bewirkt. +\item{III)}Die Breite der neuen Box ist das Maximum des Abstandes +einer eingeschlossenen Box rechts vom Referenzpunkt der neuen Box. +Die Breite einer vertikalen Box ist also immer nicht-negativ. +\medskip + Der Proportionalfaktor $r$ wird wie bei einer horizontalen Box berechnet +in Abh"angigkeit von der Differenz nat"urlicher +H"ohe $h$, die sich aus dem Maximalabstand der inneren Boxes +oberhalb der Grundlinie zur Grundlinie ergibt, +und gew"unschter H"ohe $\omega$ +und den zur Verf"ugung stehenden Dehn- und Stauchm"oglichkeiten. +\medskip +Das genaue Verfahren zur Bestimmung des Referenzpunktes, der +nat"urlichen H"ohe $h$ und Tiefe $d$ bei \hbox{\vo|\vtop|\voff} lautet: +\item{i)}Die Konstruktion und der Ausschlu\3 erfolgt wie in den Regeln +f"ur \hbox{\vo|\vbox|\voff}. +Dabei wird die nat"urliche H"ohe $\bar d $ und Tiefe $\bar h$ bestimmt. +\item{ii)}F"ur die endg"ultige H"ohe $h$ gilt: +$$h=\cases 0\pt\;,& +\text{falls das 1. Listenelement keine Box ist,}\\ +\text{die H"ohe der obersten Box, }&\text{sonst.}\endcases$$ +\item{iii)}Der Referenzpunkt wird so verschoben, da\3 gilt: +$d:= \bar h+\bar d-h$. + +\subsubheading{Beispiele und Anwendungen zum vertikalen Ausschlu\3} +Im folgenden sollen die Unterschiede von |\vtop| und +|\vbox| bei verschiedenen Anwendungen verdeutlicht werden. +\item{1)}Als einfache Anwendung ergibt sich zun"achst der Aufbau des +Liniensystems. Da nach Rules kein Interline Glue eingef"ugt wird, ergibt +sich das Liniensystem durch f"unfmaliges Auf{}f"uhren einer Rule der +L"ange der Zeilenbreite, die durch Kern voneinander getrennt sind: +\begindisplay +|\vbox{|\\\\\\\\% +\|}| +\enddisplay +\item{} +Dies ergibt eine Box, deren Grundlinie die unterste Linie ist, ohne Tiefe +und mit einer H"ohe vom F"unf{}fachen +der Linienh"ohe und Vierfachen des Kern. +W"urde man in diesem Beispiel |\vtop| verwenden, so erg"abe sich als +Grundlinie die oberste Linie, wobei die H"ohe der Box die H"ohe der +Linie betr"agt, und die Tiefe das Vierfache +der Linienh"ohe und des Kerns. Dies wird zum Beispiel bei der +Konstruktion der Hilfslinien unterhalb des Liniensystems ben"otigt. +\item{2)} +Das Ansetzen der F"ahnchen an den Notenhals: +\item{}Da die Notenhalsl"angen variabel sind (s. Kapitel %\XX +{\advance\chap3 \the\chap}), k"onnen +die F"ahnchen nicht zusammen mit dem Notenhals als ein Zeichen in den +Zeichensatz aufgenommen werden. Es gilt nun, eine Konstruktion zu finden, +so da\3 die F"ahnchen am jeweiligen Notenhalsende positioniert werden. +\item{}Dies kann f"ur den nach oben gestielten Hals durch eine +|\vbox|-Konstruktion und f"ur den nach unten gestielten Hals durch eine +|\vtop|-Konstruktion erreicht werden. Zu beachten ist, da\3 in beiden +F"allen kein Interline Glue eingef"ugt werden darf. +\begindisplay +|\vbox to|\|{\hbox{}|\% +|\vskip0pt plus 1fil}|\cr +|\vtop to|\|{\hbox{}\vskip0pt plus1fil|\% +|\hbox{}}| +\enddisplay + +\hbox to\hsize{\hfill +\leaders\hrule\hskip20pt\kern-5pt{\music\char\hex21}% +\vrule height 16pt depth 0pt +\vbox to16pt{\offinterlineskip\hbox{}\hbox{\music +\char\hex29}\vss\hbox{}}% +\leaders\hrule\hskip20pt\kern-3pt\vrule height 0pt +depth16pt\vtop to 16pt{\offinterlineskip\hbox{}\vss\hbox{\music\char +\hex2E}\hbox{}}{\music\char\hex21}\kern-5pt +\leaders\hrule\hskip20pt \hfill} + +\item{}Nach den oben angegebenen Regeln f"ur den Ausschlu\3 der +vertikalen Box ist also der Referenzpunkt die linke untere Ecke +der umfassenden Box, die zu der H"ohe der aktuellen Notenhalsl"ange +ausgeschlossen wurde, so da\3, unabh"angig von der H"ohe und Tiefe +des F"ahnchens, der obere Rand des F"ahnchens mit dem oberen Rand der +Box abschlie\3t. Umgekehrt ist dies im zweiten Fall. Diese Box erh"alt +als Tiefe die Notenhalsl"ange, w"ahrend die H"ohe verschwindet. Der +Referenzpunkt ist also die obere linke Ecke der Box. + +\item{3)}F"ur das genaue Ansetzen der Balken an den Notenhals ist es +notwendig, die Box, in der der Balken zusammengesetzt wurde (s. +\the\chap.1.4), so auszuschlie\3en, da\3 die H"ohe bzw. Tiefe des +Balkens nicht in die +vertikale Berechnung eingeht. +Die Box, in der der Balken zusammengesetzt wurde, hat nach den obigen +Regeln als Breite $w$ den (horizontalen) Abstand des ersten und letzten +Notenhalses der zu verbalkenden Noten. Die H"ohe ergibt sich als Produkt +der Steigung des Balkens mit $w$ zuz"uglich der +Balkenst"arke. Die Tiefe betr"agt +in diesem Fall gleich Null. F"ur die weitere Plazierung anderer +Notenschriftelemente in der N"ahe +einer solchen Box sind diese Ausma\3e hinderlich. +Es reicht aus, den Balken so zu setzen, da\3 die H"ohe nicht in die +Berechnungen eingeht. Dazu wird die Box noch einmal in einer vertikalen +Box ausgeschlossen, so da\3 der Referenzpunkt der ``Balkenbox'' mit dem +Ansatzpunkt des Balkens "ubereinstimmt und die Box keine H"ohe und keine +Tiefe besitzt. +Dies kann "ahnlich wie in den Beispielen +zum horizontalen Ausschlu\3 durch Einf"ugen von Glue der +Ordnung 1 erreicht werden. +\item{} +F"ur positive Steigungen wird dazu die +|\vbox|-Konstruktion +\begindisplay +|\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}|, +\enddisplay\item{} +verwendet, +w"ahrend f"ur negative Steigungen die +|\vtop|-Konstruktion +\begindisplay +|\vtop to0pt{\hbox{}\diag{20}{1}\vskip0pt minus1fil}| +\enddisplay +benutzt wird. Der so gewonnene Ansatzpunkt soll in der folgenden Skizze +verdeutlicht werden. +\par\par\vskip30pt +{\offinterlineskip +\hbox to\hsize{\hfill \leaders\hrule\hskip20pt +\hbox to0pt{\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}\hss}% +\leaders\hrule\hskip20pt +\hbox to0pt{\vtop to0pt{\hbox{}\diag{20}{-1}\vskip0pt minus1fil}\hss}% +\leaders\hrule\hskip40pt\hfill}} +\vskip20pt +\item{}Weitere Beispiele im Zusammenhang findet man +in den Notenbeispielen von Kapitel {\advance\chap4 \the\chap} +und im Anhang A. + +\subheading{Der Zeilenumbruchalgorithmus} +F"ur ein Textsatzsystem ist es notwendig, ein Verfahren bereitzustellen, +das eine Folge von Schriftelemen\-ten, d.h. einen Absatz, in Zeilen +einteilt, so da\3 ein gleich\-m"a\3iges Bild entsteht. +Zu l"osen ist also das Optimierungsproblem: + +{\leftskip30pt \sl +Finde eine Folge von Umbruchpunkten, +so da\3 der gesamte Absatz ``m"oglichst gleichm"a\3ig'' umbrochen +wird.\par} + +Ob ein Absatz (\tex{paragraph}) gut ausgeschlossen ist, wird nach drei +Kriterien beurteilt: +\item{$\bullet$}Ist ein Bruch der Zeile an \disp{dieser} Stelle geeignet? +\item{}Dies ist ein lokales Kriterium. Es wird bewertet, ob zum Beispiel +eine Formel ung"unstig getrennt wurde. +\item{$\bullet$}Ist der Ausschlu\3 der Zeile angenehm? +\item{}Dies ist ein globales Kriterum f"ur die Zeile. Bewertet wird, ob +z.B. eine Zeile zu locker oder zu eng ausgeschlossen wurde. +\item{$\bullet$}Gibt es gro\3e Unterschiede im Ausschlu\3 benachbarter +Zeilen? +\item{}Bewertet wird, ob z.B. eine Zeile eng ausgeschlossen wurde und +die folgende sehr locker. + +Es ist also eine Bewertungsfunktion gesucht, die diese Kriterien +ber"ucksichtigt, und das Optimierungsproblem wird durch Minimierung +dieser Bewertungsfunktion gel"ost. + +\subsubheading{Die Penalty} +D. E. Knuth f"uhrt ein weiteres Basiselement +ein, das eine Bewertung nach dem ersten Kriterium er\-m"oglicht. Die +\defi{Penalty} $p\in\rz$ beschreibt die ``"asthetischen Kosten'' f"ur +einen Umbruch an einer Stelle. Kleine Penalty-Werte bedeuten dabei +einen g"unstigen Umbruch, gro\3e einen ung"unstigen. \par +F"ur +$p\le-10\,000$ wird erzwungen, da\3 die Zeile an dieser Stelle +gebrochen wird, +w"ahrend $p\ge10\,000$ dies verhindert. + +Ein Spezialfall ist eine Penalty, der eine Breite $w$ zugeordnet ist. +Diese wird im Falle eines Umbruchs ber"ucksichtigt. Mu\3 z.B. ein Wort +getrennt werden, so ist $w$ die Breite des einzuf"ugenden +Trennungsstriches `-'. Es ist also m"oglich, zwischen Text, der +innerhalb einer Zeile gesetzt werden soll, und Text, der am Zeilenrand +auftritt, zu unterscheiden und ihm eine andere Bewertung zuzuordnen. + +Das zugeh"orige Kommando lautet: +\begindisplay +\hbox{\vo|\discretionary{|\voff}\|}|% +|{|\|}{|\|}|\;,\enddisplay +wobei die jeweiligen Textelemente vom Typ Box oder Kern sein m"ussen. +Wird die Zeile and dieser Stelle gebrochen, +wird der \tex{pre-break text} am Zeilenende und +der \tex{post-break text} am neuen Zeilenanfang eingef"ugt. Ist dies +nicht der Fall, so wird der \tex{no-break text} gesetzt. Der Wert der +Penalty an einem \tex{discretionary}-Kommando ist der Wert des +Parameters \hbox{\vo|\hyphenpenalty|\voff}, +falls ein \tex{pre-break text} angegeben wurde, + und der Wert des Parameters \hbox{\vo|\exhyphenpenalty|\voff}, falls der +\tex{pre-break text} fehlt. +\goodbreak +\subsubheading{Vereinbarung} +Im folgenden beschreibe die Folge \folg xn einen Absatz, wobei die +\folgi xjn Basis-Elemente sind. Die Folge \folgi tjn gebe den Typ des +jeweiligen Basis-Elementes an, d.h. +$t_j=\tbox$, falls $x_j$ eine Box\footnote{$^*$}{\noindent\verbatimon +F"ur die folgenden +"Uberlegungen bezeichne \tbox\ alle nicht entfernbaren Elemente. Dazu +geh"oren: Box-Elemente, wie sie in \XX\the\chap.1.1 beschrieben wurden, +|\discretionary|-Komandos +sowie |\special|-, +|\mark|-, |\vadjust|- +und +|\insert|-Kommandos, +die im \TeX-Book \lit{\Texbook} n"aher beschrieben +sind.} + ist, +$t_j=\tglue$, falls $x_j$ Glue ist, +$t_j=\tkern$, falls $x_j$ Kern ist und +$t_j=\tpenalty$, falls $x_j$ eine Penalty ist. +\folg wn , \folg yn und \folg zn seien +die jeweils zugeh"origen Attribute wie in \the\chap.1.2\XX, wobei +$y_j=z_j=0$ f"ur $t_j=\tbox$ oder $t_j=\tkern$ oder $t_j=\tpenalty$. + +\subsubheading{Definition der Umbruchpunkte} +Ein \defi{m"oglicher Umbruchpunkt} ist ein Index $e\in\{1,\ldots,n\}$, +f"ur den eine der folgenden Bedingungen (I)--(IV) erf"ullt ist: + +\item{(I)} $t_e=\tglue$ und $t_{e-1}=\tbox$, +\item{(II)} $t_e=\tkern$ und $t_{e+1}=\tglue$, +\item{(III)} $t_e=\tpenalty$, wobei $w_e=0$, +\item{(IV)} $x_e$ ist ein \tex{discretionary}-Kommando. + +Jedem Umbruchpunkt wird eine Penalty zugewiesen. +Dabei ist f"ur die F"alle +(I) und (II) $p_e=0$. F"ur (III) ist $p_e$ der Wert von $x_e$. +Der Wert der Penalty von (IV) ist, wie oben erw"ahnt, der +Wert von \hbox{\vo|\hypenpenalty|\voff} +bzw. von \hbox{\vo|\exhyphenpenalty|\voff}. + +Nicht jeder Umbruchpunkt ist jedoch als Zeilenendpunkt geeignet, +falls dadurch z.B. die +Zeile zu locker oder zu eng ausgeschlossen werden m"u\3te. "Ubersteigt +die Bewertung des Zeilenausschlusses (s. \the\chap.3.4\XX) +eine bestimmte Toleranzgrenze (i.e. der +Wert von \hbox{\vo|\tolerance|\voff}), +so wird dieser Umbruchpunkt aus der Liste der +m"oglichen Umbruchpunkte entfernt. Ein Punkt, dessen Bewertung kleiner +als die Toleranzgrenze ausf"allt, hei\3t \defi{legaler Umbruchpunkt}. + +\subsubheading{Bewertung der G"ute des Zeilenausschlusses} +Sei $r$ der zum Zeilenausschlu\3 geh"orige Proportionalfaktor +(s. \the\chap.2.1\XX) +mit der zugeh"origen Ordnung $i$ des Ausschlu\3materials +der Zeile. Die G"ute des Zeilenausschlusses wird quantitativ durch die +folgende Funktion ausgedr"uckt: +$$\beta(r,i)=\cases 0,&i\ne0\,,\\\min(100\,r^3,10000),&i=0\,.\endcases$$ +D. E. Knuth bezeichnet den Wert $\bar\beta=\beta(r,i)$ als +\defi{Badness} der Zeile. +Diese Funktion ist heuristisch so festgelegt worden, da\3 sie f"ur +kleine $r$ niedrige Werte liefert und f"ur gr"o\3ere $r$ schnell +anw"achst. + +Mit dieser Funktion k"onnen nun die Zeilenausschl"usse klassifiziert +werden: + +{\advance\iindent by 40pt +\item{$\bar\beta>100$} +Dieser Wert kann nur durch eine Erweiterung der Zeile + erreicht werden. In diesem Fall gilt $r>1$. Dies bedeutet eine +Streckung um "uber 100\% der totalen Streckbarkeit. +Eine solche Zeile wird als \disp{sehr locker} (\tex{very loose}) +klassifiziert. +\item{$12.5<\bar\beta\le100$}In diesem Fall gilt $0.5\le r\le 1$. +Es ist eine +Streckung bzw. Stauchung um mindestes 50\% der totalen Steckbarkeit bzw. +Stauchbarkeit notwendig. +Die Zeile wird daher bei Erweiterung als \disp{locker} +(\tex{loose}) und bei +Verringerung als \disp{eng} (\tex{tight}) klassifiziert. +\item{$0<\bar\beta\le12.5$} Es gilt $0\le r<0.5$ in beiden F"allen. +Eine solche Zeile wird als \disp{% +unauf\-f"allig} (\tex{decent}) klassifiziert. + +} +Man erh"alt also vier Klassen: {sehr locker, locker, unauff"allig +} und +{eng}. +Man definiert zwei aufeinanderfolgende Zeilen als +\defi{optisch inkompatibel}, +wenn sie nicht in der gleichen und nicht in benachbarten Klassen liegen. +\Bemerkung +Die Festlegung der Bewertungsfunktion $\beta(r,i)$ und damit die +Klassifizierung beruht auf der Annahme, da\3 die einzelnen +Gluekomponenten wie in \the\chap.1.2 +gew"ahlt wurden, so da\3 im Fall $r=1$ der +dadurch entstehende Freiraum noch akzeptabel ist. Bei Zeilenerweiterung +ist $r>1$ zul"assig, aber unerw"unscht, so da\3 die Funktion in diesem +Fall schnell hohe Werte annimmt. +\endBemerkung + +\subsubheading{Bewertung der Zeilen} +Eine Indexfolge + $b_1<\ldots|}| ausgelagert wurde +in der Reihenfolge des Erscheinens (d.h. von links nach rechts). +Dieses eingef"ugte vertikale Material beeinflu\3t also nicht den +{Interline Glue}. + +\subsubheading{Die Seitenumbruchpunkte} +Das Verfahren f"ur den Seitenumbruch ist dem +Zeilenumbruchalgorithmus "ahnlich. + +Ein Seitenumbruch kann stattfinden +\item{a)} vor Glue, dem unmittelbar eine Box +der vertikalen Liste vorangeht, +\item{b)} vor Kern, falls dieser unmittelbar von Glue gefolgt +wird, +\item{c)}an einer Penalty. + +\subsubheading{Die Bewertung des Seitenumbruchs} +Eine Penalty $p\le-10000$ erzwingt somit einen Seitenumbruch. + +Jede Seite wird einzeln bearbeitet, d.h. es wird nicht wie beim +Zeilenumbruch voraus- oder zu\-r"uck\-schauend gearbeitet, +da dies zu viel Speicherungsaufwand erfordern w"urde. +Zu jedem in +Erw"agung gezogenen Seitenumbruchpunkt werden mittels einer +Bewertungsfunktion die ``Kosten'' $c$ berechnet: +$$c=\cases \beta\;, &\text{falls }\beta<\infty\text{ und } + p\le-10000\;,\\ + \beta+p\;, &\text{falls }\beta<10000 \text{ und }-10000|}| erm"oglicht es, Text aus einer +horizontalen Liste {(s. \advance\chap-1 \the\chap.4\XX)} +in die "au\3ere vertikale Liste zu "ubertragen. +Der Text wird erst nach Abarbeitung des Zeilenumbruchalgorithmus +hinter der Zeile eingef"ugt, in der er aufgetreten ist. Bei konstanter +Zeilentiefe kann man durch negativen vertikalen Kern zur +Zeilengrundlinie zur"uckkehren und den Text z.B. an den Zeilenanfang +setzen. "Ubertr"agt man in jeder Zeile den aktuellen Notenschl"ussel und +die aktuelle Vorzeichnung sowie das Liniensystem mit |\vadjust| in die +vertikale Liste, so k"onnen diese Zeichen nachtr"aglich noch eingef"ugt +werden. + +Bei Verwirklichung dieses Verfahrens treten folgende Probleme +auf: +\item{1)} Das Makro |\vadjust| mu\3 so eingesetzt werden, da\3 es in jeder +Zeile mindestens einmal vorkommt, unabh"angig von der Zeilenl"ange. +\item{2)} Taucht das Makro |\vadjust| mehrfach in einer Zeile auf, so +wird nach obigem Schema die Vorzeichnung mehrfach "ubereinander\-gesetzt. +Bei Notenschl"ussel- oder Tonartwechsel innerhalb der Zeile werden so +verschiedene Zeichen "ubereinandergesetzt. +\item{3)} F"ur Notenschl"ussel und Vorzeichnung mu\3 am Anfang jeder +Zeile gen"ugend horizontaler Raum freigelassen werden. +\medskip +Die erste Forderung kann erf"ullt werden, indem man die +"Ubertragung in Verbindung mit dem Setzen eines Taktstriches vornimmt. +Da in konventioneller Musik in jeder Zeile mindestens ein Taktstrich +vorkommt, ist die aufgestellte Forderung hier erf"ullt. + +Das mehrfache "Ubereinandersetzen + kann nur verhindert werden, indem man ein Verfahren +sucht, das nur das erste der durch |\vadjust| in die vertikale Liste +hinter der jeweiligen "ubertragen Elemente ausw"ahlt und setzt. Dieses +Verfahren kann jedoch nicht mit \TeX\ allein realisiert werden, da es +keine M"oglichkeit gibt, das erste Element nach der Box mit dem +Zeileninhalt zu erkennen. Es gibt ein \TeX-Kommando (|\special|), das +Informationen an das Treiber-Programm des jeweiligen Ausgabeger"ates +"ubergibt, welches diese abh"angig von der Zeilen- und Spaltenposition +auf dem Notenblatt auswerten und entscheiden kann, welche Zeichenfolge +gesetzt werden soll. Dieses Verfahren ist jedoch kompliziert und macht +das Notensatzsystem vom Ausgabeger"at abh"angig. + +Das Einf"ugen von freiem Raum am Zeilenanfang +kann mittels des Zeilenumbruchalgorithmus einfach +gel"ost werden. Der Glue, der hinter jeder Note gesetzt wird, mu\3 so +gestaltet werden, da\3 bei Zeilen\-% +umbruch jeweils die Breite des aktuellen +Notenschl"ussels und der Vorzeichnung freigelassen wird. Eine +M"oglichkeit, dies zu erreichen, wurde bereits in {\advance\chap-1 +\the\chap.3.6\XX} gezeigt. +\Bemerkung \item{1)} Wie in Kapitel {\advance\chap-1 \the\chap} +beschrieben, ist es m"oglich, +hinter jedem Zeichen eine Penalty einzuf"ugen, um den Zeilenumbruch vor +einem +Notenschl"ussel und Vorzeichenwechsel zu unterbinden, aber den Umbruch +danach zu f"ordern, d.h. einen Wechsel am Zeilenende zu bevorzugen. +Man erh"alt so die neue Vorzeichnung oder den neuen Notenschl"ussel am +Zeilenende und am Anfang der neuen Zeile. Die Verdopplung der Taktangabe +bei Wechsel l"a\3t sich jedoch mit diesem Verfahren +nicht erreichen, da die +Taktangabe nicht an jedem Zeilenanfang angegeben werden mu\3. +\item{2)} Die angegebene L"osung ist nicht befriedigend, da sie vom +Ausgabeger"at abh"angig ist, au\3erdem die Tiefe der Zeilen konstant +sein mu\3 und nicht alle oben genannten Forderungen erf"ullt werden. + +\subsubsubheading{Verfahren 2} +Eine zweite M"oglichkeit, das Problem zu l"osen, ist durch das +|\discretionary|-Komman\-do (s. {\advance\chap-1 \the\chap.3.1% +}\XX) gegeben. +Dieses Kommando bewirkt, da\3 + im Fall des Zeilenumbruches am Zeilenende der \tex{pre-break text} und +am Anfang der neuen Zeile der \tex{post-break text} eingef"ugt wird, +andernfalls wird der \tex{no-break text} gesetzt. Jedoch d"urfen +die Texte nur Elemente vom Typ Box, Kern oder Penalty enthalten. Ein +Erweitern oder Verringern der Abst"ande in diesem Text ist also nicht + m"oglich. Dies ist auch zur L"osung des Problems nicht notwendig. + +\Beispiel +\item{} +Im normalen Textsatz ist die Kontrollsequenz +|\-| gleichbedeutend mit + \hbox{|\discretionary{-}{}{}|}. Wird |\-| an den Trennstellen eines +Wortes eingef"ugt, so wird also im Falle des Zeilenumbruches an einer +dieser Stellen ein Trennstrich - eingef"ugt, andernfalls nichts. +\item{} +Um eine +Trennung des Wortes \disp{backen} zu erm"oglichen, kann +|ba\discretionary{k-}{k}{ck}en| notiert werden. +Im Falle eines Zeilenumbruches wird +|ck| zu |k-k|. Mit diesem Verfahren k"onnen alle Forderungen, die durch +die Satz- und Notationsregeln zur Gestaltung der ``"au\3eren Form'' + gegeben +sind, erf"ullt werden. Dazu ist es jedoch notwendig, die den +Zeilenumbruch bestimmenden Parameter so zu "andern, +da\3 ein Zeilenumbruch +nur an einem \tex{discretionary}-Kommando stattfinden kann. Dies kann +erreicht werden, indem man sowohl |\hyphenpenalty| und +|\exhyphenpenalty| als auch den zus"atzlichen Kosten +|\finalhyphendemerits| und |\doublehyphendemerits|, die in +Abh"angigkeit von der Umgebung der Zeile addiert werden, jeweils +negative Werte zuweist, so da\3 ein Zeilenumbruch an einem +\tex{discretionary}-Kommando eine niedrige Badness erzeugt. + +\Bemerkung +\item{1)} Auch in diesem Fall ist es nicht vorteilhaft, neben den +Trennungsm"oglichkeiten an einem Taktstrich zus"atzliche +Trennungsm"oglichkeiten innerhalb eines Taktes, z.B. nach einer +Note, anzugeben, jedoch aus einem anderen Grund als bei der ersten +L"osungsm"oglichkeit. \par +\item{}Da der Wert von |\hyphenpenalty| sich nicht +"andert, w"urden Umbruchpunkte innerhalb eines Taktes genauso +bewertet wie Umbruchpunkte am Taktstrich. +Es ist also keine Unterscheidung mehr m"oglich. Dies widerspricht jedoch +der Forderung, da\3 ein +Bruch der Zeile am Taktstrich in jedem Fall zu +bevorzugen ist. Aus diesem Grund wurde das Notensatzsystem so +konzipiert, da\3 kein Bruch innerhalb eines Taktes stattfinden kann. +Ist dies dennoch erw"unscht, so k"onnen zus"atzlich +Umbruchm"oglichkeiten durch Angabe von |\-| z.B. in der Taktmitte +angegeben werden. + +\item{2)} Mit diesem Verfahren k"onnen die Linien erst in der zweiten +Zeile unterlegt werden. Die erste Zeile mu\3 daher gesondert bearbeitet +werden. Dies ist kein Nachteil, denn dieses Vorgehen erm"oglicht es, +einen Einzug der ersten Zeile zu ber"ucksichtigen. Dies wird im +n"achsten Abschnitt n"aher beschrieben. +\endBeispiel + +\subsubheading{Konstruktionen} + Im folgenden werden die Konstruktionen f"ur das Liniensystem sowie den +Takt-, Tonart- und Notenschl"usselwechsel beschrieben. + +\subsubsubheading{Konstruktion der Notenlinien} +Eine Notenlinie wird durch eine schwarz ausgef"ullte Box, + in der \TeX-Terminologie +mit \disp{Rule} bezeichnet, dargestellt. + Die H"ohe der Rule entspricht der St"arke einer d"unnen Linie + ({\advance\chap-2 \the\chap.3.3}\XX). +Die Breite wird durch die aktuellen +Seitenbreite (d.h. |\hsize|) gegeben, wobei die Breite in der ersten +Zeile um den Betrag des Einzuges (|\parindent|) verk"urzt ist. +F"unf dieser Linien werden in einem Abstand von einer Notenkopfh"ohe +untereinander gesetzt, d.h. in einer vertikalen Liste verarbeitet. + +Da das Liniensystem nur unterlegt werden soll, darf es nicht in die +horizontale Berechnung eingehen. Dies kann wie in +{\advance\chap-1 \the\chap.2.2} \XX +beschrieben, +durch Erzeugen einer horizontalen Box der Breite 0\pt\ geschehen, +wobei das Liniensystem "uber den rechten Rand hinausragt. + +Es ergibt sich so die folgende {Box-Glue-Kombination}: +\begindisplay +|\hbox to 0pt{\vbox{\hr\kern\nhh\hr\kern\nhh\hr\kern\nhh\hr|% +|\kern\nhh\hr}|, +\enddisplay + wobei |\hr| die Rule |\hrule height|\| depth +0pt width|\ bezeichnet. +\Bemerkung +Das Liniensystem ist so angelegt, da\3 die unterste Linie mit +der Grundlinie der ganzen Zeile "ubereinstimmt ({\advance\chap-1 +\the\chap.2.4}\XX). +Dies erschien bei der Konzeption des Notensatzsystems unter Verwendung +von \TeX\ g"unstiger. In anderen Notensatzsystemen, z.B. dem von Gourlay +(\lit{\gourlay}) +wird jedoch die Mittellinie (dritte Linie) als Grundlinie +ausgezeichnet. + +\subsubsubheading{Der Taktwechsel} +Zu unterscheiden ist zwischen den beiden Taktartnotationen: +\item{a)} Taktangabe innerhalb des Zeilensystems, +\item{b)} Taktangabe oberhalb des Systems. + +Im Fall b) wird der Taktwechsel am Zeilenende nicht zus"atzlich +angek"undigt. Er soll deshalb hier nicht betrachtet werden. + +Die Forderungen an die Taktangabe k"onnen leicht erf"ullt werden durch +das Kommando + +|\discretionary{|\|}| +\par +\indent\hbox{}\hskip75pt +|{|\\\\|}| +\par +\indent\hbox{}\hskip75pt +|{|\|}|, + +wobei \ die Box bezeichnet, die die aktuelle Taktangabe +enth"alt. Entsprechendes gilt f"ur \ und \. + +\subsubsubheading{Der Tonartwechsel} +Der Tonartwechsel kann auf "ahnliche Weise beschrieben werden. Jedoch +ist zu beachten, da\3 die vorher g"ultige Tonart aufgel"ost werden mu\3. +Dazu werden die Versetzungszeichen in zwei verschiedenen Token-Registern +gespeichert (s.\lit{\TeXbook, S.121 ff (Kap. 15)}), wobei das eine die +Versetzungszeichen der aktuellen Tonart und das +andere die aktuelle Tonart mit den jeweiligen Aufl"osungszeichen +enth"alt. + +Bei Tonartwechsel wird zun"achst nur das erste Register durch die neue +Tonart ersetzt, und nachdem der Doppelstrich, die ``aufgel"oste'' vorige +Tonart und die neue Tonart gesetzt wurden, das zweite Register durch die +aktuelle ``aufgel"oste'' Tonart ersetzt. \par +Die Forderungen, die an den +Tonartwechsel gestellt sind, werden dann durch das Kommando + +|\discretionary{|\\\|}| +\par +\indent\hbox{}\hskip75pt +|{|\\\|}|\hfil\break +\indent\hbox{}\hskip75pt +|{|\\\|}|\par + +erf"ullt. + +Gleichzeitig mu\3 die Definition der Kontrollsequenz |\-|, + die den Zeilenumbruch nach einem +Taktstrich regelt, der neuen Tonart angepa\3t werden, und zwar in +\begindisplay +|\discretionary{}{|\\% +\|}{}|. +\enddisplay +\subsubsubheading{Der Notenschl"usselwechsel} +Im Unterschied zu Taktart und Tonart besitzt der Notensch"ussel im +Zeileninneren eine andere Gr"o\3e als am Zeilenrand, es mu\3 also ein +anderes Zeichen verwendet werden. Au\3erdem mu\3 nicht unbedingt +zus"atzlicher horizontaler Raum zur Verf"ugung gestellt werden. Aus +diesem Grund wird der Notenschl"ussel im Zeileninneren behandelt wie die +Versetzungszeichen vor einer Note im Taktinneren. Dies soll im n"achsten +Kapitel n"aher erl"autert werden. + +Wie bei der Tonart wird auch der Notenschl"ussel in einem Token-Register +gespeichert, das bei Schl"ussel\-wechsel ausgetauscht wird. Es ist zu +beachten, da\3 ein Schl"usselwechsel eine Umpositionierung der +Versetzungszeichen der Vorzeichnung notwendig macht. + +\Beispiel +%Versetzungszeichen +{\hsize7cm +\advance\hsize2\iindent\parindent=2\iindent +\beginsong +\vio\Es\hskip20pt \E\hskip20pt\bass\Es\ \hfill +\=\endsong} +\endBeispiel +\vskip-1cm + +\Bemerkung + +\item{1)} Da nur Taktart und Tonart einen \tex{pre-break text} +ben"otigen, +kann eine verfeinerte Bewertung erfolgen, indem man |\exhyphenpenalty| +und |\hyphenpenalty| verschiedene Werte zuweist, um einen Umbruch bei +Takt- oder Tonartwechsel zu bevorzugen. + + +\item{2)} Die genauen Definitionen sind im Format zu finden. +\endBemerkung + +\subsubheading{Abstecken} + +Das Problem des gleichm"a\3igen Absteckens kann mit \TeX\ auf einfache +Weise gel"ost werden, indem man nach dem in \XX +{\advance\chap-1 \the\chap.2.4} angegebenen +Verfahren den \tex{Interline Glue} festlegt. +Nach \XX \the\chap.1.2 +betr"agt die Berechnungsgrundlage f"ur den Abstand +zwischen zwei Liniensystemen zwei Rastralh"ohen. Dieser Wert wird nun +f"ur den nat"urlichen Abstand des Parameters |\baselineskip| angesetzt. + +F"ur den Parameter |\lineskiplimit| ist eine halbe Rastralh"ohe +vorgesehen. Dieser Wert wird auch f"ur den nat"urlichen Abstand von +|\lineskip| festgelegt. +W"ahlt man nun als Stauchm"oglichkeit f"ur |\baselineskip| und +|\lineskip| den gleichen Wert, so ist gew"ahrleistet, da\3 die Zeilen +sich bei maximaler Stauchung nicht "uberschneiden k"onnen. Die +Abst"ande k"onnen bis zu einer Rastralh"ohe vergr"o\3ert werden. + +Gebe der Parameter |\staffheight| + die Rastralh"ohe an. Dann +ergibt sich f"ur die {Interline-Glue}-Parameter: +\begindisplay +|\baselineskip = 3 \staffheight plus \staffheight minus 1/2 \staffheight| +\cr +|\lineskiplimit = 1/2 \staffheight| +\cr +|\lineskip = 1/2 \staffheight plus \staffheight minus 1/2 \staffheight| +\enddisplay + +Dieser Interline Glue wurde auch f"ur die +im Anhang D gesetzten Beispiele verwendet. + +\vfill\eject + diff --git a/macros/mtex/documentation/mdoc7.tex b/macros/mtex/documentation/mdoc7.tex new file mode 100644 index 0000000000..574eda9eb4 --- /dev/null +++ b/macros/mtex/documentation/mdoc7.tex @@ -0,0 +1,398 @@ +\heading{Punktierung bei einstimmigem Notensatz} +Im Noten\/\disp{satz}\/ bezeichnet \defi{Punktierung} die pr"azise +Bestimmung der horizontalen Position +aller Notenschriftelemente, die horizontal Raum erfordern \lit{\gomb}. +Diese ``pr"azise Bestimmung'' erfolgt im wesentlichen nach +Gesichtspunkten wie Gleichm"a\3igkeit und "Ubersichtlichkeit. +K. Hader (\lit{\hader}) dr"uckt dies so aus:\par\medskip +{\leftskip=30pt \rightskip=\leftskip\sl +Aufliegende Seiten sollen als m"oglichst gleichm"a\3iges Bild +erscheinen, nicht im Hinblick auf eine gleiche Taktanzahl (in den +Notenzeilen), sondern im gleichwertigen Raumverh"altnis gleichwertiger +Noten. +In dieses gleichwertige Raumverh"altnis sind aber nicht nur die Noten, +sondern auch die dazugeh"origen Versetzungszeichen, Wechselschl"ussel +u."a. einzubeziehen. Ganz besonders zu ber"ucksichtigen sind die Silben +der Gesangslinie bei Klavier- und Gesangssystemen.\par} +\medskip +D.A. Gomberg \lit{\gomb} teilt die Notenschriftelemente aus diesem Grund +in drei Gruppen ein: +\item{A)}Die Zeichen, die die horizontale Einteilung der Zeile, d.h. den +zeitlichen Ablauf des Musikst"uckes, bestimmen. +\item{}Dazu geh"oren: Noten (keine Vorschlagnoten), Pausen, Taktstriche, +Taktangaben und Vorzeichnung sowie alle Wertpunkte. +\item{B)}Die Zeichen, die ``in das gleichwertige Raumverh"altnis +einzubeziehen'' sind. Gomberg nennt diese Zeichen +\disp{Hunks}.\item{}Dazu geh"oren: Versetzungszeichen, +Wechselschl"ussel, Z"asuren, Vorschlagnoten u."a., sowie die Silben der +Gesangslinie. +\item{C)}Die Zeichen, die keine horizontale Auswirkung haben. Dies sind +z.B. alle Zeichen, die in den freien Raum ober- oder unterhalb der +Noten, d.h. vertikal, ausweichen k"onnen. +\item{}Dazu geh"oren: Akzente, +Spielanweisungen, Bogen, Balken und Crescendo-Zeichen. +\par +\medskip +Die Punktierung bezieht sich also auf die Positionierung der Elemente +der Gruppen A und B nach den Gesichtspunkten, die Hader angibt. +Auf die Positionierung der Elemente der Gruppe C soll in den folgenden +Kapiteln {\advance\chap2 \the\chap} +und~{\advance\chap3 \the\chap} n"aher eingegangen werden. \XX + + +\subheading{Regeln zur Bestimmung des Ausschlusses} +Das Punktierungsproblem +l"a\3t sich zur"uckf"uhren auf die Bestimmung eines +geeigneten Ausschlu\3\-schemas. +\subsubheading{Ausschlu\3schemata}\par +Wie schon mehrfach erw"ahnt, l"auft die Notenschrift einer Komposition +entlang einer gedachten horizontalen Zeitachse. +Um die zeitliche Struktur der Komposition leichter erfassen zu k"onnen, +wird jeder Note zus"atzlich zu ihrer \disp{Gestalt} ein vom Notenwert +abh"angiger \disp{Raum} zugeordnet, in dem sie plaziert wird. +Diese Abbildung ist aus satztechnischen Gr"unden nicht linear bzgl. der +Tondauer und nicht eindeutig f"ur jede Art von Musikst"uck festgelegt. +Meist bestimmt der Setzer selbst die Art des Ausschlusses. + +K. Hader \lit{\Hader} gibt f"ur den Handnotensatz +als Richtschema f"ur den Ausschlu\3 einzelner +Notenwerte innerhalb einer Notenzeile eines Systems folgende Faustregel +an: + +Der horizontale Raum, den eine Viertelnote einnimmt, entspricht +dem Raum, den $1\frac12$ Achtelnoten einnehmen w"urden. +Der Raum, den eine Halbenote einnimmt, entspricht dem Raum von +2 Achtelnoten, der Raum, den eine + Ganzenote einnimmt, dem von 3 Achtelnoten. + +Dabei wird der Raum, den eine Achtel einnimmt, +nach dem Inhalt der jeweiligen Notenzeile bestimmt. + +D.~A.~Gomberg~\lit\gomb\ beschreibt ein anderes Vorgehen. +Nach Gomberg bestimmt der Setzer zun"achst einen \disp{Grundnotenwert}. +Dies ist +der am h"aufigsten auf dem Notenblatt auftretende Notenwert. +Der den Notenwerten zugeordnete Raum ist eine +Funktion dieses Grundnotenwertes. +Als horizontale Ma\3einheit w"ahlt +Gomberg die Breite eines ausgef"ullten +Notenkopfes. Ihr entspricht in unserem Notensatzsystem der Wert von +|\nhw| (s. {\advance\chap-3 \the\chap}.3.3). + +Im Gegensatz zu Hader arbeitet +Gomberg mit folgender Tabelle als Richtschema (in Einheiten von |\nhw|): +\medskip +\setbox0=\vbox{\offinterlineskip% +\halign{\strut#\hfil&&\vrule\quad #\hfil\quad\cr +Bezeichnung des Ausschlusses\quad +&\hfil ``Sechzehntel''&\hfil ``Achtel'' +&\hfil ``Viertel''&\hfil ``Halbe''\cr +\noalign{\hrule} +``eng''&1.5&2.5&3.5&4.5\cr +``universell''&2&3&4&5\cr +``weit''&2.5&3.5&4.5&5\cr +``locker''&3&4&5&6\cr +``sehr locker''&3.5&4.5&6&7\cr}}\centerline{\box0} +\medskip +Die Werte in den Zeilen geben jeweils den Raum, den eine Note mit +jeweiligem Notenwert ben"otigt, f"ur ein Ausschlu\3schema an. +F"ur kleinere bzw. gr"o\3ere Notenwerte als die in der Tabelle +vorhandenen werden die Werte der ersten +bzw. letzten Spalte der Tabelle benutzt. + +\Beispiel +Zur Anwendung bestimmt man +den Grundnotenwert, z.B. ``Achtel'', +und w"ahlt einen Ausschlu\3 der zugeh"origen Spalte, +z.B. 3.5|\nhw|. +Dann sind die zugeh"origen Ausschl"usse f"ur alle anderen +Notenwerte in der gleichen Zeile der Tabelle zu finden, in der sich der +Ausschlu\3 des Grundnotenwertes befindet (im Beispiel: ``weit''). +\endBeispiel + +Bei diesem Vorgehen werden die Abst"ande zu Beginn +festgelegt und sind im +wesentlichen nicht mehr ver"anderbar. Im Unterschied dazu wird bei Hader +erst in jeder einzelnen Zeile der Raum, den eine Achtel einnimmt, +bestimmt. Dieses Vorgehen ist aber beim automatisierten Notensatz nicht +m"oglich, da der Inhalt der Zeilen erst nach Ablauf des Zeilenumbruch\-% +algorithmus bekannt ist. + +\Bemerkung +\item{1)}Das obige Ausschlu\3schema gilt bei Noten ohne Wertpunkt +(s. {\advance\chap-3 \the\chap}.3.1). +Jedem Wertpunkt wird zus"atzlich ein horizontaler Raum +von 0.5|\nhw| zugewiesen. Diese Erweiterung ist also +nicht abh"angig vom Notenwert. + +\item{2)}Die Abstandsverh"altnisse aller +F"alle, die Gomberg angibt, entsprechen nicht + Haders Richtschema. +Nur der ``enge'' Ausschlu\3 kommt diesem nahe. +Dieses Schema erscheint Gomberg demnach nur +f"ur sehr engen Ausschlu\3 g"unstig, +denn bei lockerem Satz ordnet er einer Halben weniger freien Raum zu. +Unterschiedlich ist auch, da\3 Gomberg +Halbe und Ganze in dieser Hinsicht gleichbehandelt, wohingegen + Hader keine Angaben zum Ausschlu\3 +von kleineren Notenwerten wie Sechzehntel usw. macht. +\item{} +Ein Vergleich verschiedener Notenbl"atter verschiedener Verlage +zeigt, +da\3 sowohl +Ganze und Halbe als auch Sechzehntel und kleinere +Notenwerte unterschiedlich ausgeschlossen werden. + +\item{3)}Im Gegensatz zum manuellen Satz ist es beim +automatisierten Layout-Proze\3 notwendig, die Abst"ande zu Beginn des +Musikst"uckes zuzuweisen, um einen gleichm"a\3igen Ausschlu\3 zu +gew"ahr\-leisten. +\item{} +Gomberg hat mit seinem + Verfahren in den meisten F"allen Ergebnisse, +``die einem als angenehmste auffallen'', mit ``universellem'' Ausschlu\3 +erzielt. Dieser erlaubt +das Einf"ugen von Versetzungszeichen und +einigen anderen Verzierungen der Note ohne Vergr"o\3erung des +Zwischenraumes zwischen den Noten. \item{} +Das Einf"ugen von Versetzungszeichen +u."a. ist ein Problem des automatisierten sowie des manuellen Notensatzes +und wird daher sp"ater noch genauer behandelt (s. \the\chap.2.2\XX). +\endBemerkung + +\subsubheading{Hunks} +Eine Note kann neben Notenwert und Tonh"ohe (siehe Kapitel +{\advance\chap1 \the\chap}), +die ihre Gestalt bestimmen, +noch weitere Attribute besitzen, die meistens durch Voranstellen eines +Zeichens ausgedr"uckt werden. Diese Elemente wurden in Gruppe B zusam\-% +mengefa\3t. Sie ben"otigen +horizontalen Raum und st"oren somit die Regel, da\3 die Horizontale den +zeitlichen Ablauf darstellt. +Gomberg verwendet daf"ur den Ausdruck ``Hunks'', was etwa +bedeutet, da\3 beim Satz solcher Zeichen mit horizontalem Raum zu +``geizen'' ist. + +\defi{Hunks} sind also +Notenschriftelemente, die in vorhandenen horizontalen +Freiraum einzuf"ugen sind. Nur bei drohender "Uberlappung mit anderen +Notenschriftelementen ist dieser Raum zu erweitern. + +\subsubheading{Kriterien f"ur den Zeilenumbruch beim Notensatz} + +Die Kriterien, die den Zeilenumbruch eines Musikst"ucks bestimmen, sind +andere als die f"ur den Textsatz. Die Kriterien, die \TeX\ f"ur den +Textsatz verwendet und unterst"utzt, k"onnen also nicht unbedacht +"ubernommen werden. +Im Unterschied zum Notensatz wird das Einf"ugen eines Umbruchpunktes + direkt nach einem Wort unterst"utzt. Darauf wird +nachfolgender Glue +bis zum n"achsten Wort entfernt. Da +die letzte Zeile nicht bis zum Ende aufgef"ullt sein mu\3, +kann ein gleichm"a\3iger Umbruch erzielt werden. + +Dem gegen"uber mu\3 f"ur den Zeilenumbruch beim Notensatz zwischen +einzelnen Notenschriftelementen unterschieden werden. +Dies bedeutet: +\item{1.} Umbruch direkt nach einer Note ist nicht erlaubt, +\item{2.} Umbruch direkt vor +einer Note ist nur ausnahmsweise in der Taktmitte erlaubt, +\item{3.} Umbruch direkt vor einem Taktstrich ist nicht erlaubt, +\item{4.} Umbruch direkt nach Taktstrich ist erw"unscht und g"unstig, +\item{5.} Umbruch zwischen Hunks und Note oder Taktstrich ist +nicht erlaubt. +\item{6.} Am Zeilenanfang m"ussen Notenschl"ussel +und Vorzeichnung eingef"ugt werden (s. Kapitel +{\advance\chap-1 \the\chap}). + + +\subheading{Ausf"uhrung des Punktierens} +\subsubheading{Bestimmung der Zeilenauschlu\3parameter} + +Wie in {\advance\chap-2 \the\chap}.2.1\XX\ +bemerkt, steuert \TeX\ den Zeilenauschlu\3 im wesentlichen +durch den Glue hinter jedem Wort abh"angig vom Wert des Glueparameters +|\spaceskip|. + +Der Notenfont kann nicht als normaler Textfont aufgefa\3t werden, +sondern "ahnelt in seinem Aufbau einem mathematischen Zeichensatz, +da eine Note erst aus mehreren Elementen +des Zeichensatzes zusammengesetzt werden mu\3. Aus diesem Grund wurde +der dem Notenfont zugeh"orige Glue +(\tex{Interword Glue}) wie in einem mathematischen Zeichensatz +mit 0\pt\ vorbelegt \lit\Texbook. + +Jedem Notenwert kann nun ein Glue zugewiesen werden, der + dem Glueparameter |\spaceskip| zugewiesen wird, + wenn eine Note +dieses Notenwertes gesetzt werden soll. + Sollte es vorkommen, da\3 der +|\spaceskip| verschwindet, so kann auch durch den Interword Glue kein +Vorschub erfolgen. +Abh"angig von der +Breite der einzuf"ugenden +Hunks wird dieser |\spaceskip| nochmals ver"andert (s. \the\chap.2.2). +Dabei kann es vorkommen, da\3 im Laufe der Berechnungen sich +|\spaceskip| = 0 pt ergibt. Nach der Regel w"urde in diesem Fall der +{Interword Glue} des aktuellen Fonts eingef"ugt. Da dieser jedoch mit 0 +pt vorbelegt ist, kann kein Vorschub erfolgen. + +Es haben sich verschiedene Ausschlu\3schemata ergeben +auf die durch Aufruf der +Makros |\hsmall| (Hader), |\small|, |\universal|, |\wide| +und |\loose| (Gomberg) zugegriffen werden kann. +Dem Benutzer steht es frei, diese Makros zu "andern. +Es ist so m"oglich, jeden beliebigen Ausschlu\3 zu verwenden. + +F"ur die vorgegebenen +Ausschlu\3verfahren wurden die Verfahren von Gomberg und Hader +kombiniert. +Der Raum $w$, der einem Notenwert zugewiesen wird, richtet sich jeweils +nach einem fest vorgegebenen Ausschlu\3schema in der von Gomberg +angegebenen Art. +Aus diesen Abst"anden +erh"alt man als Richtschema die +Raumverh"altnisse der einzelnen Notenwerte untereinander. + +Mit diesem Richtschema k"onnen nun die Gluekomponenten bestimmt werden +unter Ber"ucksichtigung der folgenden "Uberlegungen: +\medskip +\item{1)}Der nat"urliche Abstand des zugeordneten + Glue entspricht immer $w-\hbox{|\nhw|}$. +\item{2)} +Die Streck- und Stauchkomponenten eines +einzelnen Glue werden so gew"ahlt, +da\3 sie das Raumverh"altnis der Notenwerte ausdr"ucken. Aus der +Berechnung des Proportionalit"atsfaktors $r$ (s. +{\advance\chap-2 \the\chap}.2.1\XX) +folgt sofort, da\3 +die Raumverh"altnisse in jeder +Zeile erhalten bleiben. +W"ahlt man f"ur alle Streck- und Stauchkomponenten jeweils den gleichen +Wert, so wird jedem Glue der gleiche konstante Wert +angef"ugt bzw. entfernt. + +\Bemerkung +F"ur den Ausschlu\3 in +komplizierteren Notengebilden, wie z.B. verbalkten Noten, l"a\3t sich +dieses Verfahren jedoch nicht mehr gleichm"a\3ig durchf"uhren. + +\item{}Da Notengruppen dieser Art in einer Box +zusammengefa\3t werden m"ussen (s. {\advance\chap2 \the\chap}.3\XX), +verlieren die inneren Noten + alle Stauch- und +Streckm"oglichkeit, da z.B. die L"angen der Balken nur f"ur die +nat"urliche Breite berechnet werden k"onnen. +In einem solchen Fall wird also bei Zeilenausschlu\3 nur der nat"urliche +Glue eingef"ugt. +Aus diesem Grund wurden die +"ubrigen Streck- und Stauchm"oglichkeiten +nicht zu gro\3 angesetzt, da sich dies sonst +optisch ung"unstig auswirkt. + +Beispiele f"ur die verschiedenen Ausschlu\3schemata, die in das +entwickelte Format aufgenommen wurden, sind im Anhang A +zu finden. +(|\hsmall| entspricht dem vom Hader vorgegebenen +Ausschlu\3schema, wenn man als Einheit +wiederum |\nhw| verwendet. Der Ausschlu\3 ``sehr locker'' wurde nicht +realisiert.) + +\subsubheading{Einbeziehen der Zeichen der Gruppe B}\par + +F"ur den einfachen Notensatz ist es nur notwendig, zu wissen, ob vor der +Note f"ur Hunks gen"ugend Platz vorhanden ist. Dies legt es nahe, +den einer Note zugeordneten Glue + erst dann endg"ultig einzuf"ugen (durch |\|{\tt\char`\ }), +wenn bekannt ist, ob f"ur Hunks Raum ben"otigt wird. +Dazu werden Hunks, die zwischen zwei Noten oder +zwischen Note und Taktstrich oder +Taktstrich und Note auftreten, +in einer Box akkumuliert. Abh"angig von der Breite dieser +Box kann nun der erforderliche +Glue zwischen den Noten festgelegt werden. Dann erst wird diese Box +zusammen mit dem zugeh"origen Notenschriftelement plaziert. + +Ist die Breite der ``Hunkbox'' kleiner als der nat"urliche Abstand des +aktuellen |\spaceskip|, so bleibt der |\spaceskip| unver"andert, +andernfalls wird der nat"urliche Abstand des +|\spaceskip| um die Differenz erh"oht. +W"ahrend die Streckm"oglichkeit des aktuellen |\spaceskip| +erhalten bleibt, wird die Stauchm"oglich\-keit entfernt. + + +\subsubheading{Einf"ugen von Glue zwischen Elementen der Gruppe A} + +Im vorigen Abschnitt wurde das Ausschlu\3schema f"ur Noten bestimmt. +Dieses kann auch f"ur den Ausschlu\3 der Pausen verwendet werden. + +F"ur den nat"urlichen Abstand nach Taktstrichen wurden in der Literatur +keine Werte angegeben. Der Vergleich mehrerer Notenbl"atter ergab jedoch +einen mittleren Abstand von |\nhw|. Dies ist auch der Abstand, der +"ublicherweise nach Notenschl"ussel und Vorzeichnung am Zeilenanfang und +nach Taktwechsel eingehalten wird. + +F"ur die restlichen Zeichen der Gruppe A wurde also nur ein einziger +Glueparameter verwendet. Dies tr"agt dem Gesichtspunkt der +Gleichm"a\3igkeit Rechnung. + +Da ein Zeilenumbruch nach einem Taktstrich vorzuziehen ist, gliedert +sich das Bestimmungsproblem des geeigneten Glue zwischen zwei Elementen +der Gruppe A auf in die Festlegung des Glue an Taktstrichen und der +Festlegung des Glue vor den anderen Zeichen der Gruppe A. Dies soll im +folgenden f"ur die Noten durchgef"uhrt werden. + +\subsubsubheading{Das Festlegen der Box-Glue-Penalty-Folge vor Noten} +Das Festlegen des Glue vor Noten geschieht nach folgenden +Gesichtspunkten: +\item{1)} +Es mu\3 eine M"oglichkeit vorhanden sein f"ur einen Zeilenumbruch +zwischen zwei Noten. Dabei mu\3 ber"ucksichtigt werden, da\3 nicht direkt nach +der vorangehenden Note umgebrochen wird, +sondern der zugeh"orige |\spaceskip| am Zeilenende gesetzt wird. +\item{2)}Es m"ussen eventuell auftretende Hunks vor der Note einbezogen +und dabei ein Umbruch zwischen Hunks und Note verhindert +werden. + +Nach den Kriterien f"ur Umbruchpunkte +(s. {\advance\chap-2 \the\chap}.3.3\XX) kann +ein Umbruch nach einem Glue-Element erzielt werden mit +\begindisplay +|\penalty10000\|{\tt\char`\ }|\penalty| \hbox{$x$}\,. +\enddisplay +Dabei bedeutet +|\|{\tt\char`\ }, da\3 Glue vom aktuellen Wert von |\spaceskip| gesetzt +wird. +|\penalty10000| verhindert einen Umbruch vor dem Glue, wogegen die +zweite Penalty einen m"oglichen Umbruchpunkt bildet, falls $x<10000$. + +Es mu\3 ber"ucksichtigt werden, da\3 Hunks vor Noten +abh"angig sind vom |\spaceskip| der vorangegangenen Noten. +Die Hunks werden in den vorhandenen Raum zwischen zwei Noten eingef"ugt. +Es ergibt sich also eine Folge +\begindisplay +|\penalty10000\|\hbox{{\tt\char`\ }}|\penalty|\hbox{$x$}% +|\hskip-\hunkskip\box\hunkbox|\;, +\enddisplay +wobei |\hunkskip| die Breite der ``Hunkbox'' angibt. +Bei Umbruch an der Penalty $x$ erscheint +der Glue der vorangehenden Note am Zeilenende und +|\hunkskip| wird entfernt. Das erste Element der neuen Zeile wird +der Inhalt der |\hunkbox|. + +F"ugt man an Stelle von |\penalty| $x$ das |\discretionary|-Kommando +von {\advance\chap-2 \the\chap}.3.1\XX\ ein, +so erh"alt man alle in \the\chap.1.3\XX\ geforderten Eigenschaften f"ur +den Umbruch zwischen zwei Noten. +Es ergibt sich so +\begindisplay +|\penalty10000\|\hbox{{\tt\char`\ }}|\-|% +|\hskip-\hunkskip|\;. +\enddisplay + +\subsubsubheading{Glue an Taktstrichen} +Der Glue vor Taktstrichen entspricht dem Glue vor Noten, jedoch darf ein +Umbruch an dieser Stelle nicht erlaubt werden. Aus diesem Grund wird +|\-| nicht vorher eingef"ugt, sondern erst direkt nach dem Taktstrich. + +\vfill\eject diff --git a/macros/mtex/documentation/mdoc8.tex b/macros/mtex/documentation/mdoc8.tex new file mode 100644 index 0000000000..d766fa8211 --- /dev/null +++ b/macros/mtex/documentation/mdoc8.tex @@ -0,0 +1,617 @@ +\heading{Setzen der Notenschriftelemente} + +\def\adchap#1{{\advance\chap#1{}\the\chap}} +In diesem Kapitel sollen die wichtigsten Notenschriftelemente behandelt +werden. Dabei wird jedoch das Setzen der ver"anderlichen Zeichen wie +z.B. der +Balken und Bogen sowie der Artikulationszeichen und anderer Zeichen, +die keinen horizontalen Raum ben"otigen, +in den folgenden Kapiteln~\adchap1 +und~\adchap2 behandelt. +Die Umgebung des mehrstimmigen Notensetzens wird in +Kapitel~\adchap3 beschrieben. +\subheading{Regeln zur Notation der Notenschriftelemente} + +\item{N1)} Der Aufbau der Noten: + +\item{} +Die Note besteht aus dem hohlen oder ausgef"ullten Kopf und dem Hals, der +oft auch als Stiel bezeichnet wird und +an dem ein oder mehrere F"ahnchen angebracht sein k"onnen. + +\item{N2)} Akkorde: +\item{} +Erklingen mehrere T"one gleichzeitig, so verbindet man sie +mit einem \disp{gemeinsamen} Hals. + +\item{N3)} Balken: +\item{} +Mehrere aufeinanderfolgende kleine Notenwerte schreibt man in der +\disp{Vokalmusik} mit F"ahnchen, wobei jeder Textsilbe ein eigenes, von +den anderen getrenntes Notensymbol zugeordnet wird. In der +\disp{Instrumentalmusik} findet ausschlie\3lich die Schreibweise mit +Balken Anwendung. Die Anzahl der Balken entspricht der Anzahl der +F"ahnchen. + +\item{N4)} Die Stellung der Halsrichtung: +\itemitem{a)} Einzelne Noten auf oder "uber der Mittellinie erhalten bei +einstimmiger Notation den Hals links vom Kopf nach unten angebracht. +Noten unterhalb der Mittellinie sind rechts vom Kopf nach oben zu +stielen. + +\itemitem{b)} Bei Akkorden richtet sich die Stellung und Richtung des +Notenhalses nach der am weitesten von der Mittellinie entfernten Note +(\disp{Bezugsnote}). Bei gleichem Abstand weist der Hals nach unten. + +\itemitem{c)} Bei zu verbalkenden Noten richtet sich die Lage des Balkens +und damit die Richtung aller Notenh"alse dieser Notengruppe entweder wie +bei Akkorden nach dem am weitesten von der Mittellinie entfernten +Notenkopf (\lit{\ziegen}), oder er +wird durch die Lage der Mehrzahl der Noten der Gruppe bestimmt. + +\itemitem{d)}Wird zweistimmig in {einem} System notiert, so gilt: + alle Noten der Oberstimme sind nach oben, +die der Unterstimme nach unten zu stielen. +\itemitem{} +Aus der Stimmf"uhrung kann sich ergeben, da\3 Zweistimmigkeit in +Einstimmigkeit "uber geht. Dann erhalten diese Noten jeweils einen Hals +nach oben und nach unten. +Dabei sind die 7. und 8. Orthographische Regel von +K. Hader (\lit{\hader}) zu beachten: + +{\leftskip=60pt\rightskip=30pt\sl +Eine ``ausgef"ullte'' (schwarze) und eine ``hohle'' Note, ebenso eine +Note +mit Wertpunkt und eine Note ohne Wertpunkt k"onnen gleichzeitig niemals +durch eine doppeltgestrichene ``hohle'' oder ``ausgef"ullte'' Note +dargestellt werden. Eine doppeltgestrichene schwarze Note ohne Wertpunkt +kann nach beiden Seiten einen verschiedenen Wert darstellen. +\par} + +\Beispiel + +{\hsize8cm +\advance\hsize2\iindent +\parindent2\iindent +\small +\beginsong +\vio\C\two{\v5}{\v3}\two{\v4}{\v4}% +\two{\group{\\{\v5}\\{\v6}}{\\{5}\\{6}}\ubeam12\go} +{\group{\\{\v2}\\{\v3}}{\\{2}\\{3}}\lbeam12\go}\two{\v7}{\v3}\|% +\two{\group{\\{\hskip\seminhw\v1}\\{\global\advance\sk-\seminhw +\v3}}{\\{1}\\{3}}\ubeam12\go} +{\group{\\{\v5}% +\\{\v3}}{\\{5}\\{3}}\lbeam12\go}\two{\v3}{\v3}\two{\h5}{\h3}\|% +\hfill +\endsong} +\endBeispiel +\vskip-1cm + +\item{N5)}Die L"ange des Notenhalses: +\item{} Die L"ange des Notenhalses ist +nicht konstant f"ur alle Noten, sondern abh"angig von der Position im +Liniensystem. Die L"ange des Notenhalses bei Akkorden richtet sich nach +der am weitesten von der Bezugsnote entfernten Note. F"ur die L"ange des +Notenhalses innerhalb einer Balkengruppe gelten gesonderte Regeln +(s. {\advance\chap1 \the\chap.1.2}\XX). + +\item{N6)} F"ahnchen: + +\item{} +F"ahnchen an einzelnen Noten werden immer rechts vom Notenhals notiert. +Sie werden auch nicht in die horizontale Berechnung z.B. f"ur den +Abstand zwischen zwei Noten einbezogen. + +\item{N7)} Hilfslinien: +\item{} +Noten, die au\3erhalb des Liniensystems positioniert werden m"ussen, sind +mit Hilfslinien zu notieren. +\item{N8)} Stellung der Notenk"opfe bei Akkorden\item{} +Gibt es innerhalb eines Akkordes Sekundintervalle, so wechselt der +Notenkopf der am weitesten von der Bezugsnote entfernten Note des +Intervalls auf die andere Seite des Notenhalses. + +\Beispiel +{\hsize7cm +\advance\hsize2\iindent +\parindent2\iindent\small +\beginsong +\vio\C +\rchord\v9\h6\h4\lefttrue\h8\endchord +\lchord\v0\h3\h5\leftfalse\h2\endchord +\lchord\v1\h3\leftfalse\h4\endchord \ \hbox{\rm aber:} +\lchord\v0\h4\h6\leftfalse\h5\endchord +\hfill\null\endsong +\vskip-1cm +\leftline{\indent\rm $\bullet $ = ``Bezugsnote''.} +} +\endBeispiel + +\item{N9)}Stellung der Wertpunkte (Verl"angerungspunkte): +\itemitem{a)} +Die Wertpunkte erscheinen unabh"angig von Umgebung immer rechts vom +Notenkopf (auch bei Akkorden). +Dabei wird der +Punkt bei Noten, die \disp{in} einem Zwischenraum liegen, rechts neben +dem Notenkopf in der ``Mitte'' des Zwischenraums positioniert, bei +Noten, die \disp{auf} einer Notenlinie liegen, rechts neben den +Notenkopf in der Mitte des dar"uberliegenden Zwischenraumes. +\itemitem{b)} Bei +zweistimmiger Notation ist es jedoch auch "ublich, Wertpunkte bei Noten +der Unterstimme (auf der Linie) in den darunter liegenden Zwischenraum +zu positionieren. Alle Wertpunkte eines Akkordes werden zusammengefa\3t +und in einer Vertikalen untereinander gesetzt. + +\Beispiel +{\hsize7cm +\advance\hsize2\iindent +\parindent2\iindent\small +\beginsong +\vio\C \h4\.1\h5\.1\h3\.1 \rchord\h8\.1\h4\.1\lefttrue\h7\.1\endchord +\two{\h6\.1}{\h2\.1} +\hfill +\=\endsong} +\endBeispiel +\vskip-1cm + +\item{N10)} Pausen:\item{} +Zu jedem Notenwert gibt es ein Pausenzeichen. +Die Gestalt der Pause ist abh"angig von ihrem ``Pausenwert'' +(\lit{{\ziegen, \bf60}}). + +\item{}Die Pause wird wie die Note + ihrem ``Pausenwert'' entsprechend +in den horizontalen Ausschlu\3 + einbezogen (\adchap{-1}.1\XX). +Pausiert eine Stimme in einem Musikst"uck "uber mehrere Takte, so +k"onnen diese \disp{Pausentakte} in der Einzelstimme +zusammengefa\3t werden. Diese Pausenzeichen werden zwischen +den Taktstrichen zentriert. Dies mu\3 beim Ausschlu\3 ber"ucksichtigt +werden. + +\Beispiel +{\hsize8cm +\advance\hsize2\iindent +\parindent2\iindent\small +%Pausentakte +\beginsong +\vio\C \^{\rm1}{\pg}\|% +\^{\rm2}{\dpd}\|% +\^{\rm3}{\dpg}\|% +\^{\rm4}{\dpdd}\|\hfill\endsong} +\endBeispiel +\vskip-1cm + +\item{} +Alle Pausenwertpunkte erscheinen bei einstimmiger Notation im dritten +Zwischenraum des Liniensystems rechts von der Pause: + +\Beispiel +{\hsize5cm +\advance\hsize2\iindent +\parindent2\iindent\small +\beginsong +\vio\C \pv\.1\ \pg\.1\ \pa\.1 \hfill +\=\endsong} +\vskip-1cm +\endBeispiel + +\item{N11)} Versetzungszeichen:\item{} +Die Versetzungszeichen werden links vom Notenkopf gesetzt. +\item{} +Vor Akkorden werden sie nacheinander notiert, um "Uberlappungen zu +vermeiden und die "Uber\-sichtlichkeit zu wahren. Dabei gilt die +Ausnahme:\itemitem{} +``{\sl Vorzeichen in der Oktave sind untereinander zu stellen}'' +(\lit{\hader}). +\item{} +Die Reihenfolge der Vorzeichen ist keiner festen Regel +unterworfen. Von innen nach au\3en werden die Vorzeichen mit der +h"ochsten Tonh"ohe beginnend m"oglichst platzsparend notiert. + +\Beispiel +{\hsize5cm +\advance\hsize2\iindent +\parindent2\iindent\small +\beginsong +\vio\C\hskip20pt +\x1\x6\x{10}\x3\rchord\v{10}\v6\v3\v1\endchord\hskip20pt +\x{-6}\x{-1}\x{3}\x{-4}\lchord\v{-6}\v{-4}\v{-1}\v3\endchord +\hfill\endsong} +\vskip-1cm +\endBeispiel + +\verbatimon +\subheading{Das Setzen der Notenschriftelemente} +\subsubheading{Interne Darstellung der Tonh"ohe} + +Unter Tonh"ohe versteht man im allgemeinen die absolute Tonh"ohe +einer Note (siehe \lit\Schofer), wobei man sich auf eine Skalierung von +Subkontra-A bis $c'''''$ geeinigt hat. +In der Notenschrift werden die Tonh"ohen +auf einer Vertikalen dargestellt. +Um die vertikale Richtung ablesen zu k"onnen, bedient man sich des +Liniensystems. +Alle h"orbaren absoluten Tonh"ohen k"onnten in einem 32-Liniensystem +positioniert werden, und zwar auf Linien und in den Zwischenr"aumen. +(N"aheres dazu siehe \lit\Werner.) + +Da der Tonumfang eines nat"urlichen Instruments +(die Gesangsstimme eingeschlossen) +jedoch nur Teilbereiche --- ca. drei Oktaven --- +des gesamten h"orbaren Tonspektrums +umfa\3t und die Darstellung in einem +32-Liniensystem un"ubersichtlich ist, +werden zur Notation nur +Ausschnitte aus diesem Liniensystem verwendet, wobei +T"one, die nicht in dieses System passen, unter Hinzunahme von +Hilfslinien +oberhalb oder unterhalb des Systems gesetzt werden. + + +F"ur das Setzen der Noten, Vorzeichen und Wertpunkte +(d.h. f"ur das Notenbild) ist nur die Position der Note +in diesem F"unf-Liniensystem wichtig (unabh"angig vom Notenschl"ussel). + +Wie in \adchap{-2}.2.2\XX\ bemerkt, ist die + \defi{Grundlinie} die unterste Notenlinie des +F"unf-Liniensystems. +Diese sei mit 0 bezeichnet und das +F"unf-Liniensystem +von Linie zu Zwischenraum durchnumeriert, wobei die Hilfslinien +mitgez"ahlt werden. +Dann bezeichnet die \defi{interne Tonh"ohe} die der Note zugeordnete +Nummer der Stellung +im Liniensystem ohne Ber"ucksichtigung des Vorzeichens. + +Die T"one oberhalb der Grundlinie erhalten +so eine positive Nummer, die T"one unterhalb eine negative. +Weiter erhalten alle Noten auf einer Notenline eine gerade +Nummer, die Noten in den Zwischenr"aumen eine ungerade. + +Man erh"alt folgendes System: + +\medskip +\def\vb#1{\vbox to 0pt{\vss\hbox{#1}\vss}} +\hbox to \hsize +{\hfill\vbox{\offinterlineskip\halign{\hfil#&\hfil#&&\hfil#\hfil\cr +$\vdots$&&\ \ \vrule height 0.4pt width 12pt\vb{ 2.Hilfslinie}\hfill\cr +\noalign{\vskip8pt} +\vb{10}&&\ \ \vrule height 0.4pt width 12pt\vb{ 1.Hilfslinie}\hfill\cr +\noalign{\vskip4pt} +&\vb{9}&\cr +\noalign{\vskip4pt} +\vb{8}&&\ \vrule height 0.4pt width 200pt\cr +\noalign{\vskip4pt} +&\vb{7}&\cr +\noalign{\vskip4pt} +\vb{6}&&\ \vrule height 0.4pt width 200pt\cr +\noalign{\vskip4pt} +&\vb{5}&\cr +\noalign{\vskip4pt} +\vb{4}&&\ \vrule height 0.4pt width 200pt&\vb{ Mittellinie }\cr +\noalign{\vskip4pt} +&\vb{3}&\cr +\noalign{\vskip4pt} +\vb{2}&&\ \vrule height 0.4pt width 200pt\cr +\noalign{\vskip4pt} +&\vb{1}&\cr +\noalign{\vskip4pt} +\vb{0}&&\ \vrule height 0.4pt width 200pt&\vb{ Grundlinie }\cr +\noalign{\vskip4pt} +&\vb{-1}&\cr +\noalign{\vskip4pt} +\vb{-2}&&\ \ \vrule height 0.4pt width 12pt\vb{ 1.Hilfslinie }\hfill\cr +\noalign{\vskip4pt} +$\vdots$&\cr +\noalign{\vskip4pt} \hbox to0pt{\hss interne Tonh"ohe\hss}\cr}}\hfill} +\medskip + + +\Beispiel +Noten auf der Mittelline erhalten die interne Tonh"ohe 4, +Noten im ersten Zwischenraum unter der Grundlinie die intere Tonh"ohe +-1.\endBeispiel + +Im folgenden soll, falls nicht anders explizit angegeben, die +interne Tonh"ohe nur noch kurz \disp{Tonh"ohe} genannt werden. + + +\subsubheading{Aufbau der Noten} +Aus den Regeln ergibt sich, da\3 +die Gestalt einer allein stehenden +Note durch den Notenwert, die Tonh"ohe und +die Richtung des angehefteten Notenhalses vollst"andig bestimmt ist. + +\item{1)}Der Notenwert bestimmt die Kopf{}form, + +\item{2)} +die Gestalt des F"ahnchens wird durch Richtung des Notenhalses und den +Notenwert bestimmt und +\item{3)} +die L"ange des Notenhalses ist abh"angig von Tonh"ohe, Richtung des +Notenhalses und Notenwert. + +Im folgenden sollen formal die Regeln, die die Gestalt der Note +bestimmen, beschrieben werden. + +Sei $N$ eine Note und $ p \in\rz $ ihre Tonh"ohe. +Die Variable $ d\in\{-1,0,+1\} $ beschreibe die Richtung des Notenhalses. +Es gelte $ d=+1 $, +falls der Notenhals aufw"arts gestielt ist, $ d=-1 $, falls er abw"arts +gestielt ist, und $ d=0 $, falls der Notenkopf keinen Hals besitzt. +Die Variable $ v\in\{0,1,2,\ldots,7\}$ beschreibe den Notenwert. + +Die Zuordnung soll gem"a\3 folgender Tabelle erfolgen: + +\def\noten#1{\char\hex21\hbox{\vrule\char\hex#1}} +\hbox to\hsize{\hfill\vbox{\offinterlineskip +\halign{#\hfil\quad\strut&&\vrule\quad\hfil#\hfil\quad\cr +Name&$v$&\cr +\noalign{\hrule} +Ganze&0&{\music\char\hex23}\cr +\omit\vrule width0pt height2pt&&\cr +Halbe&1&{\music\char\hex22\vrule height12pt depth0pt}\cr +\omit\vrule width0pt height2pt&&\cr +Viertel&2&{\music\char\hex21\vrule height12pt depth0pt}\cr +\omit\vrule width0pt height2pt&&\cr +Achtel&3&{\music\noten{28}}\cr +\omit\vrule width0pt height2pt&&\cr +Sechzehntel&4&{\music\noten{29}}\cr +\omit\vrule width0pt height2pt&&\cr +Zweiunddrei\3igstel&5&{\music\noten{2A}}\cr +\omit\vrule width0pt height2pt&&\cr +Vierundsechzigstel&6&{\music\noten{2B}}\cr +\omit\vrule width0pt height2pt&&\cr +Hundertachtundzwanzigstel&7&{\music\noten{2C}}\cr}}\hfill} +\medskip +Der Fall $ v=0 $ impliziert also $ d=0 $. + +Der vertikale Versatz $ \bar p $ des Notenkopfes, d.h. der Betrag, um +den die Note zur Positionierung von der Grundlinie aus vertikal +verschoben werden mu\3, ist nun: $\bar p := p\cdot 0.5\hbox{|\nhh|}$. + +Ein Akkord $A$ ist dann eine Folge von Noten $A=\folgi Nin$ mit +zugeh"origen Attributen $(v_i, p_i, d_i)\,,\; i=1,\ldots,n$. + In den meisten F"allen gilt f"ur alle $i,j=1,\ldots,n \,,\;i\ne j$: +$v_i=v_j$, + +O.B.d.A. seien diese Noten im folgenden nach der internen Tonh"ohe +aufsteigend geordnet, d.h. es gilt $p_ip_n-4\,,\\ + d_n\,,&\text{falls }4-p_0\le p_n-4\,.\endcases$$ +Die Stellung des Notenkopfes bzgl. des Notenhalses +wird nach folgender Formel bestimmt: gilt f"ur mindestens ein $i$ +$$p_i+1=p_{i+1}\;,$$ +so wird der Notenkopf auf die +andere Seite des Notenhalses verschoben, falls dies nicht schon f"ur die +vorige Note geschehen ist. + +Rekursiv kann dieses Vorgehen wie folgt beschrieben werden: + +F"ur $d=+1$ und $i\in\{2,\ldots,n\}$ +gilt: $N_{i}$ erscheint genau dann +\disp{rechts} vom Notenhals, wenn +$p_{i-1}+1=p_{i}$ und $N_{i-1}$ links erscheint. + +F"ur $d=-1$ und $i\in\{1,\ldots,n-1\}$ +gilt: $N_{i}$ erscheint genau dann +\disp{links} vom Notenhals, wenn +$p_{i+1}=p_{i}+1$ und $N_{i+1}$ rechts erscheint. + +\subsubsubheading{Die Bestimmung der Notenhalsl"ange} +Die L"ange des Notenhalses ist nicht konstant, sondern +abh"angig von $p$ und $d$. + +Grunds"atzlich gibt es keine Regel, die die L"ange eindeutig festlegt, +jedoch kann man eine Funktion finden, die bestimmte optische +Gesichtspunkte ber"ucksichtigt und erf"ullt. + +\item{1)} Der Gesamteindruck soll ruhig sein, so da\3 die Noten, die +keine Hilfslinien ben"otigen, eine einheitliche Notenhalsl"ange erhalten. +Diese L"ange betr"agt vom Notenkopfmittelpunkt aus gemessen 3.5 |\nhh|. + Sie ergibt sich f"ur eine Viertel mit $p=1$ und +$d=+1$ oder $p=7$ und $d=-1$. Dann betr"agt die +Gesamth"ohe der Note 4 |\nhh|, d.h. sie f"ullt genau vier +Zwischenr"aume aus. +\item{2)} Der Endpunkt des Notenhalses sollte die zweiten +Hilfslinien oberhalb bzw. unterhalb des Systems m"oglichst +nicht "uberschreiten bzw. unterschreiten, da sonst zu viel vertikaler +Platz verbraucht wird. +Jedoch darf die L"ange eine gewisse Mindestl"ange, die +abh"angig vom Notenwert ist, nicht unterschreiten. + +\item{3)}F"ur $d=-1$ bzw. $d=+1$ sollte der Endpunkt des +Notenhalses die Mittellinie nicht unter- bzw. nicht "uberschreiten. + +\Beispiel +{\advance\hsize2\iindent +\parindent2\iindent\small +\hsize7cm +\beginsong +\vio\C\hfill +\_{1)}{\gluebrule}\h1\h7\|\_{2)}{\gluebrule}\two{\h8}{\h1}% +\|\_{3)}{\gluebrule}\h{-4}\h{11}\doublebarline +\endsong} +\vskip-1cm +\endBeispiel + +Die Funktion zur Berechnung der Notenhalsl"ange, die im Notensatzsystem +verwendet wird, lautet: +$$ +s(p,d,v)= +\cases0\,,&\text{f"ur } v=0\\ +\max(\mins(v),s^d(p))\,, &\text{f"ur } v>0,\,0\le p\le7 +\endcases$$ +mit +$$ +\mins(v)= +\cases2\hbox{|\nhh|}\,, &\text{f"ur }v=1 \text{ oder }v=2\\ +\vspace{2pt} +\Frac{v+3}2\hbox{|\nhh|}\,, &\text{f"ur }v>2 +\endcases$$ +und +$$ +s^1(p)= +\cases2\hbox{|\nhh|}\,, &\text{f"ur }p\ge8\,,\\ +\vspace{2pt} + \Frac{12-p}2\hbox{|\nhh|}\,, &\text{f"ur }p=6 \text{ oder } p=7\,,\\ +\vspace{2pt} +\Frac72\hbox{|\nhh|}\,, &\text{f"ur }-3\le p\le5\,,\\ +\vspace{2pt} +\Frac{4-p}2\hbox{|\nhh|}\,, &\text{f"ur } p\le-4\,, +\endcases$$ +$$ +s^{-1}(p)= +\cases\Frac{p-4}2\hbox{|\nhh|}\,, &\text{f"ur }p\ge12\,,\\ +\vspace{2pt} +\Frac72\hbox{|\nhh|}\,, &\text{f"ur }3\le p\le11\,,\\ +\vspace{2pt} +\Frac{4+p}2\hbox{|\nhh|}\,, &\text{f"ur }p=1\text { oder } p=2\,,\\ +\vspace{2pt} + 2\hbox{|\nhh|}\,, &\text{f"ur } p\le0\,. +\endcases$$ +Noten, die au\3erhalb des Liniensystems liegen, werden also an die +Mittellinie ``angeh"angt''. + +\Bemerkung Seien $ N_1 $ und $ N_2 $ zwei Noten mit $ p_1\ne p_2 $, +$d_1=d_2$ und $v_1=v_2$, dann gilt mit $s_1=s^d(p_1)$ und +$\verbatimoff s_2=s^d(p_2)\quad|s_1-s_2|\le|p_1-p_2| $. +\medskip\verbatimon +F"ur die Halsl"ange eines Akkordes $A=\folgi Nin$ gilt: +$$s_A=\cases\Frac{p_n-p_0}2\hbox{|\nhh|}+ +\cases s(p_0,-1,v)\;,&\text{falls }d_A=-1\,,\\ + s(p_n,+1,v)\;,&\text{falls }d_A=+1\,,\endcases\,,& + \text{falls }v>0\\ +0\,,& \text{falls }v=0\endcases\,,$$ +wobei der Notenhals in $N_0$ f"ur $d_A=+1$ und in $N_n$ f"ur +$d_A=-1$ angesetzt wird. + +Sind mehrere Noten miteinander zu verbalken, so gelten die obigen +L"angenangaben nicht mehr uneingeschr"ankt +(s. Kapitel \adchap1\XX). + +\subsubsubheading{Die Konstruktion der Noten} +Die einzelnen Teile der Note werden nacheinander zusammengef"ugt, +an den Notenkopf wird der Notenhals +(falls vorhanden) angesetzt. \par +Der Hals wird durch eine Rule f"ur $d=+1$ mit +$(ht,dp,wd)=(s(p,d,v),\,0,\,2\hbox{|\linethickness|})$ +bzw. + f"ur $d=-1$ mit +$(ht,dp,wd)=(0,\,s(p,d,s),\,2\hbox{|\linethickness|})$ +dargestellt. + +F"ur \TeX\ hat es sich als g"unstig erwiesen, die F"ahnchen im +Zeichensatz so +zu konstruieren, da\3 nur der Wert der H"ohe positiv ist ($ht=\mins(v)$) +und die "ubrigen Werte f"ur Tiefe und Breite verschwinden. + +Ist die Note so zusammengesetzt, wird sie um +$\bar p $ +vertikal verschoben. Zus"atzlich m"ussen noch f"ur $p>9$ und $p<-1$ +Hilfslinien eingef"ugt werden. + +Die Anzahl $z$ der Linien ist abh"angig von der Tonh"ohe $p$: +\verbatimoff +$$ +z(p):=\cases(p-8) \mod 2\;,&\text{f"ur } p>8\;,\\ +|p|\mod 2\;,&\text{f"ur }p<0\;.\endcases +$$ +\verbatimon +Die Hilfslinien +besitzen eine L"ange von 2|\nhh| und m"ussen daher +links und rechts von der Box, in der die Note zusammengesetzt wird, +"uberstehen, damit die Gesamtbreite der Note |\nhw| bleibt. Dies ist +wichtig f"ur einen gleichm"a\3igen Notensatz. + + +\subsubsubheading{Die Konstruktion der Akkorde} +F"ur die Zusammensetzung eines Akkordes $A$ werden zun"achst alle +zugeh"origen Notenk"opfe, die links vom Notenhals erscheinen sollen, und +alle Notenk"opfe, die rechts erscheinen sollen, in jeweils einer +Notenbox und mit +zugeh"origen Hilfslinien der Tonh"ohe entsprechend +"ubereinander angeordnet. + +Diese werden dann zusammen mit einem Notenhals der L"ange $s_A$ und +zugeh"origem F"ahnchen, falls kein Balken gesetzt werden soll, + zu der endg"ultigen +Notenbox zusammengef"ugt. + +\Bemerkung +\item{1)}Da\3 die Breite der F"ahnchen +nicht ber"ucksichtigt wird, hat den Grund, da\3 die Breite des +F"ahn\-chens nicht den Glue zwischen zwei Noten beeinflussen darf. +Dies birgt aber die Gefahr der "Uberlappung mit anderen Noten und +mu\3 daher bei der Wahl des Glue ber"ucksichtigt werden (s. +\adchap{-1}.2.1). +\item{2)}F"ur das Zusammensetzen der einzelnen Teile einer Note +bzw. eines Akkordes wurden im wesentlichen die unter +\adchap{-3}.2.2 und \adchap{-3}.2.4 +beschriebenen +Verfahren f"ur den Ausschlu\3 innerhalb von horizontalen und +vertikalen Boxen verwendet. +\item{3)} Die Funktion zur Berechnung der Notenhalsl"ange + wurde so definiert, +da\3 sie auch f"ur die +zweistimmige Notation (s. N4d) und zu verbalkende Noten angewendet werden +kann, da in diesen F"allen z.B. Noten oberhalb der Mittellinie mit $d=+1$ +m"oglich sind. +\endBemerkung + +\subsubheading{Versetzungszeichen} + +Die Versetzungszeichen m"ussen auf zwei verschiedene Arten konstruiert +werden, abh"angig von den verschiedenen Umgebungen, in denen sie +vorkommen: +\item{1)} Versetzungszeichen vor einer Note bzw. einem Akkord, +\item{2)} Versetzungszeichen als Elemente der Vorzeichnung. +Im ersten Fall mu\3 +zur richtigen Positionierung den Versetzungszeichen +ebenso wie den Noten eine interne Tonh"ohe $p\in\gz$ zugeordnet sein, so +da\3 der vertikale Versatz des Zeichens berechnet werden kann. \item{} +Die Versetzungszeichen werden dann +zun"achst in der Hunkbox gespeichert, so +da\3 sie erst mit der n"achsten Note oder dem n"achsten Akkord gesetzt +werden.\item{}Bei ``Versetzungszeichen-Akkorden'' ist die Oktavierung zu +beachten. Gilt f"ur zwei aufeinanderfolgende Versetzungszeichen mit +\verbatimoff +$p_1$ und $p_2$ der Abstand $|p_1-p_2|=7$, so darf die Zeichenbreite des +zweiten Versetzungszeichens nicht ber"ucksichtigt werden (s. Regel N11 +).\verbatimon + +Im zweiten Fall werden + die Versetzungszeichen der Vorzeichnung +direkt plaziert und nicht in einer Box akkumuliert. +Da sich die internen Tonh"ohen der Vorzeichnung bei +Notenschl"usselwechsel "andern, +die Vorzeichnung mit +internen Tonh"ohen f"ur den Violinschl"ussel angegeben werden. +Abh"angig vom aktuellen Notenschl"ussel wird zur internen Tonh"ohe eine +Konstante addiert, die die Versetzungszeichen in die vertikalen +Positionen bez"uglich des aktuellen Notenschl"ussels "uberf"uhrt. + Ein Beispiel dazu findet sich unter Regel V4e). + +\vfill\eject diff --git a/macros/mtex/documentation/mdoc9.tex b/macros/mtex/documentation/mdoc9.tex new file mode 100644 index 0000000000..d0ed715c54 --- /dev/null +++ b/macros/mtex/documentation/mdoc9.tex @@ -0,0 +1,1135 @@ +\def\adchap#1{{\advance\chap#1{}\the\chap}} +\heading{Der Balken- und Bogensatz} +Im Gegensatz zu den bisher behandelten Notenschriftzeichen sind die +Balken und Bogen satztechnisch dadurch ausgezeichnet, da\3 sie in der +L"ange und Gestalt variieren k"onnen, so da\3 es nicht ausreicht, nur +ein Element in einem Font f"ur den Satz zur Verf"ugung zu stellen. Die +Neigung der Balken bzw. die Kr"ummung der Bogen ist abh"angig von den zu +verbindenden bzw. zu "uberspannenden Noten. + +Au\3er den Faustregeln, +da\3 aus der Neigung des Balkens der Melodieverlauf +erkenntlich sein soll, um ein schnelleres Notenlesen zu erm"oglichen, und +da\3 der +Bogen von Notenkopf zu Notenkopf verlaufen sollte, jedoch andere +Zeichen nicht schneiden darf, gibt es keine +expliziten Regeln f"ur den Satz dieser Notenschriftelemente. + +\Beispiel +{\loose +\hsize10cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\group{\\{\a0}\\{\a2}\\{\a4}}{\\{0}\\{2}\\{4}}\ubeam13\go +\group{\\{\a4}\\{\a2}\\{\a0}}{\\{4}\\{2}\\{0}}\ubeam13\go +\group{\\{\a4}\\{\a6}}{\\{4}\\{6}}\lbeam12\uslur12\go +\group{\\{\a2}\\{\a4}}{\\{2}\\{4}}\ubeam12\lslur12\go +\group{\\{\h4}\\{\h2}}{\\{4}\\{2}}\uslur12\go\doublebarline +\endsong} +\vskip-1cm +\endBeispiel + +Alle anderen Satzregeln m"ussen daher aus der Notenliteratur abgeleitet +werden. Es gilt also, Verfahren f"ur den automatischen Notensatz zu +entwickeln, die den ansonsten nicht notwendig einheitlichen +Handsatz so nachahmen, da\3 die Ergebnisse in den +meisten F"allen mit dem Handgesetzten "ubereinstimmen. + +Die Verfahren f"ur den Balken- und Bogensatz gliedern sich in folgende +Abschnitte: +\item{1)} Berechnung der Steigung des Balkens bzw. der Sekantensteigung +des Bogens, + +\item{2)} Diskretisierung der Steigungen und Zusammenstellung der +Balken bzw. Bogen aus den Zei\-chen\-s"at\-zen, + +\item{3)} Endg"ultige Positionierung des Balkens bzw. Bogens. + +\Bemerkung Die hier vorgestellte Vorgehensweise ist durch die Tatsache +bedingt, da\3 ein Textsatzprogramm verwendet wird und nicht +koordinaten-orientiert gearbeitet wird. Das Zeichnen der Balken w"are +im anderen Fall direkt und ohne Diskretisierung + der berechneten Steigung +ausf"uhrbar. +\endBemerkung + +\subheading{Entwicklung des Verfahrens zur Verbalkung} +Gesucht ist ein Verfahren zur \defi{Verbalkung} von Noten, +d.h. ein Verfahren, +das jede beliebige Folge von Noten $(N_i)_{i=1,\ldots,n}$ durch einen +(oder mehrere) Balken verbindet, so da\3 der Aufpunkt $P$ und die +Neigung $S$ der Balken dem Handgesetzten nahe kommt. + +Ein solches Verfahren gliedert sich in drei Teilschritte: + +\item{1)} Bestimmung der Balkensteigung. +\item{2)} Anpassung der Notenh"alse. +\item{3)} Bestimmung des Aufpunktes aller Balkenst"ucke der Notengruppe. + +\Bemerkung +\item{1)} +Die Anzahl der Balken an einer Note stimmt mit der Anzahl der dem +Notenwert entsprechenden F"ahnchen (s. a. \the\chap.2.2) "uberein. +Alle Balkensteigungen innerhalb einer Notengruppe stimmen mit +der des "au\3ersten (d.h. des `Achtel'-Balkens) "uberein. +\item{}Es gen"ugt also, nur eine Steigung f"ur die ganze Notengruppe zu +berechnen. +\item{2)} Die Lage der Balken (oberhalb oder unterhalb der Notenk"opfe) +ist durch Regel N4b in \adchap{-1}.1 \XX festgelegt. +Die gemeinsame Richtung der +Notenh"alse kann zu jeder Folge von Noten bestimmt werden und sei +o.B.d.A. vorgegeben. +\item{3)} Die Balkensteigung ist nicht abh"angig von der absoluten +Tonh"ohe der Noten, sondern von der Position der Noten im Liniensystem. +Es gen"ugt also, + die interne Tonh"ohe der betroffenen Noten zu betrachten. +\endBemerkung + +\subsubheading{Bestimmung der Balkensteigung} +F"ur die folgenden "Uberlegungen beschreibe $d\in\{-1,+1\}$ wie in +\adchap{-1}.2.2 +die nach Regel N4c) bestimmte gemeinsame Richtung der Notenh"alse der +Balkengruppe. + +\subsubsubheading{Das Vorzeichen der Steigung} +Betrachtet man zun"achst zwei Noten $N_1$ und $N_2$ mit zugeh"origen +internen Tonh"ohen $p_1$ und $p_2$, +dann gilt unabh"angig von der gemeinsamen Richtung der Notenh"alse +$d$ f"ur das +Vorzeichen der Steigung $S$: +$$\align \text{F"ur }p_10\;,\\ + \text{f"ur }p_1=p_2& \text{ gilt }S=0 \text { und }\\ + \text{f"ur }p_1>p_2& \text{ gilt }S<0 \;.\endalign%\tag{S$_1$} + $$ +d.h. die Balkensteigung entspricht der Tendenz des Melodieverlaufs. + +\Beispiel +{\loose +\hsize10cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\group{\\{\a2}\\{\a3}}{\\{2}\\{3}}\ubeam12\go +\group{\\{\a3}\\{\a2}}{\\{3}\\{2}}\ubeam12\go +\group{\\{\a3}\\{\a8}}{\\{3}\\{8}}\lbeam12\go +\group{\\{\a6}\\{\a4}}{\\{6}\\{4}}\lbeam12\go +\group{\\{\a4}\\{\a4}}{\\{4}\\{4}}\lbeam12\go +\group{\\{\a3}\\{\a3}}{\\{3}\\{3}}\ubeam12\go +\=\endsong} +\vskip-1cm +\endBeispiel + +Das Vorzeichen ist f"ur zwei beliebige Noten eindeutig festgelegt. + +Dies gilt jedoch nicht mehr unbedingt f"ur Notengruppen mit mehr +Elementen. Man findet in der Literatur: + +{\loose +\hsize8cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\group{\\{\a0}\\{\a1}\\{\a2}\\{\a3}}{\\{0}\\{1}\\{2}\\{3}}\ubeam14\go +\group{\\{\a2}\\{\a1}\\{\a0}}{\\{2}\\{1}\\{0}}\ubeam13\go +\group{\\{\a4}\\{\a8}\\{\a4}}{\\{4}\\{8}\\{4}}\lbeam13\go\=% +\endsong} +\vskip-1cm + +Das Beispiel f"ur $p_1=p_n$ zeigt, da\3 hier die Steigung abh"angig von +der Tonh"ohe der ersten +und letzten Note bestimmt wurde. + +Untersucht man andere +Notenkombinationen, so zeigt sich auch f"ur F"alle mit $p_1\ne p_n$, +da\3 die Neigung nach der ersten +und letzten Note bestimmt wurde. + +\Beispiel +{\hsize 7cm +\loose +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\def\beamlist{\\{1-3,}\\{2-3,}} +\group{\\{\a6}\\{\s8}\\{\s2}}{\\{6}\\{8}\\{2}}\lbeam13\go +\def\beamlist{\\{1-\the\N,}} +\group{\\{\a4}\\{\a{12}}\\{\a{10}}\\{\a8}}{\\{4}\\{12}\\{10}\\{8}}% +\lbeam14\go\=% +\endsong} +\vskip-1cm +\endBeispiel + +Allgemein gilt f"ur $n>2$: +$$\align \text{F"ur }p_1p_n&\text{ gilt }S\le0 \;.\endalign%\tag{S$_2$} + $$ +Dabei gilt $S=0$, falls f"ur ein $i\in\{2,\ldots,n-1\}$ gilt: +$$\align &p_i\ge \max(p_1,p_n )\text{, falls }\quad d=1\;\\ +\text{oder }& p_i\le \min(p_1,p_n)\text{, falls }\quad +d=-1\;.\endalign$$ +Gibt es also innerhalb einer Notengruppe, deren Notenh"alse nach oben +gestielt sind, Noten, deren Tonh"ohe gr"o\3er oder gleich der Tonh"ohe +der h"ohergelegenen ``Randnote'' ist, so wird der Balken nicht +geneigt. Weisen alle Notenh"alse nach unten, +so wird die jeweils tiefergelegene ``Randnote'' betrachtet. +\Beispiel +\par\noindent\vbox{\hsize 6cm +\loose +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\group{\\{\a4}\\{\a3}\\{\a5}}{\\{4}\\{3}\\{5}}\lbeam13\go +\group{\\{\a0}\\{\a3}\\{\a3}}{\\{0}\\{3}\\{3}}\ubeam13\go\=% +\endsong} +\vskip-1cm +\endBeispiel + +Das Vorzeichen der Steigung wird also +nach der Konstellation der ersten und +letzten Note der Balkengruppe bestimmt. + +\subsubsubheading{Der Betrag der Steigung} +Sei im folgenden \folgi Nin eine Folge von Noten, f"ur die nach den +obigen Bedingungen +die Steigung $S$ nicht verschwindet. +Um gr"o\3ere Steigungen zu vermeiden, wird der +Betrag der Steigung nicht nach der +Position der Notenk"opfe bestimmt wird, sondern bez"uglich der Endpunkte +der Notenh"alse. + +Sei $E_i=(h_i,e_i)$ der Endpunkt des Notenhalses von $N_i$, wobei $h_i$ +den Abszissenwert des Notenhalses und $e_i:=\bar p_i+ d\cdot s^d(p_i)$ +den +vertikalen Abstand von der Grundlinie angibt ($\bar p_i = p_i\cdot 0.5 +\verbatimon|\nhh|$). + +Aus diesen Werten kann allgemein die Steigung $S^*$ einer Geraden durch +die Punkte $E_1$ und $E_n$ berechnet werden durch Bildung des +Differenzenquotienten +$$S^*= +\Frac{e_n-e_1}{h_n-h_1}\;.$$ +Diese errechnete Steigung kann jedoch erst nach einigen weiteren +Korrekturen der Notenh"alse als endg"ulti\-ge Steigung f"ur den Balken +"ubernommen werden. +\subsubsubheading{Die Korrektur der Notenhalsl"angen} +Es sind zun"achst zwei verschiedene Korrekturen der Notenhalsl"angen +m"oglich. +\item{1)} +Wegen +$$\verbatimoff |s^d(p_1)-s^d(p_n)|\le|\bar p_1-\bar p_n|$$ +gilt immer: +$$ +\align &e_n-e_1\ge0 \text{ f"ur }p_1p_n\;.\endalign$$ +\item{} +In einigen F"allen wird +jedoch die strikte Positivit"at bzw. Negativit"at +von $S^*$ nicht mehr gew"ahrleis\-tet. + +\Beispiel +{\hsize 4cm +\loose +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\ \v{-4}\v{-3}\v{11}\v{13}\hfill\null +\endsong} +\vskip-1cm +\endBeispiel + +\item{} +In diesen F"allen m"ussen also die Notenhalsl"angen so korrigiert werden, +da\3 die Bedingung f"ur das Vorzeichen der Steigung + erf"ullt ist, und eine betragsm"a\3ig +kleine Steigung +die Tendenz der Notengruppe ausdr"uckt. + +\item{2)}Eine +weitere Korrektur ergibt sich aus der Tatsache, +da\3 Balken mit einer Steigung von mehr als + $25^\circ $--$ 30^\circ$ geneigt sind, nicht +verwendet werden, da sie das Gesamtbild optisch unruhig erscheinen +lassen. +Da die Steigung von der Differenz der Abszissenwerte der Notenh"alse +abh"angig ist, +tritt dies h"aufig auf bei Notenpaaren +mit stark unterschiedlichen Tonh"ohen, z.B. + +{\hsize 4cm +\advance\hsize2\iindent +\parindent2\iindent +\universal +\beginsong +\vio\C +\hskip20pt\v{-3}\v{3} \hfill +\endsong} +\vskip-1cm\ +\item{} +Die Korrektur sollte also dahin zielen, den Betrag der Balkensteigung so +zu verkleinern, da\3 die h"ochstzul"assige Steigung angenommen wird. +Dies kann auf zwei Arten geschehen: +\itemitem{a)} Vergr"o\3ern des horizontalen Abstands, was aus den in +Kapitel \adchap{-2}.1 +\XX angef"uhrten Gr"unden jedoch unzul"assig ist, und +\itemitem{b)} Verkleinern des vertikalen Abstandes durch Ver"andern der +Notenhalsl"angen. + +\item{}Auch in diesem Fall ist also eine Korrektur der Notenhalsl"angen +erforderlich. + +Aus den Beipielen in der Notenliteratur ergibt sich, da\3 +die Korrektur der Notenhalsl"angen stets durch Verl"angern der +entsprechenden Notenh"alse erfolgt, nie durch Verk"urzen. + +Die Verl"angerung der Notenh"alse ist nicht unabh"angig von der +gemeinsamen Notenhalsrichtung $d$. Es gilt +f"ur die zu den Noten $N_1$ und $N_n$ zugeh"origen Halsl"angen $s_1$ und +$s_n$ f"ur die zuerst vorgestellte Korrekturm"oglichkeit: +\verbatimon +$$\align \text{Ist }d\cdot(p_1-p_n)>0&\text{, so gilt } +s_1 =s^d(p_1)+0.5\hbox{|\nhh| und } s_n=s^d(p_n)\,,\\ + \text{und ist }d\cdot(p_1-p_n)<0&\text{, so gilt } +s_n =s^d(p_n)+0.5\hbox{|\nhh| und } s_1=s^d(p_1)\;.\endalign$$ +Die zweite Korrektur wird wie folgt durchgef"uhrt: + +Sei $h:=h_n-h_1$ die Differenz der Abzissen der Notenh"alse +und $\epsilon:=\sin\alpha$, wobei $\alpha$ den maximal zul"assigen +Neigungswinkel angibt. Dann gilt +$$\align \text{Ist }d\cdot(p_1-p_n)>0&\text{, so gilt } +s_1 =s^d(p_1)+\verbatimoff (|e_n-e_1| -\epsilon \cdot h) +\hbox{ und } s_n=s^d(p_n)\,,\\ + \text{und ist }d\cdot(p_1-p_n)<0&\text{, so gilt } +s_n =s^d(p_n)+\verbatimoff (|e_n-e_1| -\epsilon \cdot h) +\hbox{ und } s_1=s^d(p_1)\;.\endalign$$ + +Die der Notengruppe zugeh"orige Balkensteigung $S$ lautet nun: +$$S:=\Frac{(\bar p_n - \bar p_1) + d(s_n-s_1)}{h_n-h_1} $$ + +\Beispiel +\par +\input mdocpic2 +\endBeispiel + +\subsubsubheading{Die Diskretisierung der Balkensteigung} +Die Balkensteigung $S$ hat einen reellen Wertebereich, wenn man die oben +angef"uhrte Definition anwendet +($S\in\lbrack-\tan\alpha,\tan\alpha\rbrack\subset\rz$). + +Wie schon in +\adchap{-4}.1.4 \XX angedeutet, bietet \TeX\ au\3er Rules keine +M"oglichkeit, Linien zu setzen. Man w"urde also einen Balken beliebiger +Steigung aus gen"ugend kleinen ausgef"ullten Rechtecken zusammensetzen +m"ussen und dabei ein Optimierungsverfahren anwenden. Diese +Vorgehensweise w"are sowohl im Satz als auch in der Ausgabe sehr +zeitaufwendig und w"urde dennoch bei von Null verschiedenen Steigungen +eine sichtbare Treppenstruktur ergeben. + +Es liegt daher nahe, die Balkensteigung zu diskretisieren und Balken +dieser Steigungen in einem eigenen Zeichensatz zusammenzufassen. + +\Bemerkung +\item{1)}Das folgende Verfahren ist nicht spezifisch f"ur das +Textsatzsystem \TeX, sondern k"onnte auch f"ur andere Satzsysteme +verwendet werden. +\item{2)} +Diese Vorgehensweise der Diskretisierung +findet man auch beim Typendruckverfahren, +das im wesentlichen zwei verschiedene Neigungen verwendet: +steile und flache (s. \lit{\genzmeier, S.119}). + +\endBemerkung +Es sollen hier jedoch feinere Unterschiede gemacht werden: +\item{1)}Die Balkensteigung soll die errechnete m"oglichst realistisch +wiedergeben. +\item{2)}Die gr"o\3te Steigung entspricht $\tan\alpha$, wobei +$\alpha$ den maximal zul"assigen Neigungswinkel angibt. (Es gilt z.B. +$25^\circ\approx\arctan{\hbox{|\nhh|}\over\hbox{2|\nhw|}}=\arctan +0.\overline{45}$, falls |\nhw|=1.1|\nhh|.) + +Gesucht ist eine Folge $0=m_00$ f"ur den absoluten Fehler wurde das Zweifache der +Balkenst"arke gew"ahlt, so da\3 sich +bei Rundung auf den n"achsten diskreten +Steigungswert ein maximaler Fehler von $\eta/2$, d.h. der St"arke eines +Balkens ($\approx$0.6|\nhh|), ergibt. +Sei $\epsilon:=\max_{i=0,\ldots,k-1}\{m_{i+1}-m_i\}$, so gilt f"ur den +absoluten Fehler: +$$\verbatimoff |m_{i+1}-m_i|\cdot|h|<\eta\;.$$ +Die Wahl von $\epsilon$ ist also abh"angig von $|h|$. +W"ahlt man acht verschiedene Steigungen, d.h. $k=8$, und als obere +Schranke $m_8=0.45$, so erh"alt man f"ur +$\epsilon=\Frac{0.45}8\cong0.056$ die gew"unschte Genauigkeit f"ur +\verbatimoff +$|h|=\verbatimon{\hbox{1.2|\nhh|}\over\dsize0.056}\cong21\hbox{|\nhh|} +\cong20\hbox{|\nhw|}$.\verbatimon + +Diese Genauigkeit wird also bei einer Verbalkung von zehn Achtelnoten +bei universellem Zeilenausschlu\3 (s. 5.1.1\XX) eingehalten. Dies ist +ausreichend, da selten l"angere Balken ben"otigt werden. Bei einer +Verbalkung von sechs Achtelnoten erreicht man eine Genauigkeit von +$\eta/2$. +Aus diesen Gr"unden wurde f"ur den Balkenzeichensatz der +`Steigungssatz' $m_i=0.056\cdot i\,,$ $i=1,\ldots,8$ gew"ahlt. + +Die Anpassung der oben berechneten Steigung $S$ an die im Zeichensatz +vorhandenen erfolgt f"ur +\verbatimoff$|S|\ge m_1$ durch Runden auf den n"achsten diskreten +Steigungswert $m_i$ mit $m_i\le |S|$ und + f"ur $0<|S|2\,.\endcases$$ +Auch diese Werte sind heuristisch bestimmt. +\par +\subsubheading{% +Bestimmung des Aufpunktes aller Balken der Notengruppe} +Der Aufpunkt $P_{i,j}=(h_i,a_{i,j})\,,1\le i\le n$ und $1\le j\le r$, +der einzelnen Balken der Notengruppe +wird nun wie folgt bestimmt: +$$a_{i,j} = \bar p_i + d\cdot s_i + d\cdot r\cdot\hbox{|\nhh|}\;.$$ +Dabei wird der Balken bis auf den Spezialfall eines ``Halbbalkens'' +immer rechts vom Notenhals positioniert. Gilt ein Balken nur f"ur +eine Note, so wird er je nach Position der Note innerhalb der +Notengruppe links oder rechts vom Notenhals plaziert, z.B immer links +f"ur $N_n$ und immer rechts f"ur $N_1$. Innerhalb der Gruppe richtet +sich die Position nach dem metrischen Gef"uge (s.\lit\ziegen). Ein +solcher Balken hat immer als L"ange die H"ohe +eines Notenkopfes. + +\Beispiel +{\hsize 10cm +\advance\hsize2\iindent +\parindent2\iindent +\loose +\beginsong +\vio\C +\def\beamlist{\\{1-2,}\\{-2,}} +\group{\\{\a6\.1}\\{\s6}}{\\{6}\\{6}}\lbeam12\go +\def\beamlist{\\{1-2,}\\{1-1,}} +\group{\\{\s6}\\{\a7\.1}}{\\{6}\\{7}}\lbeam12\go +\def\beamlist{\\{1-4,}\\{-2,-4,}} +\group{\\{\a7\.1}\\{\s8}\\{\a6\.1}% +\\{\s7}}{\\{7}\\{8}\\{6}\\{7}}\lbeam14\go +\def\beamlist{\\{1-4,}\\{1-1,3-3,}} +\group{\\{\s7}\\{\a8\.1}\\{\s6}\\{\a7\.1}} +{\\{7}\\{8}\\{6}\\{7}}\lbeam14\go +\hfill\=% +\endsong} +\vskip-1cm +\endBeispiel + +\subsubheading{Abschlie\3ende Bemerkungen zur Verbalkung} +Das obige +Verfahren zur Verbalkung l"a\3t sich auch f"ur Akkorde durchf"uhren, +wenn f"ur die interne Tonh"ohe die am weitesten von der jeweiligen +Bezugsnote entfernte Note zur Berechnung verwendet wird. + +\Beispiel +{\hsize 4cm +\advance\hsize2\iindent +\parindent2\iindent +\loose +\beginsong +\vio\C% +\def\beamlist{\\{1-3,}\\{1-3,}}% +\group{\\{\b7\rchord\a7\a{-1}\endchord}\\{\rchord\a{14}\a8\endchord} +\\{\rchord\a{11}\a5\endchord}}{\\{-1}\\{8}\\{5}}\lbeam13\go\hfill +\endsong} +\vskip-1cm +\endBeispiel + +\subheading{Entwicklung eines Verfahrens zur Phrasierung} + +Gesucht ist ein Verfahren zur \defi{Phrasierung} +von Noten, d.h. ein Verfahren, +das jede beliebige Folge von Noten \folgi Nin mit zugeh"origen +Tonh"ohen \folgi pin, Notenhalsl"angen \folgi sin und +Notenhalsrichtungen \folgi din mit einem Bogen "uberspannt. + +Wie bei der Verbalkung mu\3 zun"achst entschieden werden, ob der Bogen +oberhalb oder unterhalb der Noten verl"auft. Verl"auft der Bogen +oberhalb, so ist eine konkave Form zu w"ahlen, andernfalls +eine konvexe Form. + +Als Grundregel gilt: + +\item{P1)}Bei einstimmiger Notation wird der Bogen von Notenkopf zu +Notenkopf gef"uhrt, so da\3 die betroffenen Noten deutlich erkennbar +sind, d.h. f"ur $d_1=d_n$ wird der Bogen +unterhalb der Notenk"opfe gef"uhrt, +falls $d_1=+1$, und oberhalb, falls $d_1=-1$. +\item{} +F"ur $d_1\ne d_n$ gibt es keine einheitliche Regelung, jedoch findet man +meistens (vor allem in der Vokalmusik) die Regelung, da\3 der Bogen +oberhalb +der Notenk"opfe gef"uhrt wird, um nicht in Konflikt mit unterlegtem Text +zu geraten. +\item{P2)} Bei zwei- (oder mehr-)stimmiger Notation gilt jedoch +allgemeing"ultig die Regelung, da\3 f"ur die Phrasierung der Oberstimme +konkave Bogen und f"ur die Phrasierung der Unterstimme konvexe Bogen +vorgeschrieben sind. + +\Beispiel +{\universal +\hsize 10 cm +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\C +\group{\\{\h5}\\{\h5}}{\\{5}\\{5}}\uslur12\go +\group{\\{\h3}\\{\h3}}{\\{3}\\{3}}\lslur12\go +\group{\\{\h4}\\{\h3}}{\\{4}\\{3}}\uslur12\go +\group{\\{\h3}\\{\h4}}{\\{3}\\{4}}\uslur12\go +\two{% +\group{\\{\h3}\\{\h7}}{\\{3}\\{7}}\uslur12\go} +{\group{\\{\h1}\\{\h4}}{\\{1}\\{4}}\lslur12\go}\=\endsong +}\vskip-1cm +\endBeispiel + +Der Bogen wird im Gegensatz zum Balken +nicht dazu verwendet, den Melodieverlauf auszudr"ucken, +sondern wird abh"angig vom zur Verf"ugung stehenden Freiraum +positioniert, d.h. er darf innere Noten der Notengruppe nicht +durchkreuzen. + +Beim Handnotensatz unterscheidet der Notensetzer Legato- und Haltebogen +von Phrasierungsbogen. + +Legato- und Haltebogen sind k"urzer und meist schon als Stempel +vorhanden, w"ahrend Phrasierungsbogen freier gestochen +werden und l"anger sind. + +Legatobogen haben also f"ur eine bestimmte L"ange eine feste Kr"ummung, +w"ahrend Phrasierungsbogen in der Form variieren k"onnen. + +Da \TeX\ nicht die graphischen M"oglichkeiten besitzt, Bogen zu +zeichnen, mu\3te eine Algorithmus gefunden werden, der Bogen mit einer +festen Kr"ummung bei gleicher Breite setzt. + +Berechnet man also die Sekantensteigungen des Bogens, so ist der +zugeh"orige zu w"ahlende Bogen eindeutig bestimmt und in einem +Zeichensatz speicherbar. + +Daher ist es f"ur das Setzen eines Bogens +ausreichend, nur seine Sekantensteigung zu berechnen und +diese zu diskretisieren. + +\subsubheading{Bestimmung des Anfangs- und Endpunktes des Bogens} + +O.B.d.A. seien im folgenden Noten durch einen konkaven Bogen zu +"uberspannen. F"ur den konvexen Bogen lassen sich die "Uberlegungen +analog durchf"uhren. + +Sei \folgi Nin eine Notengruppe. Seien +\folgi pin die zugeh"origen Tonh"ohen und +$\bar p_i:=p_i\cdot0.5\hbox{|\nhh|} $ wie oben. +Seien \folgi din die Richtungen der Notenh"alse, + \folgi sin die zugeh"origen Notenhalsl"angen und + \folgi hin die Abszissenwerte der Notenh"alse. +\Bemerkung O.B.d.A. sei $h_1:=0$. Gilt +$d_i=0$ f"ur ein $i$, so besitzt +die Note keinen Notenhals. In diesem Fall sei $h_i$ +der Abszissenwert des Notenkopfmittelpunktes. +\endBemerkung +Dann gilt f"ur den Anfangspunkt $A_i$ des Bogens f"ur Noten, die nicht +mit aufw"arts gestielten Notenh"alsen verbalkt sind: +$$\matrix\format\r&\l&\l\\ +\text{F"ur } &d_i=+1& \text{ gilt } A_i=(h_i+0.5\hbox{|\nhh|}, +\bar p_i+\hbox{|\nhh|})\,,\\ + \text{f"ur } &d_i=0&\text{ gilt } A_i=(h_i, +\bar p_i+\hbox{|\nhh|})\,,\\ + \text{f"ur } &d_i=-1&\text{ gilt } A_i=(h_i+0.5\hbox{|\nhh|}, +\bar p_i+\hbox{|\nhh|})\,.\endmatrix$$ +Ist $N_i$ Element einer oberhalb der Notenk"opfe verbalkten Notengruppe, +so ist eine weitere Fallunterscheidung notwendig. Falls $N_i$ nicht das +\disp{letzte} Element der verbalkten Notengruppe ist, gilt: +$A_i =(h_i,\bar p_i+s_i+0.5\hbox{|\nhh|})\;.$ +Dies gilt auch f"ur die letzte Note einer ``Balkengruppe'', falls die +Note des Bogenendes auf die gleiche Weise verbalkt wurde, andernfalls +gilt $A_i= (h_i+0.5\hbox{|\nhh|}, \bar p_i+\hbox{|\nhh|})$. + +F"ur den Endpunkt $E_i$ des Bogens f"ur Noten, die nicht +mit aufw"arts gestielten Notenh"alsen verbalkt sind, gilt: +$$\matrix\format\r&\l&\l\\ +\text{F"ur }& d_i=+1&\text{ gilt } E_i=(h_i-0.5\hbox{|\nhh|}, +\bar p_i+\hbox{|\nhh|})\,,\\ + \text{f"ur }& d_i=0&\text{ gilt } E_i=(h_i, +\bar p_i+\hbox{|\nhh|})\,,\\ + \text{f"ur }&d_i=-1&\text{ gilt } E_i=(h_i+0.5\hbox{|\nhh|}, +\bar p_i+\hbox{|\nhh|})\,.\endmatrix$$ +Ist $N_i$ Element einer oberhalb der Notenk"opfe verbalkten Notengruppe, +so ist wiederum +eine Fallunterscheidung notwendig. Falls $N_i$ nicht das +\disp{erste} Element der verbalkten Notengruppe ist, so ist +$E_i =(h_i,\bar p_i+s_i+0.5\hbox{|\nhh|})\;.$ +Dies gilt auch f"ur die erste Note einer ``Balkengruppe'', falls die +Note des Bogenendes auf die gleiche Weise verbalkt wurde, andernfalls +ist $E_i= (h_i,\bar p_i+\hbox{|\nhh|})$. +\verbatimoff +\par +\Beispiel +\par +{\hsize 16 cm\universal +\parindent = 0pt +\beginsong +\vio\C% +\group{\\{\h3}\\{\h3}}{\\{3}\\{3}}\uslur12\go +\group{\\{\h3}\\{\g5}}{\\{3}\\{5}}\uslur12\go +\group{\\{\h3}\\{\h4}}{\\{3}\\{4}}\uslur12\go\doublebarline +\group{\\{\g4}\\{\h1}}{\\{4}\\{1}}\uslur12\go +\group{\\{\g5}\\{\g5}}{\\{5}\\{5}}\uslur12\go +\group{\\{\g5}\\{\h5}}{\\{5}\\{5}}\uslur12\go\doublebarline +\group{\\{\h4}\\{\h3}}{\\{4}\\{3}}\uslur12\go +\group{\\{\h5}\\{\g5}}{\\{5}\\{5}}\uslur12\go +\group{\\{\h4}\\{\h8}}{\\{4}\\{8}}\uslur12\go\hfill\doublebarline +\group{\\{\a3}\\{\a3}\\{\h6}}{\\{3}\\{3}\\{6}}\ubeam12\uslur13\go +\group{\\{\a3}\\{\a3}\\{\h6}}{\\{3}\\{3}\\{6}}\ubeam12\uslur23\go +\doublebarline +\group{\\{\a3}\\{\a3}\\{\a3}\\{\a3}}{\\{3}\\{3}\\{3}\\{3}% +}\ubeam12\ubeam34\uslur13\go\|% +\group{\\{\a3}\\{\a3}\\{\a3}\\{\a3}}{\\{3}\\{3}\\{3}\\{3}% +}\ubeam12\ubeam34\uslur23\go +\=\endsong} +\vskip-1cm +\endBeispiel + +Wie bei der Verbalkung mu\3 in Extremf"allen die Sekantensteigung + korrigiert werden. Dies geschieht wiederum nur durch Verschieben der +Anfangs- bzw. Endpunkte in vertikaler Richtung, d.h. durch Ver"andern der +Ordinaten. +\verbatimon + +Im folgenden seien \folgi ain und \folgi ein die Ordinatenwerte der +Punkte \folgi Ain{}bzw. \folgi Ein. +Eine Korrektur wird (auch in der Notenliteratur) nur so durchgef"uhrt, +da\3 die Sekantensteigung betragsm"a\3ig verkleinert wird, jedoch kein +Vorzeichenwechsel auftritt. + +Da die +Anfangs- und Endpunkte f"ur einen konkaven Bogen so gew"ahlt sind, +da\3 der vertikale Abstand von der Grundlinie der minimal m"ogliche ist, +kann die Korrektur nur durch Erh"ohen des Abstandes durchgef"uhrt werden. + +\item{1)}Zun"achst ist eine Korrektur notwendig, +falls der Bogen, der die Noten zwischen $N_1$ und $N_n$ "uberspannen +soll, die inneren Noten schneidet. +Die Bogen der Notenliteratur "ahneln eher Parabelausschnitten als +Kreisbogenausschnitten, wie man zun"achst vermuten w"urde. Um den +Bogenverlauf m"oglichst genau nachzuahmen, wurde ein Parabelausschnitt +gew"ahlt, der durch die beiden Endpunkte des Bogens und einen dritten +Punkt eindeutig bestimmt ist. Dieser dritte Punkt ist durch einen +Vektor, der senkrecht auf der Sekante steht, mit dem Sekantenmittelpunkt +als Aufpunkt und einer L"ange, abh"angig von der Sekantenl"ange, gegeben. +Als L"ange hat sich +hierbei ein Sechstel der Sekantenl"ange bew"ahrt, soweit +diese nicht den Betrag von |2\nhh| "uberschreitet. +\par +\item{} +Da nur eine grobe Korrektur notwendig ist, gen"ugt es, den Bogen +geeignet linear zu approximieren und zu "uberpr"ufen, ob die +inneren Noten unterhalb einer solchen Geraden +verlaufen. +\item{} +Die Gerade, die dies f"ur alle F"alle gew"ahrleistet, ist nat"urlich +die Gerade durch die +Sekante des Bogens. Dies f"uhrt jedoch f"ur die Noten, +die sich unter der Sekantenmitte befinden, zu unbefriedigenden +Ergebnissen. + Da +sich jedoch in unmittelbarer N"ahe der Bogenendpunkte keine +inneren Noten befinden, kann eine Gerade gew"ahlt werden, die +zur Sekante parallel verl"auft. +Der Abstand zur Sekante ist + abh"angig von der ``Auslenkung'' des +Bogens und der Sekantensteigung. +\item{} +Sei $\epsilon$ der Abstand der beiden +Geraden und +$S$ die errechnete Sekantensteigung bzgl. $A_1$ und $E_n$. +Dann ist +$s^*=\max_{i=2,\ldots,n-1}\{0\,,\,(e_i-a_1+S\cdot h_i)-\epsilon\}$ +der Maximalwert, um den die Approximationsgerade "uberschritten wurde. +Die Korrektur der Bogensteigung wird dann wie folgt durchgef"uhrt: +gilt $a_1e_n$, wird so korrigiert, da\3 $S$ verschwindet, d.h. +$e_n$ mu\3 um den Betrag $e_n-(a_1+s^*)$ vergr"o\3ert werden. F"ur +$a_1>e_n$ wird zun"achst $e_n$ vergr"o\3ert. Falls dabei +$S$ Null wird, ist zus"atzlich $a_1$ zu korrigieren. +\medskip +\input mdocpic4 +\medskip +\centerline{{\eightrm Skizze zur Approximation des Bogens}} +\item{2)}Eine weitere Korrektur mu\3 (nach der Diskretisierung +(s. \the\chap.2.2\XX)) +durchgef"uhrt werden, falls die Steigung die f"ur die +Zeichenbreite des Bogens zul"assige maximale Steigung "uberschreitet. +\item{} +Die Sekantensteigungen $S$ liegen im Intervall $(-1,1)\in\rz$, jedoch +kommt es auch nur selten vor, da\3 \verbatimoff$S\cdot |h|>\verbatimon +4\hbox{|\nhh|}$, d.h. die H"ohe des Zeilensystems "uberschreitet. Die +maximal zul"assige Steigung ist also abh"angig von $h$ und kann +beschrieben werden durch: +\verbatimon +$$\bar s(h)=\min(1,{4\hbox{|\nhh|}\over h})\;.$$ +Dann wird die Korrektur wiederum so durchgef"uhrt, da\3 +$a_1$ vergr"o\3ert wird, falls $a_1e_n$. + Es gilt: +$$a_{1,{\rm neu}}:=e_n-\bar s(h)\cdot h \quad\text{ bzw. }\quad +e_{1,{\rm neu}}:=a_n-\bar s(h)\cdot h \;.$$ + +\subsubheading{Diskretisierung der Sekantensteigung} +Aus den gleichen Gr"unden wie bei der Verbalkung ist eine +Diskretisierung der Sekantensteigung notwendig. Da die St"arke des +Bogens jeweils zum Bogenende abnimmt, w"are es sehr zeitaufwendig, den +Bogen aus Einzelst"ucken zusammenzusetzen. +Zu jeder Breite und jeder Steigung m"u\3te also ein vollst"andiger Bogen +bereitgehalten werden. + +Ber"ucksichtigt man folgende Gesichtspunkte, kann jedoch eine +repr"asentative Auswahl getroffen werden. +\item{1)}Da der Bogen die +Notengruppe nur "uberspannen und nicht exakt zwischen zwei Notenh"alsen +eingepa\3t werden mu\3, gen"ugt es, Bogen der Zeichenbreite $w=k\cdot +\hbox{|\nhw|} \text { mit } k\in\nz^+$ bereitzuhalten. +\item{2)}Der vertikale Abstand der Bogenendpunkte betr"agt (meistens) +ein +$m$-faches von 0.5|\nhh|, wobei als obere Grenze 4|\nhh| +angesehen werden kann, d.h. $m\le8$. +% +\item{3)}Eine weitere Schranke ist $m\le2k$, da die Sekantensteigung +kleiner als 1 sein sollte. +\item{4)}Da jedoch nicht Bogen beliebiger +L"ange bereitgehalten werden k"onnen, ist es entgegen obiger +"Uberlegung doch notwendig, Bogen gr"o\3erer Breite aus Einzelst"ucken +zusammenzusetzen. Dabei wird das Mittelst"uck durch eine Rule beliebiger +L"ange ersetzt. + +Es ergeben sich aus den obigen Gesichtspunkten f"unf verschiedene +Zeichens"atze: +\item{1)}konkave Bogen positiver Sekantensteigungen ($\frac{ht}w$) mit +Breiten $w = i\cdot\hbox{|\nhw|}\,,i\in\{1,\ldots,17\}$ und H"ohen +$ht = j\cdot0.5\hbox{|\nhh|}\,,j\in\{1,\ldots,\min({2i,8})\}$. + +\item{2)}konkave Bogen negativer Sekantensteigungen ($\frac{dp}w$) mit +Breiten $w = i\cdot\hbox{|\nhw|}\,,i\in\{1,\ldots,17\}$ und Tiefen +$dp =-j\cdot0.5\hbox{|\nhh|}\,,j\in\{1,\ldots,\min({2i,8})\}$. + +\item{3)}konvexe Bogen positiver Sekantensteigungen ($\frac{ht}w$) mit +Breiten $w$ und H"ohen $ht$ wie oben. +\item{4)}konvexe Bogen negativer Sekantensteigungen ($\frac{dp}w$) mit +Breiten $w$ und Tiefen $dp$ wie oben. +\item{5)}konkave und konvexe Haltebogen ($j=0$) verschiedener Breite +$w$ wie oben +und konkave und konvexe Bogenst"ucke +positiver und negativer Sekantensteigung konstanter Breite (% +$w=9\hbox{|\nhw|}$). +\Bemerkung +\item{1)}Die Maximalbreite $w=17\hbox{|\nhw|}$ hat sich so ergeben, da\3 +die Zeichens"atze mit jeweils 124 Elementen belegt werden konnten. +Vollst"andige Bogen einer gr"o\3eren Breite erschienen nicht sinnvoll, +da sie selten vorkommen und viel Speicherplatz ben"otigen. +\item{2)} +Zur Wahl der Bogenst"ucke: +\item{}Der Bogen wird aus drei Teilen zusammengesetzt und zwar werden je +ein Bogenst"uck positiver Sekantensteigung und ein Bogenst"uck +negativer Sekantensteigung, die jeweils konvex bzw. konkav sind, durch +eine Rule beliebiger L"ange verbunden. Dabei k"onnen sich vier +verschiedene Situationen ergeben: + +\Beispiel\vskip-1cm +\begingroup +\def\vt#1{{\offinterlineskip\vtop{\null\hbox{\slurfont\char\hex#1}\vss}% +}} +\def\vb#1{{\offinterlineskip\vbox{\vss\hbox{\slurfont\char\hex#1}\null}% +}} +\medskip +\def\rulet{\vrule height 0pt depth 1pt width36pt} +\def\ruleb{\vrule height 1pt depth 0pt width36pt} +\baselineskip2cm +\halign{\hskip\iindent#\hfil&\quad$\vcenter{#}$&\hskip\iindent#\hfil +&\quad$\vcenter{#}$\cr +a)&\hbox{\vt{28} \rulet\ \vt{30}}&b)&\hbox{\vt{20} \rulet\ \vt{38}}\cr +c)&\hbox{\vb{40} \ruleb\ \vb{58}}&d)&\hbox{\vb{48} \ruleb\ \vb{50}}\cr} +\endgroup +\medskip +\endBeispiel +\item{} +Die folgenden "Uberlegungen gelten f"ur die in Beispiel a) +aufgef"uhrte Situation, k"onnen jedoch auch auf die anderen "ubertragen +werden. +\item{} +Sei $S=\Frac{e_n-a_1}h={\dsize j\cdot0.5\hbox{|\nhh|}\over \dsize +h}$, wobei +$j\in\{0,\ldots,8\}$. +O.B.d.A. gilt $e_n>a_1$. Sei $S_1>0$ die Sekantensteigung des ersten +Bogenst"ucks und $S_2<0$ die des zweiten. Dann gilt $S_1>S$. +Die f"ur die Bogen gew"ahlten Steigungen reichen also in diesem Fall +nicht aus. Je gr"o\3er \verbatimoff$|S_2|$ gew"ahlt wird, desto +gr"o\3ere Werte m"ussen also f"ur $S_1$ bereitgehalten werden. +\item{} +Dann gilt:\verbatimon +$$S_1={S\cdot h + 9\hbox{|\nhw|}\cdot +\verbatimoff|S_2|\over\verbatimon +9\hbox{|\nhw|}}$$\verbatimon +Da die H"ohen in den "ubrigen Zeichens"atzen als Vielfaches von +0.5|\nhh| gew"ahlt wurden, d.h. +da\3 $S\cdot h = j\cdot 0.5\hbox{|\nhh|}$ f"ur ein +$j\in\{1,\ldots,8\}$, gilt, falls eine solche Darstellung auch f"ur +\verbatimoff $|S_2|\cdot 9\verbatimon +\hbox{|\nhw|}=j^*\cdot0.5\hbox{|\nhh|}$ mit fest gew"ahltem +$j^*\in\nz$ +angenommen wird,\verbatimon +$$S_1={(j+j^*)\cdot 0.5\hbox{|\nhh|}\over 9\hbox{|\nhw|}}\,.$$ +Dies ergibt f"ur $S_1$ acht verschiedene Werte +$ht_j=j\cdot\hbox{|\nhh|}$, +$j\in\{j^*+1,\ldots,j^*+8\}$. \verbatimoff +Da der Wert f"ur $|S_2|$ noch mitgerechnet \verbatimon +werden mu\3, sind neun verschiedene Bogenst"ucke f"ur jeden Fall +notwendig (positiv, negativ, konvex, konkav). +\item{} +Die Auswahl der Steigungen ist also nur abh"angig von $j^*$ und nicht +von $h$. +Die vorliegenden Zeichens"atze wurden mit $j^*=2$ erzeugt. +Der Fall $S=0$ mu\3 als Sonderfall betrachtet werden, da in diesem Fall +$S_1=-S_2$ gelten mu\3. Die Wahl +$j^*=2$ erweist sich in diesem Fall jedoch als +zu flach. Aus diesem Grund werden f"ur $S=0$ Bogen mit $j=4$ +verwendet. +\endBemerkung +\subheading{Ausf"uhrung des Balken- und Bogensatzes} + +\subsubheading{Nachbarschaften} + +Das Setzen der Bogen und Balken ist in hohem Ma\3e abh"angig vom +Kontext, z.B. Bestimmung der Anfangs- und Endpunkte der Bogen, die +Richtung und L"ange der Notenh"alse. + +Im Unterschied zum Textsatz besteht hier die Notwendigkeit, +Notenschriftelemente, die auf eine solche Weise in Verbindung stehen, +d.h. nicht isoliert zu behandeln sind, gleichzeitig zu verarbeiten. + +Gomberg (\lit\gomb) hat f"ur Notenschriftelemente, die untereinander in +Beziehung stehen, indem sie gleichen horizontalen Raum beanspruchen, +den Begriff der \defi{Nachbarschaften} formuliert +(s.a. Kapitel \adchap2\XX). + +Anlehnend an diesen Begriff m"ochte ich Notenschriftelemente, die in +irgendeiner Weise (graphisch) miteinander verbunden sind, zu einer +Nachbarschaft zusammenfassen. Dazu geh"oren Notengruppen, die verbalkt +werden sollen, aber auch Notengruppen, die mit einem Bogen "uberspannt +werden sollen. Da sich diese Gruppen "uberschneiden k"onnen, sind +Nachbarschaften oft gr"o\3er als die einzelne Notengruppe. + +\Beispiel +{\hsize 10 cm +\loose +\advance\hsize2\iindent +\parindent2\iindent +\beginsong +\vio\Es \hskip20pt\group{\\{\a8}\\{\s3}\\{\s4}\\{\a5} +\\{\s5}\\{\s6}\\{\n7\a7}\\{\s{13}}\\{\s7}} +{\\{8}\\{3}\\{4}\\{5}\\{5}\\{6}\\{7}\\{13}\\{7}} +\def\beamlist{\\{1-3,}\\{2-3,}}\lbeam13% +\def\beamlist{\\{4-6,}\\{5-6,}}\lbeam46% +\def\beamlist{\\{7-9,}\\{8-9,}}\lbeam79\uslur24\uslur57\uslur89\go +\hfill\=% +\endsong} +\vskip-1cm +\endBeispiel + +\Bemerkung Da es in einer Nachbarschaft nicht m"oglich ist, eine Note +isoliert zu sehen, ist es auch nicht m"oglich, eine Nachbarschaft ohne +"au\3eres Einwirken (durch den Benutzer) zu trennen. +\item{} +In \TeX\ wird eine solche Nachbarschaft als Box aufgefa\3t, deren Glue +nicht mehr variabel ist. Enth"alt ein Musikst"uck gr"o\3ere +Nachbarschaften, wird es problematisch, geeignete Umbruchpunkte f"ur den +Zeilenumbruch zu finden. +\item{} +Das \TeX-Konzept f"ur Ausschlu\3 und Zeilenumbruch erweist sich also an +dieser Stelle als hinderlich. +\goodbreak +\subsubheading{Verarbeitung der Nachbarschaften}Zur Verarbeitung der +Nachbarschaften ist es notwendig, Informationen "uber die einzelnen +Nachbarschaftselemente zu verwalten, z.B. die Tonh"ohen der Noten, die +L"angen der Notenh"alse, den oberen und unteren Anfangs- und Endpunkt +f"ur Bogen. + +Eine Speicherung beliebig vieler gleichartiger Elemente, z.B. in +Vektoren, ist in \TeX\ nicht vorgesehen. Es ist jedoch m"oglich, mit +Hilfe von Kontrollsequenzen Listen aufzubauen (\lit\Knuth, \Texbook, +Anhang D.2). +Eine Liste von $n$ Informationen kann in der Form +\begindisplay +|\\{|\|}\\{|\|}| $\ldots$ |\\{|\|}| +\enddisplay +kodiert werden, +wobei jedes \ eine wohlgeklammerte Tokenliste ist. + +Eine parameterlose Kontrollsequenz, z.B. |\liste|, deren Ersetzungstext +obige Form besitzt, hei\3t \defi{Listenmacro} (\tex{list macro}). +Das leere Listenmacro mit $n=0$ hei\3t |\empty|. Die einzelnen Elemente +werden durch |\\| getrennt. +Wird |\\| als Kontrollsequenz aufgefa\3t und als Makro +mit einem Argument definiert, so k"onnen +verschiedene Effekte erzielt werden, wenn es auf die +Liste angewendet wird. +\Beispiel +Mit |\def\\#1{\hbox{#1}}| +werden durch Aufruf von |\vbox{\liste}| alle Elemente von Liste +untereinander gesetzt. +\endBeispiel +Durch Umdefinieren von |\\| kann man auch auf die Elemente selber +einwirken. Sie k"onnen ausgetauscht werden, neue Elemente an- und +eingef"ugt oder alte gel"oscht werden. + +Solche Listen k"onnen also dazu benutzt werden, Informationen, die zur +Bearbeitung der Nachbarschaften notwendig sind, zu speichern. + +Die Bearbeitung der Nachbarschaften erfolgt in drei Teilschritten: +\item{1)}Die Initialisierung der ben"otigten Listen. +\item{2)}Die Berechnung der ben"otigten Balken und Bogen nach den in +\the\chap.1 und \the\chap.2 +beschriebenen Verfahren und das Einf"ugen der ent\-% +sprechenden Zeichensatzelemente in die Nachbarschaft. +\item{3)} Das endg"ultige Setzen der Nachbarschaft. + +\subsubsubheading{Die ben"otigten Listen} +Im folgenden sollen die ben"otigten Listen beschrieben werden. + +\item{1)}Als Anfangsinformation m"ussen folgende Listen gegeben sein. +Diese sind vom "Ubersetzungspro\-gramm +(\lit\Schofer) bereitzustellen: +\item{a)}Die Liste aller Elemente der Nachbarschaft (|\elementlist|). +\item{} +Normalerweise bestehen die Elemente aus jeweils einer Note mit, falls +vorhanden, zugeh"origem Vorzeichen und eventuellen Wertpunkten. +Des weiteren kann ein Element einen Akkord beinhalten oder +andere Notenschriftelemente wie z.B. Taktstriche, zu unterlegende Texte +oder Akzente. +\item{b)}Die Liste der Tonh"ohen der Noten der +Nachbarschaft (|\pitchlist|).\item{} +Das $i$-te Element der +|\pitchlist| enth"alt die jeweilige + Tonh"ohe des $i$-ten Elementes der |\elementlist|. + Bei Akkorden kann jedoch +nur die Tonh"ohe des Notenkopfes, der f"ur die Verbalkung +relevant ist, angegeben werden. Auch Taktstrichen kann eine Tonh"ohe +zugewiesen werden. So kann man vor einem Zeilenumbruch einen +Bogen "uber einem Taktstrich enden lassen. +\item{c)} Die Liste, die Informationen "uber die durch Balken zu +verbindenden Noten enth"alt (|\beamlist|). +\item{} +Die Zahl der Elemente gibt die Anzahl der Balkenreihen $r$ an und die +jeweiligen Elemente, +welche Noten in der Balkenreihe zu verbinden sind. +Wie in \XX \the\chap.1 +erw"ahnt, ist nicht allein aus den Notenwerten erkennbar, +welche Noten der Nachbarschaft miteinander verbunden werden m"ussen, da +die Noten +innerhalb der Balkengruppe noch weiter gruppiert werden m"ussen, +um die Betonungsverh"altnisse im Takt zu verdeutlichen. +\item{} +Aus diesem Grund enthalten die Elemente der Balkenlisten eine weitere +Liste, die angibt, welche Noten in der jeweiligen Balkenreihe +miteinander verbunden werden. +\item{} +Sei $l$ die Anzahl der Elemente einer solchen ``Unterliste'' und +seien die Elemente $n_1$ bis $n_2$ der Nachbarschaft zu verbalken. +Das $i$-te Element des Listenelementes ist dabei +von der Form: +$$\matrix\format\l&\r&\l\\\hbox{A:}\qquad& +k_{i_1}-k_{i_2},& \text{ wobei }k_{i_{1,2}}\in\{n_1,\ldots,n_2\} +\text{ und }k_{i_1}\leq k_{i_2}\,,\\ +\noalign{\text{ oder }} +\hbox{B:}\qquad&-k_{i_2},&\text{ wobei }k_{i_2} +\text{ wie oben und }k_{i_1} \text{ fehlt.} +\endmatrix$$ +\item{}F"ur die Folge +$(k_{i_1},k_{i_2}),i\in\{1,\ldots,l-1\}$ mu\3 gelten: +$$k_{i_1}7.5pt \dimen1=\ht0 \advance \dimen1 by 2pt \ht0=\dimen1 \fi + \ifdim\dp0>2.5pt \dimen1=\dp0 \advance \dimen1 by 2pt \dp0=\dimen1 \fi + \setbox0=\hbox{% + \vrule depth \dp0 width 0pt \box0}\box0\global\advance\counter by1 } +\def\normalchart{% + &\Oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0 + &\Oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1 + &\Oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2 + &\Oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3 + &\Oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4 + &\Oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5 + &\Oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6 + &\Oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline + &\Oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7 + &\Oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline} +\def\table #1 {{\offinterlineskip +\font\sfont=#1 +\edef\fontname{#1} +\beginchart\sfont +\normalchart +\endchart +\bigskip +}} + +\table{music16} +\centerline{\bf Tabelle 1} +\vfill\eject + +\table{beam16} +\centerline{\bf Tabelle 2} +\vfill\eject +% +{ +\advance\hsize by 4cm\advance \hoffset by -2cm +\table{slur16} +\centerline{\bf Tabelle 3} +\vfill\eject +} + +\table{sluruu16} +\centerline{\bf Tabelle 4} +\vfill\eject + +\table{slurdu16} +\centerline{\bf Tabelle 5} +\vfill\eject + +\table{slurud16} +\centerline{\bf Tabelle 6} +\vfill\eject + +\table{slurdd16} +\centerline{\bf Tabelle 7} +\vfill\eject + diff --git a/macros/mtex/documentation/mdocdef.tex b/macros/mtex/documentation/mdocdef.tex new file mode 100644 index 0000000000..f8d82101e0 --- /dev/null +++ b/macros/mtex/documentation/mdocdef.tex @@ -0,0 +1,258 @@ +% this is MDOCDEF.TEX +% +\frenchspacing +\openup3pt +\hsize=16.0cm +\vsize=25.0cm +\advance\hoffset by 0.5cm +\parindent 0pt +\nopagenumbers +% +\font\bigrm=cmbx12 +%\font\ninerm=cmr9 %not on Atari +\font\ninerm=cmr10 +\font\eightrm=cmr7 %only on Atari +\font\tensl=cmr10 %only on Atari + +\font\eighttt=cmtt8 +%\font\hugem=cmbx10 scaled 2000 %not on Atari +\font\hugem=cmbx10 scaled 1440 +\font\huge=cmbx12 +% +\let\headings\relax +\let\keyy=\key +\def\us{\hbox{\tt\char`\_}} +\def\os{\hbox{\tt\char`\^}} + +\newskip \iindent \iindent=30pt +\footline={} +\parindent=0pt +\def\lit#1{\ifmmode\lbrack\text{#1}\rbrack +\else$\lbrack\,${}#1{}$\,\rbrack$\fi} +\def\tex#1{{\it #1\/}} +\def\disp#1{{\sl #1\/}} +\def\defi#1{{\bf #1}} +\def\definition{\Parsep\hang\hangafter 1 +\noindent{\bf Definition:}\hskip1em\relax} +\def\parh{\par\hang\hangafter0} +\def\parn{\par\noindent} +\def\enddefinition{\Parsep} +\def\Beispiel{\goodbreak\Parsep\hang\hangafter 1 +\noindent{\bf Beispiel:}\hskip1em\relax} +\def\endBeispiel{\Parsep} +\def\Bemerkung{\Parsep\hang\hangafter 1 +\noindent{\bf Bemerkung:}\hskip1em\relax} +\def\endBemerkung{\Parsep} +\def\ul#1{$\underline{\text{#1}}$} +\def\pt{\ifmmode\,{\rm pt}\else pt\fi}%nur f"ur mathmode +\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity +\def\fil{\ifmmode\,{\rm fil}\else fil\fi}%nur f"ur mathmode +\def\fill{\ifmmode\,{\rm fill}\else fill\fi}%nur f"ur mathmode +\def\filll{\ifmmode\,{\rm filll}\else filll\fi}%nur f"ur mathmode +\def\tbox{{\hbox{\rm `box'}}} +\def\tglue{{\hbox{\rm `glue'}}} +\def\tkern{{\hbox{\rm `kern'}}} +\def\tpenalty{{\hbox{\rm `penalty'}}} +\def\summ{\sum_{j=1}^m} +\def\folg#1#2{${#1}_1,\ldots,{#1}_{#2}$} +\def\folgi#1#2#3{\ifmmode ({#1}_{#2})_{{#2}=1,\ldots,{#3}} +\else \hbox{$({#1}_{#2})_{{#2}=1,\ldots,{#3}}$}\fi} +\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet +\def\hang{\hangindent\iindent} +\def\textindent#1{\noindent\hskip\iindent\llap{#1\enspace}\ignorespaces} +\def\item{\par\hang\textindent} +\def\itemitem{\par\noindent\hskip\iindent\hangindent2\iindent\textindent} +% macros for non-centered displays +\outer\def\begindisplay{\obeylines\startdisplay} +{\obeylines\gdef\startdisplay#1 +{\catcode`\^^M=5$$#1\halign\bgroup\hskip\iindent##\hfil&&\qquad##\hfil\cr}} +\outer\def\enddisplay{\crcr\egroup$$} +\def\vo{\tt\verbatimon} +\def\voff{\tt\verbatimoff} +\def\mod{\hbox{mod}} +\def\sign{\hbox{sign}} +\def\const{\hbox{const}} +\def\mins{\hbox{mins}} + +\def\Brook{1} +\def\brook{1} +\def\byrd{2} +\def\genzmeier{3}%lehrbuch f"ur textsatz +\def\genzmer{3}%lehrbuch f"ur textsatz +\def\grabner{6} +\def\gomb{4} +\def\Gourlay{5} +\def\gourlay{5} +\def\Hader{7} +\def\hader{7} +\def\Knuth{8} +\def\Texbook{9} +\def\TeXbook{9} +\def\Knuthmf{10} +\def\Peters{11} +\def\Schofer{12} +\def\smith{13} +\def\Smith{13} +\def\Steinb{14} +\def\Werner{15} +\def\werner{15} +\def\Wirth{16} +\def\ziegen{17} +\def\Ziegen{17} +\def\Zima{18} +\def\Zimat{19} + + +% \box\bigdot is a null box with a bullet at its reference point +\newbox\bigdot \newbox\smalldot +\setbox0=\hbox{$\vcenter{}$} % \ht0 is the axis height +\setbox1=\hbox to0pt{$\hss\bullet\hss$} % bullet is centered on the axis +\setbox\bigdot=\vbox to0pt{\kern-\ht1 \kern\ht0 \box1 \vss} +\setbox1=\hbox to0pt{$\hss\cdot\hss$} % cdot is centered on the axis +\setbox\smalldot=\vbox to0pt{\kern-\ht1 \kern\ht0 \box1 \vss} + +% \samplebox makes the outline of a box, with big dot at reference point +\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text + {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss} + \nointerlineskip + \vbox to #2{}}% now \box0 has the desired ht, dp, and wd + \hbox{\copy\bigdot + \vrule height.2pt depth.2pt width#3% + \kern-#3% + \makelightbox + \kern-#3% + \raise#1\vbox{\hbox to #3{\hss#4\hss} + \kern 3pt}}}} + + +\def\adchap#1{{\advance\chap#1\the\chap}} + +\newcount\chap +\newcount\sub +\newcount\subsub +\newcount\subsubsub +\pageno=1 +\chap=0 +\sub=0 +\subsub=0 +\subsubsub=0 +\def\heading#1{\advance\chap1 \sub=0\subsub=0\subsubsub=0 +\hbox{} +\vskip1.5cm +\ifodd\pageno\else\advance\pageno1\fi +\count2=\pageno +\ifnum\chap>-1 +\headline={\ifnum\count2=\pageno \hfill +\else \ifodd\pageno\hss\eightrm\ifnum\chap<1\else\ifnum\chap<14 +\the\chap. \else\fi\fi#1\hss{\tenrm\folio} +\else{\tenrm\folio}\hss\eightrm\ifnum\chap<1\else\ifnum\chap<14 +\the\chap. \else\fi\fi#1\hss +\fi\fi}% +\else \headline={\hfill}\fi +\ifnum\chap=1 +\else\line{\hfil\bigrm\ifnum\chap<1\else\ifnum\chap<14 +\the\chap.\quad\else\fi\fi#1\hfil}\fi +\lineouti{#1}\bigskip} +\def\subheading#1{\advance\sub1\subsub=0 +\subsubsub=0\goodbreak +\bigskip\line{\bf\the\chap.\the\sub\quad#1\hfil}\lineoutii{#1}\smallskip} +\def\subsubheading#1{\advance\subsub1 +\subsubsub=0 +\medskip\line{\bf\the\chap.\the\sub.\the\subsub +\quad#1\hfil}%\lineoutiii{#1} +\smallskip} +\def\subsubsubheading#1{\advance\subsubsub1 +\goodbreak +\medskip{\bf #1.%\lineoutiv{#1} +}\quad} +% +\def\mf{{\rm METAFONT}} +\newwrite\refs +\newwrite\inhalt +\immediate\openout\refs = xrefs.tex +\immediate\openout\inhalt = inhalt.tex +\def\lineoutiv#1{\immediate\write\inhalt{\the\chap.\the\sub.\the\subsub.% +\the\subsubsub : #1 = \the\pageno}} +\def\lineoutiii#1{\immediate\write\inhalt{\the\chap.\the\sub.\the\subsub% +\ #1 }} +\def\lineoutii#1{\immediate\write\inhalt{\the\chap.\the\sub +&\noexpand\rm \noexpand#1 &\the\pageno\cr}} +\def\lineouti#1{\immediate\write\inhalt{\cr +\the\chap &\noexpand\bf \noexpand#1 &\the\pageno\cr\cr}} +\def\XX{\immediate\write\refs{\the\pageno : \the\chap.\the\sub.% +\the\subsub.\the\subsubsub}} + +% Macros for drawing figures +\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 } +\def\hidevrule#1#2{\kern-#1{\dimen0=#1 + \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 } +% \makeblankbox puts rules at the edges of a blank box +% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp) +% #1 is rule thickness outside, #2 is rule thickness inside +\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}% + \kern-#1% overlap the rules at the corners + \hbox to\wd0{\hidevrule{#1}{#2}% + \raise\ht0\vbox to #1{}% set the vrule height + \lower\dp0\vtop to #1{}% set the vrule depth + \hfil\hidevrule{#2}{#1}}% + \kern-#1\hidehrule{#2}{#1}}}} +\def\maketypebox{\makeblankbox{0pt}{1pt}} +\def\makelightbox{\makeblankbox{.2pt}{.2pt}} +% \arrows makes things like <--- text ---> +\def\arrows#1#2{% #1=width, #2=text + {\setbox0=\hbox{$\mkern-2mu\mathord-\mkern-2mu$} + \hbox to #1{\kern-.055556em$\leftarrow\mkern-6mu$% + \cleaders\copy0\hfil + \kern.4em #2\kern.4em + \cleaders\copy0\hfil + $\mkern-6mu\rightarrow$\kern-.055556em}}} +%Taktstriche +\def\gleich{\hbox{\strut\vrule\kern2pt\vrule width2pt} } +\def\dbl{\hbox{\strut\vrule\kern2pt\vrule}} +\def\lrepeat{\hbox{\strut\vrule width2pt\kern2pt\vrule\kern2pt: }} +\def\rrepeat{\hbox{\strut\ :\kern2pt\vrule \kern2pt\vrule width2pt }} +\def\lrrepeat{\hbox{\strut\ :\kern2pt\vrule \kern2pt% + \vrule width2pt \kern2pt\vrule\kern2pt: }} +\def\ball#1{\noindent\hbox to 15pt{\hss\hbox to 0pt{\hss$\bigcirc$\hss}% +\hbox to0pt{\hss#1\hss}\hss}} +\def\vspace#1{\noalign{\vskip#1}} +\catcode`\@=11 +\outer\def\Refs{\relaxnext@\def\refskip@{\hskip\@ne sp\hskip\m@ne sp}% + \def\next@{\ifx\next\nofrills\def\next@\nofrills{\nextii@}\else + \def\next@{\nextii@{}}\fi\next@}% + \def\nextii@##1{\bigbreak\hbox to\hsize{\hfil\tenpoint + \smc\ignorespaces##1\unskip\hfil}\nobreak + \bigskip\sfcode`.=\@m}% + \futurelet\next\next@\openup\jot} +\catcode`\@=\active + + + +\newskip \iindent \iindent=30pt +\def\hang{\hangindent\iindent} +\def\textindent#1{\noindent\hskip\iindent\llap{#1\enspace}\ignorespaces} +\def\item{\par\hang\textindent} +\def\itemitem{\par\noindent\hskip\iindent\hangindent2\iindent\textindent} +% +% Definitionen f"ur Literatur %%%%% +\def\Brook{1} +\def\Gourlay{2} +\def\Texbook{3} +\def\Knuthmf{4} +\def\Peters{5} +\def\Smith{6} +\def\Steinb{7} +\def\Werner{8} +\def\Zima{11} +\def\Zimat{12} +\def\Wirth{9} +\def\Ziegen{10} + +%% Additional macros (SFB72) +\def\rz{\ifmmode I\hskip-0.4em R\else$I\hskip-0.4em R$\fi} +\def\nz{\ifmmode{I\hskip -3pt N}\else{\hbox{$I\hskip -3pt N$}}\fi} +\def\gz{\ifmmode{Z\hskip -4.8pt Z}\else{\hbox{$Z\hskip -4.8pt Z$}}\fi} +\def\qz{\ifmmode{Q\hskip-5.0pt\vrule height6.0pt depth 0pt\hskip6pt} + \else{\hbox{$Q\hskip-5.0pt\vrule height6.0pt depth 0pt\hskip6pt$}}\fi} + +% diff --git a/macros/mtex/documentation/mdocdef2.tex b/macros/mtex/documentation/mdocdef2.tex new file mode 100644 index 0000000000..1652bc6e8f --- /dev/null +++ b/macros/mtex/documentation/mdocdef2.tex @@ -0,0 +1,60 @@ +% +% Definitionen nur fuer MDOC1,2,3 + ANHB !!! +% +\def\mf{METAFONT} +\def\P{Partitur} +\def\BNF{Backus--Naur--Form} +\def\kf{kontext--frei} +\def\G{Grammatik} +\def\A{Automatisierung} +\def\Em{Eingabemethode} +\def\Ev{Eingabeverfahren} +\def\SZ{Seiten-- und Zeilenumbruch} +\def\Tss{Textsatzsystem} +\def\m{musikalisch} +\def\abschnitt{\par\penalty-100\vskip15pt plus7.5pt minus10pt\noindent} +\def\absatz{\par\penalty-50\vskip7.5pt plus4.5pt minus6pt\noindent} +\def\abs{\parsep} +\def\zB{zum Beispiel } +\def\dh{das hei\3t } +\def\lit#1{\lbrack {#1}\rbrack} +\def\de#1{{\sl #1}} +\def\q{\quad} +\def\qq{\quad\quad} +\def\abl{\mathop{\Longrightarrow}\limits} +\def\ks#1{\noindent\hbox{{\tt \char\hex5C}\bf#1}} +%\def\ks#1{\bs{\bf#1}} %definition f"ur Kontrollsequenzen + +\mathchardef\SETMINUS=\hex226E +\def\SETminus{\raise2pt\hbox{${\scriptstyle\SETMINUS}$}} +\def\Setminus{\raise1.5pt\hbox{${\scriptscriptstyle\SETMINUS}$}} +\def\setminus{{\mathchoice{\SETminus}{\SETminus}{\Setminus} + {\Setminus}}} + +\mathchardef\Bullet=\hex220F +\def\bullet{\,{\raise1pt\hbox{$\scriptscriptstyle\Bullet$}}\,} +\mathchardef\CHI=\hex011F +\def\chi{{\raise2pt\hbox{$\CHI$}}} + +\def\bs{\noindent\hbox{{\tt \char\hex5C}}}%Backslash +\def\nl#1{{$\langle${\rm #1}$\rangle$}} %Klammerung f"ur BNF im Text +\def\nls#1{{$\langle${\eightrm #1}$\rangle$}} +%Klammerung f"ur BNF im Text eightrm +\def\nm#1{{\langle{\hbox{\rm#1}}\rangle}}% " " "in Math +\def\T{{$|$}} %definiert den Trennungsstrich f"ur die BNF +\def\lk{\hbox{{\tt\char\hex7B}}}%linke Klammer auf +\def\rk{{\hbox{\tt \char\hex7D}}}%rechte +\def\strich{{\hbox{\tt \char\hex7C}}} +\def\dpkt{{\hbox{\tt \char\hex3A}}}%Doppelpunkt +\def\gleich{{\hbox{\tt \char\hex3D}}}% +\def\slash{\noindent{\hbox{\tt \char\hex2F}}} +\def\blank{{\hbox{\tt \char\hex20}}} + +\def\bss{\hbox{{\eighttt \char\hex5C}}}%kleiner backslash +\def\lks{\hbox{{\eighttt\char\hex7B}}}%kleine linke Klammer +\def\rks{{\hbox{\eighttt \char\hex7D}}}%rechts +\def\blanks{{\hbox{\eighttt \char\hex20}}}%kleines blank + +\def\subheading#1{\smallbreak\noindent{\tenpoint\bf\ignorespaces + #1\unskip.\enspace}\ignorespaces} + diff --git a/macros/mtex/documentation/mdoceinl.tex b/macros/mtex/documentation/mdoceinl.tex new file mode 100644 index 0000000000..f36cd336e1 --- /dev/null +++ b/macros/mtex/documentation/mdoceinl.tex @@ -0,0 +1,207 @@ +\heading{Einleitung} + +\defi{Notensatz} kann als Herstellungsproze\3 einer +reproduktionsf"ahigen Vorlage zum Druck eines Notenblattes definiert +werden. +Wurde urspr"unglich dieser Begriff nur f"ur das Herstellungsverfahren mit +Metall-Lettern verwendet, so bezeichnet er heute allgemein das +Positionieren der einzelnen Notenschriftzeichen unabh"angig vom dazu +verwendeten Verfahren. +Bis heute ist es noch "ublich, die Druckvorlagen f"ur den Notensatz +manuell herzustellen. Es wurde bisher noch kein zufriedenstellendes +Verfahren gefunden, das die langwierigen Techniken des Handnotensatzes +durch Satzmaschinen abl"osen k"onnte. + +\subsubsubheading{Geschichtliche Entwicklung des Handnotensatzes im +"Uberblick} + Mit der Erfindung des Buchdruckes mit beweglichen Lettern + durch Johannes Gutenberg um das Jahr 1440 +begannen fast gleichzeitig die ersten Versuche, +neben Texten auch Musiknoten zu setzen. +Die Notenzeichen +wurden in Holz geschnitten, sp"ater mit Holz- und Metall-Lettern +gesetzt. +Gleichzeitig entwickelte sich das konkurrierende Verfahren des +Stichs in Kupfer-, Zinn- und Zinkplatten: +in die hochgl"anzende Metallplatte erfolgt nach einer +"Ubersichtseinteilung und Rastrieren der Notenlinien das Einschlagen +der Typen (Notenk"opfe, Zeichen und Buchstaben) mit Hilfe von +Stahlstempeln und anschlie\3end das eigentliche ``Stechen'' der +Taktstriche, Stiele (Notenh"alse), Kopfstriche, Balken, Crescendozeichen +und Bogen. + +Im Laufe der Jahrhunderte wurden viele Versuche unternommen, das +aufwendige und komplizierte Verfahren zur Herstellung einer Druckvorlage +zu vereinfachen. +Im Jahr 1755 f"uhrte J. G. Immanuel Breitkopf den Typendruck zu einer +praktikablen und technisch ausgereiften L"osung, die bis heute +unver"andert angewandt wird. Dieses Verfahren eignet sich jedoch nur +f"ur kleinere Notenbeispiele, die in laufenden Text eingegliedert werden +(z.B. in Schulliederb"uchern), da die Zahl der Lettern selbst f"ur kurze +einzeilige St"ucke sehr gro\3 ist. + +Als einziges Verfahren neben dem Plattenstich, das universell anwendbar +ist, hat sich das Autographie-Lichtpause-Verfahren, die sogannte +\disp{Autographie}, erwiesen. Dieses Verfahren kommt dem Versuch +gleich, die Lettern des Buchdruckes \disp{handschriftlich} nachzuahmen, +denn die Noten werden von Hand auf Pauspapier geschrieben und auf +lichtempfindlich gemachte Offset-Druckplatten kopiert. Die Autographie +ist weniger zeitaufwendig aber qualitativ minderwertiger als der +Plattenstich. + +\subsubsubheading{Entwicklung des automatisierten Notensatzes} +Der Grund f"ur das Scheitern aller anderen Verfahren, z.B. die Benutzung + einer \disp{Noten-Schreibmaschine}, ist in erster Linie in der +Vielfalt der Notenschriftelemente und der M"oglichkeiten ihrer +Anordnung auf dem Blatt zu sehen, die f"ur + eine \disp{korrekte} Wiedergabe eines Musikst"uckes notwendig ist. + +Im Gegensatz zum Textsatz war es also kaum m"oglich, den Handnotenstich +maschinell auszuf"uhren, da der Satzproze\3 komplizierter ist. +Jedes Notenschriftelement enth"alt mehrere Informationen. +Zum Beispiel dr"uckt die +\disp{Gestalt} einer Note ihre zeitliche +Dauer aus und die Position im Zeilensystem ihre Tonh"ohe. +Die Menge an Informationen, die auf engsten Raum dem Musiker +vermittelt werden mu\3, macht eine Vielzahl von Satz- und Notations\-% +regeln erforderlich. Diese Konventionen sind historisch gewachsen und +m"ussen genauestens beachtet werden. +Da au\3erdem eine gro\3e Anzahl +von (mitunter variablen) Schriftzeichen ben"otigt wird, war + jeder Versuch, mit beweglichen Lettern zu setzen, +von vornherein zum Scheitern verurteilt. + +Bis heute ist kein Verfahren bekannt, das den Satzvorgang beschleunigt +und gleichzeitig die Qualit"at des +Metallplattenstichs zumindest erreicht. + +Als die ersten leistungsf"ahigen Rechner in den Universit"aten und +anderen Forschungseinrichtungen zu Verf"ugung standen, wurden sie +zun"achst f"ur die Musiktheorie interessant als Speicherm"oglichkeit +f"ur Musikliteratur. Es wurden also zun"achst +Eingabesprachen entwickelt, die eine interne Darstellung von Noten +m"oglich machten. Arbeiten auf diesem Gebiet erschienen unter anderen +von Brook und Gould \lit{\brook}. Diese Eingabesprachen wurden +weiterentwickelt, so da\3 sie f"ur die Musikanalyse verwendet werden +konnten (s. z.B. die Arbeit von R. Werner \lit\werner). +Die Ergebnisse konnten auch genutzt werden, Programmsysteme, +die den automatisierten Notensatz erm"oglichen, im folgenden kurz +``Notensatzsysteme'' genannt, zu entwickeln. + Dieses Gebiet wurde zun"achst von + von D. Byrd (\lit\byrd), D. A. Gomberg (\lit\gomb) und +L. Smith (\lit\smith) bearbeitet. +Bei diesen sind verschiedene +Entwicklungsziele zu beachten: die Spannbreite reicht von spezialisierten +Zeichenprogrammen bis zum Versuch, den Noten\disp{satz} zu automatisieren. +Allen bisher bekannt gewordenen Notensatzsystemen ist gemeinsam, da\3 +sie jeweils nur Teilbereiche der konventionellen Notenschrift abdecken. + +In letzter Zeit sind neue Versuche +bekannt geworden, Notensatz zu automatisieren +(s. z.B. \lit{\Gourlay}). + + +Das liegt einerseits an der steigenden Ausgabequalit"at +von graphischen Systemen und andererseits an den steigenden Kosten +von neuen Editionen, die im manuellen Verfahren hergestellt werden. +Um qualititativ hochwertige Ergebnisse zu erzielen, +sind jedoch nur solche automatisierten +Satzsysteme von Interesse, die weitgehend +unabh"angig vom Ausgabeger"at und benutzerfreundlich arbeiten. +Das hei\3t, da\3 Benutzer, die keine Satzregeln kennen, +mit Hilfe eines Satzprogramms ein \disp{korrekt} gesetztes Notenblatt +erstellen k"onnen. + +Der Vorteil des Computersatzes gegen"uber manuellen oder +anderen maschinellen Satzverfahren +liegt einerseits darin, da\3 die einzelnen Stimmen eines + Musikst"ucks im wesentlichen nur einmal +eingegeben werden brauchen, aber auf verschiedene Weise verarbeitet +werden k"onnen (z.B. sowohl f"ur die Partitur als auch f"ur die +Orchesterstimmen, so da\3 die Fehleranf"alligkeit vermindert wird), +andererseits in der M"oglichkeit der +dynamischen Notenplazierung (z.B. +der automatisierte Umbruch von Notenzeilen). + + +\subsubsubheading{Verwendung eines Textsatzsystems f"ur den Notensatz} +Aus der Benutzung des Programmsystems zum Satz mathematischer Texte von +D. E. Knuth, genannt \TeX, am hiesigen Institut erwuchs das Interesse, +dessen M"oglichkeiten f"ur den Notensatz zu verwenden. +Dieses Textsatzsystem zeichnet sich aus durch einen +qualitativ hochwertigen Algorithmus zum +Umbruch von Zeilen und durch einen weitgehend zeilenungebundenen Satz +von mathematischen Formeln. +Eine von \TeX\ zu verarbeitende +Eingabedatei besteht dabei aus Texten, die mit Hilfe von zus"atzlich +einzugebenden sogenannten ``Kontrollsequenzen'' (dies sind in der +Hauptsache Satzanweisungen) formatiert werden k"onnen. +Der Benutzer kann dabei +auch aus bereits bekannten Kontrollsequenzen eigene zusammenstellen und +benennen. Dadurch entsteht eine neue Kontrollsequenz, das sogenannte +``Makro''. Mehrere solcher Makros k"onnen zu einem sogenannten ``Format'' +zusammengefa\3t werden. Dies erm"oglicht es, Texte nach eigenen +Vorstellungen zu gestalten. + +Die grundlegende Frage zu Beginn dieser Arbeit war es, ob es m"oglich +ist, ein Textsatzsystem zur L"osung des Notensatzproblems +einzusetzen, + das unter anderem darin besteht, +die umfangreichen Notations- und Satzregeln zu programmieren. + +Es wird gezeigt, da\3 eine Erweiterung zu einem Notensatzsystem +m"oglich ist, ohne das zugrunde gelegte Programm zu "andern. + +Um das entwickelte System +benutzbar zu machen, wurde eine eigene Eingabesprache entwickelt, denn +die \TeX-Eingabe selbst ist sehr aufwendig, +da man +die Notenschrift nicht als fortlaufenden Text eingeben kann, sondern nur +Kontrollsequenzen verwenden mu\3. +Dazu wurde ein "Ubersetzungsprogramm angefertigt, das zus"atzlich zu der +Transformation der Eingabesprache in \TeX\ auch noch einige +Notensatzregeln umsetzt, zum Beispiel die Bestimmung der +Notenhalsrichtung bei Akkorden und Balkengruppen. +Die Eingabesprache wird im ersten Teil +dieser Arbeit entwickelt --- die Beschreibung des +dazugeh"origen "Ubersetzungsprogramms ist als Anhang B angef"ugt ---, + w"ahrend im zweiten Teil die Verfahren zur +Ausf"uhrung der Satzregeln hergeleitet werden. +In der Literatur nicht beschriebene Verfahren werden entwickelt. + + +Ein erstes Ergebnis war der einstimmige Notensatz in +\disp{einem} System (im Sinne der Musiktheorie, s.a. Kapitel 7), +der noch am ehesten dem Textsatz "ahnelt. Das Hauptproblem +bei der Notation und beim Satz +mehrerer zusammengefa\3ter Systeme ist, da\3 die horizontale Plazierung +eines Elementes der Notenschrift nicht mehr eindimensional entscheidbar, +sondern abh"angig vom zweidimensionalen Umfeld ist. Ein Problem dieser +Art ist im Textsatz unbekannt. +Es kann jedoch eine mehrstimmige Notation in einem System erreicht +werden. + +Alle in dieser Arbeit aufgef"uhrten Notenbeispiele wurden +durch das Satzsystem erzeugt und konnten in den laufenden +Text eingegliedert werden +(Ausnahme: Das in 11.2.1 angef"uhrte Beispiel wurde aus der Arbeit von +D. A. Gomberg \lit{\gomb} entnommen.) +Weitere (l"angere) Notenbeispiele +finden sich in Anhang A. +Das "Ubersetzungsprogramm wurde als Anhang B in die Arbeit +aufgenommen, die Syntax der Eingabesprache als Anhang C und +die verwendeten Zeichens"atze in Anhang D. +Das entwickelte Format und die \mf-Programme der Zeichens"atze +wurden aus Kostengr"unden nicht an +diese Arbeit angef"ugt, k"onnen jedoch zusammen mit den Fonts auf +Anfrage auf Diskette zugeschickt werden. + +Das entwickelte Notensatzsystem erreicht eine +publikationsf"ahige Qualit"at und ist f"ur +satzunkundige Benutzer wie f"ur Benutzer +mit festen Vorstellungen vom Layout +geeignet. Es bleibt im Hinblick auf +zeitgen"ossische Musik erweiterbar und erm"oglicht die Einbettung von +Musikst"ucken in Text. + +\vfill\eject diff --git a/macros/mtex/documentation/mdocinh.tex b/macros/mtex/documentation/mdocinh.tex new file mode 100644 index 0000000000..f2568f4a1d --- /dev/null +++ b/macros/mtex/documentation/mdocinh.tex @@ -0,0 +1,91 @@ +\heading{Inhaltsverzeichnis} +% +\message{Seitennummern muessen per Hand angepasst werden!} +\message{(in Datei MDOCINH.TEX)} +% +{\tabskip 0pt plus 1fil +\halign to\hsize {\quad\bf#\hfil\quad&\hbox to 14cm{#\dotfill}% +&\quad\bf\hfil#\cr +&\bf Einleitung &1\cr +&\rm Geschichtliche Entwicklung des Handnotensatzes im "Uberblick &1\cr +&\rm Entwicklung des automatisierten Notensatzes &1\cr +&\rm Verwendung eines Textsatzsystems f"ur den Notensatz &2\cr +\cr +\noalign{{\bf Teil 1: Ein Verfahren zur Notenschrifteingabe\par}} +\cr +1&\bf Noteneingabesprachen im Zusammenhang mit dem automatisierten +&5\cr +%Notensatz&5\cr +1.1&\rm Problematik des automatisierten Notensatzes &5\cr +1.2&\rm Einsatz des Textsatzsystems \TeX\ f"ur den Notensatz &6\cr +1.3&\rm Grundlegende Anforderungen an ein Verfahren zur Noteneingabe +&8\cr +1.4&\rm Er"orterung und Vergleich vorhandener Eingabeverfahren +&9\cr +\cr +2&\bf Formale Darstellung der Noteneingabesprache&17\cr +2.1&\rm Theoretische Grundlagen &17\cr +2.2&\rm Die Syntax der Noteneingabesprache in Backus--Naur--Form &22\cr +\cr +3&\bf Semantische Struktur der Noteneingabesprache&31\cr +3.1&\rm Eingabe eines Tons &31\cr +3.2&\rm Pausen, Atemzeichen und Taktstriche &33\cr +3.3&\rm Notengruppen &33\cr +3.4&\rm Anfang und Ende eines Musikst"ucks &35\cr +3.5&\rm Tonh"ohe, Rhythmus, Vortragsbezeichnungen &35\cr +3.6&\rm Ein-- oder mehrstimmige St"ucke in einem System &37\cr +3.7&\rm Mehrstimmige St"ucke in mehreren Systemen &38\cr +3.8&\rm Allgemeine Anweisungen &39\cr +\cr +\noalign{{\bf Teil 2: Verfahren zur Notenschriftausgabe\par}} +\cr +4&\bf Anforderungen an das Notensatzsystem &41\cr +4.1&\rm Arbeitsschritte beim manuellen Notensatz &41\cr +4.2&\rm Anforderungen f"ur den automatisierten Notensatz &41\cr +4.3&\rm Vor"uberlegungen &42\cr +\cr +5&\bf \TeX \ - Konzepte &45\cr +5.1&\rm Basiselemente &45\cr +5.2&\rm Verfahren zum Ausschlu\3 einer Box auf gew"unschte Breite bzw. H"ohe +&47\cr +5.3&\rm Der Zeilenumbruchalgorithmus &53\cr +5.4&\rm Der Seitenumbruch &57\cr +\cr +\cr\cr%\noalign{\goodbreak} +6&\bf R"aumliche Einteilung des Notenblattes &59\cr +6.1&\rm Satz- und Notationsregeln zur r"aumlichen Einteilung &59\cr +6.2&\rm Ausf"uhrung des Absteckens &61\cr +\cr +7&\bf Punktierung bei einstimmigem Notensatz &67\cr +7.1&\rm Regeln zur Bestimmung des Ausschlusses &67\cr +7.2&\rm Ausf"uhrung des Punktierens &69\cr +\cr +8&\bf Setzen der Notenschriftelemente &73\cr +8.1&\rm Regeln zur Notation der Notenschriftelemente &73\cr +8.2&\rm Das Setzen der Notenschriftelemente &75\cr +\cr +9&\bf Der Balken- und Bogensatz &81\cr +9.1&\rm Entwicklung des Verfahrens zur Verbalkung &81\cr +9.2&\rm Entwicklung eines Verfahrens zur Phrasierung &87\cr +9.3&\rm Ausf"uhrung des Balken- und Bogensatzes &91\cr +\cr +10&\bf Einf"ugen von Texten und Spielanweisungen &95\cr +10.1&\rm Regeln f"ur das Einf"ugen von Texten &95\cr +10.2&\rm Textunterlage &96\cr +10.3&\rm Positionierung der Artikulationszeichen &97\cr +\cr +11&\bf Mehrstimmiger Notensatz &99\cr +11.1&\rm Regeln f"ur die mehrstimmige Notation &99\cr +11.2&\rm Vertikale Ausrichtung bei D.A. Gomberg &100\cr +11.3&\rm Ausf"uhrung des zweistimmigen Setzens &101\cr +\cr +12&\bf Zusammenfassung &103\cr +\cr +13&\bf Literatur &105\cr +\cr + &\bf Anhang A: Beispiele &107\cr + &\bf Anhang B: Das "Ubersetzungsprogramm &115\cr + &\bf Anhang C: Darstellung der Syntax in Backus--Naur--Form &137\cr + &\bf Anhang D: Zeichens"atze &141\cr}} + +\vfill\eject diff --git a/macros/mtex/documentation/mdocpic1.tex b/macros/mtex/documentation/mdocpic1.tex new file mode 100644 index 0000000000..d8f692ffa8 --- /dev/null +++ b/macros/mtex/documentation/mdocpic1.tex @@ -0,0 +1,34 @@ + +\centerline{ + \beginpicture + \setcoordinatesystem units <1.0cm,1.0cm> + \setlinear + \setdots % speed up PiCTeX +% + \put {$A$} [b] <0mm,1.5mm> at 3.0 2.5 + \put {$\bullet$} at 3.0 2.5 +% + \put {$v_1$} [t] <0mm,-1.5mm> at 0.0 0.0 + \put {$\bullet$} at 0.0 0.0 + \plot 0.0 0.0 3.0 2.5 / +% + \put {$v_2$} [t] <0mm,-1.5mm> at 1.0 0.0 + \put {$\bullet$} at 1.0 0.0 + \plot 1.0 0.0 3.0 2.5 / +% + \put {$\bullet$} at 2.5 0.0 + \plot 2.5 0.0 3.0 2.5 / +% + \put {$\bullet$} at 3.5 0.0 + \plot 3.5 0.0 3.0 2.5 / +% + \put {$\bullet$} at 4.5 0.0 + \plot 4.5 0.0 3.0 2.5 / +% + \put {$v_n$} [t] <0mm,-1.5mm> at 6.0 0.0 + \put {$\bullet$} at 6.0 0.0 + \plot 6.0 0.0 3.0 2.5 / +% + \endpicture +} + diff --git a/macros/mtex/documentation/mdocpic2.tex b/macros/mtex/documentation/mdocpic2.tex new file mode 100644 index 0000000000..b7b4130e01 --- /dev/null +++ b/macros/mtex/documentation/mdocpic2.tex @@ -0,0 +1,45 @@ + +\centerline{ + \beginpicture + \setcoordinatesystem units <1mm,1mm> + \setlinear +% + \putrule from 0 00 to 40 00 + \putrule from 0 04 to 40 04 + \putrule from 0 08 to 40 08 + \putrule from 0 12 to 40 12 + \putrule from 0 16 to 40 16 + \setsolid + \put {$\bigcirc$} [rt] at 25 8 %Notenkopf rechts + \putrule from 25 6 to 25 20 %Notenhals rechts + \putrule from 9 -4 to 16 -4 %kurze Notenlinie + \put {$\bigcirc$} [rt] at 15 -4 %Notenkopf links + \putrule from 15 -6 to 15 8 %Notenhals links + \setdots <1mm> + \putrule from 15 8 to 15 14 %Notenhals Verlaengerung links + \setsolid + \putrule from 15 -12 to 25 -12 % Beschriftung unten + \putrule from 15 -11 to 15 -13 + \putrule from 25 -11 to 25 -13 + \put {$h$} [t] at 20 -13 + \putrule from -4 14 to -4 20 % Beschriftung links + \putrule from -3 14 to -5 14 + \putrule from -3 20 to -5 20 + \put {$\epsilon\cdot h$} [rB] at -5 15 + \setdashes + \putrule from -2 20 to 25 20 %hilfslinien + \putrule from -2 14 to 15 14 + \setdots + \plot 10 2 30 26 / % Balken-Gerade gepunktet + \setdots <0.5mm> + \plot 15 14 25 20 / % Balken + \plot 15 13 25 19 / + \plot 15 12 25 18 / + \circulararc 30 degrees from 17 20 center at 25 20 % Winkel + \setsolid + \putrule from 19 18 to 19 22 + \put {$\alpha$} [b] at 19 23 +% + \endpicture +} + diff --git a/macros/mtex/documentation/mdocpic3.tex b/macros/mtex/documentation/mdocpic3.tex new file mode 100644 index 0000000000..b234d0bf0c --- /dev/null +++ b/macros/mtex/documentation/mdocpic3.tex @@ -0,0 +1,46 @@ + +\centerline{ + \beginpicture + \setcoordinatesystem units <1mm,1mm> + \setlinear +% + \putrule from 0 00 to 60 00 + \putrule from 0 04 to 60 04 + \putrule from 0 08 to 60 08 + \putrule from 0 12 to 60 12 + \putrule from 0 16 to 60 16 + \setsolid + \put {$\bigcirc$} [rt] at 10 2 %Notenkopf 1 + \putrule from 10 0 to 10 14 %Notenhals 1 + \setdots <1mm> + \putrule from 10 14 to 10 23.5 %Notenhals Verlaengerung 1 + \setsolid + \put {$\bigcirc$} [rt] at 20 12 %Notenkopf 2 + \putrule from 20 10 to 20 22 %Notenhals 2 + \setdots <1mm> + \putrule from 20 22 to 20 25 %Notenhals Verlaengerung 2 + \setsolid + \put {$\bigcirc$} [rt] at 30 4 %Notenkopf 3 + \putrule from 30 2 to 30 16 %Notenhals 3 + \setdots <1mm> + \putrule from 30 16 to 30 26.5 %Notenhals Verlaengerung 3 + \setsolid + \put {$\bigcirc$} [rt] at 40 20 %Notenkopf 4 + \putrule from 40 18 to 40 28 %Notenhals 4 + % hier keine Verlaengerung + \put {$\bigcirc$} [rt] at 50 8 %Notenkopf 5 + \putrule from 50 6 to 50 20 %Notenhals 5 + \setdots <1mm> + \putrule from 50 20 to 50 29.5 %Notenhals Verlaengerung 5 + \setsolid +% + \setdots + \plot 0 12.5 60 21.5 / % Balken-Gerade gepunktet + \setdots <0.5mm> + \plot 10 23.5 50 29.5 / % Balken + \plot 10 22.5 50 28.5 / + \plot 10 21.5 50 27.5 / +% + \endpicture +} + diff --git a/macros/mtex/documentation/mdocpic4.tex b/macros/mtex/documentation/mdocpic4.tex new file mode 100644 index 0000000000..4a25fb53e3 --- /dev/null +++ b/macros/mtex/documentation/mdocpic4.tex @@ -0,0 +1,24 @@ + +\centerline{ + \beginpicture + \setcoordinatesystem units <1mm,1mm> + \setlinear +% + \setdots <1mm> + \setlinear + \plot 0 0 60 20 / + \put {$\bullet$} at 0 0 + \put {$A_1$} [rt] at -1 0 + \put {$\bullet$} at 60 20 + \put {$E_n$} [lt] at 61 20 + \setquadratic + \plot 0 0 30 20 60 20 / + \setlinear + \plot 30 10 30 16 / + \put {$\epsilon$} [rb] at 29 11 + \setdots + \plot 0 6 60 26 / +% + \endpicture +} + diff --git a/macros/mtex/documentation/mdoctit.tex b/macros/mtex/documentation/mdoctit.tex new file mode 100644 index 0000000000..5df13080fc --- /dev/null +++ b/macros/mtex/documentation/mdoctit.tex @@ -0,0 +1,15 @@ +\hbox{ } +\vskip3cm +\centerline{\hugem Automatisierter Notensatz mit \TeX} +\vskip5cm +\centerline{von} +\vskip1cm +\centerline{Angelika Schofer und Andrea Steinbach} +\vskip1cm +\centerline{Rheinische Friedrich--Wilhelms--Universit"at} +\vskip.5cm +\centerline{Bonn} +\vskip1cm +\centerline{August 1987} + +\vfill\eject diff --git a/macros/mtex/documentation/mdoctrns.tex b/macros/mtex/documentation/mdoctrns.tex new file mode 100644 index 0000000000..6990fb99ad --- /dev/null +++ b/macros/mtex/documentation/mdoctrns.tex @@ -0,0 +1,1201 @@ +%format plaine +\input webmac +\newdimen\pageheight \pageheight=25cm +\newdimen\pagewidth \pagewidth=16cm +\advance\topskip by 3mm +\parindent0pt +\frenchspacing +\def\_{\us} +\def\8{\char25{}} +\catcode`\"=\active %Umlaute +\def"{\accent'177} +\openup -3pt + +\N1. Anhang B: Definitionen. + +\fi + +\M2. One of the extensions to standard \\{pascal} that we shall deal with +is to use a default \&{case} as in \\{tangle}, \\{weave}, etc. + +\Y\P\D \37$\\{othercases}\S\\{otherwise}$\C{default for cases not listed +explicitly}\par +\P\D \37$\\{endcases}\S$ \6 +\&{end} \C{follows the default case}\par +\P\F \37$\\{othercases}\S\\{else}$\par +\P\F \37$\\{endcases}\S\\{end}$\par +\fi + +\M3. Folgende Definitionen sind Abk"urzungen f"ur den Befehl, eine Meldung +gleichzeitig auf den Bildschirm und in eine Datei zu schreiben. + +\Y\P\D \37$\\{writeln\_error}(\#)\S\\{writeln}(\\{err},\39\#)$;\5 +$\\{writeln}(\\{outterm},\39\#)$\par +\P\D \37$\\{write\_error}(\#)\S\\{write}(\\{err},\39\#)$;\5 +$\\{write}(\\{outterm},\39\#)$\par +\fi + +\N4. Anhang B: Heading und Funktion getchar. + +\fi + +\M5. Programmkopf und Variablendeklarationen\par +Das Programm hat vier Textfiles als Parameter. \\{infile} enth"alt die +Eingabedaten in der entwickelten Noten\-ein\-ga\-be\-sprache. Nach der +Bearbeitung durch das vorliegende Programm werden die Daten in eine +f"ur die Notenausgabe ben"otigte Datei \\{outfile} geschrieben. +Syntax-Fehler in der Eingabedatei werden mit Hilfe von +\\{outterm} auf dem Terminal angezeigt und gleichzeitig in die +Datei \\{err} geschrieben. Mit \\{interm} sind +Eingaben vom Terminal m"oglich. + +\Y\P\4\&{program}\1\ \37$\\{trans}(\\{infile},\39\\{outfile},\39\\{err},\39% +\\{outterm},\39\\{interm})$; \6 +\4\&{label} \X18:Labels\X \6 +\4\&{type} \X44:New type\X \6 +\4\&{var} \37\X6:Files\X\X7:Globals\X\X8:Function getchar\X\X31:Procedure +newline music\X\X62:Procedure error\X\X21:Function ausruf\X\X67:Procedure macro% +\X\X65:Procedure backslash\X\X33:Procedure nonmusic\X\X35:Procedure music\X\par +\fi + +\M6. In diesem Teil sind die ben"otigten Textfiles deklariert. + +\Y\P$\4\X6:Files\X\S$\6 +\4\\{infile}: \37\\{text};\6 +\4\\{outfile}: \37\\{text};\6 +\4\\{outterm}: \37\\{text};\6 +\4\\{interm}: \37\\{text};\6 +\4\\{err}: \37\\{text};\par +\U section~5.\fi + +\M7. Es folgt nun die Einleseroutine \\{get\_char} +und die Deklaration +der daf"ur ben"otigten Variablen. +\\{get\_char} ist eine function, die auf die folgenden Weise +an das Programm das n"achste Zeichen - einen Character - +zur"uckgibt. +\par +Die Eingabedatei \\{infile} wird zeilenweise abgearbeitet. Jede neue +Zeile wird auf den string \\{in\_line} eingelesen, der wiederum auf +den array \\{buffer} kopiert wird. Dieses Feld enth"alt gleichzeitig +drei Zeilen der Eingabedatei: die letzte abgearbeitete Zeile der +L"ange \\{last\_line\_length}; die Zeile, die gerade bearbeitet wird +- sie hat die L"ange \\{actual\_line\_length} - und die Zeile, die als +n"achstes gelesen werden soll mit der L"ange \\{next\_line\_length}. +Die Variable \\{line\_ptr} gibt dabei immer an, wie weit die +\\{actual\_line} abgearbeitet ist. \par +Falls das Ende dieser Zeile +erreicht ist, werden die Zeilen im \\{buffer} nach links geschoben. +Die \\{last\_line} wird durch die \\{actual\_line}, die \\{actual\_line} durch +die \\{next\_line} und die \\{next\_line} durch eine neue \\{in\_line} +ersetzt. +Bei einem Zeilenwechsel wird die Variable \\{change} auf true +gesetzt, ansonsten hat sie den Wert false. +\par +Mit Hilfe der character-Variablen \\{sign} wird jeweils das n"achste +Zeichen einer Zeile an das Programm "ubergeben. +Die gelesenen Zeilen werden mit \\{line\_num} gez"ahlt. +Beim ersten Einlesen von der Datei \\{in\_file} kann das +``Weiterschieben'' im \\{buffer} unterbleiben, deshalb gibt es +daf"ur eine gesonderte Abfrage. +Gesondert werden ebenfalls die F"alle $\\{inline\_length}=0$ und +$\\{actual\_line\_length}=0$ behandelt. Im ersten Fall wird der Teil des +\\{buffer}, der nicht belegt ist, mit blanks besetzt, um falsche +Belegung von \\{sign} zu vermeiden, im zweiten Fall erh"alt +\\{get\_char} den Wert \.{\'\ \'}. +\par +\noindent\\{eof\_infile} zeigt an, wenn die Eingabedatei einschlie\8lich +der letzten Zeile abgearbeitet ist. Diese Variable ist +notwendig, weil das Ende der Datei mit dem Lesen der letzten Zeile +auf \\{in\_line} erreicht ist, diese dann aber noch abgearbeitet +werden mu\8. + + + +\Y\P$\4\X7:Globals\X\S$\6 +\4\\{buffer}: \37\&{array} $[1\to240]$ \1\&{of}\5 +\\{char};\2\6 +\4\\{in\_line}: \37$\\{string}(80)$;\6 +\4\\{sign}: \37\\{char};\6 +\4\\{last\_line\_length}: \37\\{integer};\6 +\4\\{actual\_line\_length}: \37\\{integer};\6 +\4\\{next\_line\_length}: \37\\{integer};\6 +\4\\{inline\_length}: \37\\{integer};\6 +\4\\{line\_ptr}: \37\\{integer};\6 +\4\\{line\_num}: \37\\{integer};\6 +\4\\{eof\_infile}: \37\\{boolean};\6 +\4\\{change}: \37\\{boolean};\par +\A sections~17, 20, 36, 39, 41, 45, 50, 57, and~61. +\U section~5.\fi + +\M8. + +\Y\P$\4\X8:Function getchar\X\S$\6 +\4\&{function}\1\ \37\\{get\_char}: \37\\{char};\6 +\4\&{var} \37\|j: \37\\{integer};\2\6 +\&{begin} \37\&{if} $\\{line\_num}=0$ \1\&{then}\6 +\&{begin} \37\&{if} $\R\\{eof}(\\{infile})$ \1\&{then}\6 +\&{begin} \37\X9:Lesen der n"achsten Zeile von infile\X;\6 +\X10:Einlesen der neuen Zeile in den buffer\X;\6 +\&{end}\6 +\4\&{else} \&{goto} \3710;\2\6 +\&{end};\2\6 +\&{if} $\\{line\_ptr}>\\{last\_line\_length}+\\{actual\_line\_length}$ \1% +\&{then}\6 +\&{begin} \37\X11:Neubelegung der \\{actual\_line} durch \\{next\_line}, +Zeilenwechsel\X;\6 +$\\{get}(\\{infile})$;\6 +\&{if} $\R\\{eof}(\\{infile})$ \1\&{then}\6 +\&{begin} \37\X9:Lesen der n"achsten Zeile von infile\X;\6 +\&{if} $\\{inline\_length}=0$ \1\&{then}\6 +\&{begin} \37\X12:\\{in\_line} ist Leerzeile bzw. existiert nicht\X;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\X10:Einlesen der neuen Zeile in den buffer\X;\6 +\&{end};\2\6 +\&{end}\6 +\4\&{else} \&{begin} \37\X12:\\{in\_line} ist Leerzeile bzw. existiert nicht\X;% +\6 +\&{end};\2\6 +$\\{line\_ptr}\K\\{last\_line\_length}+1$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\X13:Kein Zeilenwechsel\X;\6 +\&{end};\2\6 +\&{if} $\\{actual\_line\_length}=0$ \1\&{then}\6 +\&{begin} \37\X14:\\{actual\_line} ist Leerzeile\X;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\X15:Zeichen lesen\X;\6 +\&{end};\2\6 +$\\{line\_ptr}\K\\{line\_ptr}+1$;\5 +$\\{eof\_infile}\K(\\{eof}(\\{infile})\W(\\{line\_ptr}>\\{last\_line\_length}+% +\\{actual\_line\_length}))$;\6 +\&{end};\par +\U section~5.\fi + +\M9. Es wird eine neue Zeile aus der Eingabedatei \\{infile} gelesen. +"Uberfl"ussigen blanks werden entfernt. + +\Y\P$\4\X9:Lesen der n"achsten Zeile von infile\X\S$\6 +$\\{read}(\\{infile},\39\\{in\_line})$;\5 +$\\{in\_line}\K\\{ltrim}(\\{in\_line})$;\5 +$\\{in\_line}\K\\{trim}(\\{in\_line})$;\5 +$\\{in\_line}\K\\{compress}(\\{in\_line})$;\5 +$\\{inline\_length}\K\\{length}(\\{in\_line})$;\par +\U sections~8 and~8.\fi + +\M10. Die neue Zeile wird in den string \\{buffer} gelesen. + +\Y\P$\4\X10:Einlesen der neuen Zeile in den buffer\X\S$\6 +\&{for} $\|j\K1\mathrel{\&{to}}\\{inline\_length}$ \1\&{do}\5 +$\\{buffer}[\\{actual\_line\_length}+\\{next\_line\_length}+\|j]\K\\{in\_line}[% +\|j]$;\2\6 +$\\{last\_line\_length}\K\\{actual\_line\_length}$;\5 +$\\{actual\_line\_length}\K\\{next\_line\_length}$;\5 +$\\{next\_line\_length}\K\\{inline\_length}$;\par +\U sections~8 and~8.\fi + +\M11. Die \\{actual\_line} im \\{buffer} wird mit einer neuen Zeile, n"amlich +der \\{next\_line} belegt. Auf \\{last\_line} wird die vorherige \\{actual% +\_line} +geschrieben. \\{change} wird true, da ein Zeilenwechsel +stattfindet. + +\Y\P$\4\X11:Neubelegung der \\{actual\_line} durch \\{next\_line}, +Zeilenwechsel\X\S$\6 +\&{for} $\|j\K1\mathrel{\&{to}}\\{actual\_line\_length}$ \1\&{do}\5 +$\\{buffer}[\|j]\K\\{buffer}[\\{last\_line\_length}+\|j]$;\2\6 +\&{for} $\|j\K1\mathrel{\&{to}}\\{next\_line\_length}$ \1\&{do}\5 +$\\{buffer}[\\{actual\_line\_length}+\|j]\K\\{buffer}[\\{last\_line\_length}+% +\\{actual\_line\_length}+\|j]$;\2\6 +$\\{line\_num}\K\\{line\_num}+1$;\5 +$\\{change}\K\\{true}$;\par +\U section~8.\fi + +\M12. \\{in\_line} ist eine Leerzeile. + +\Y\P$\4\X12:\\{in\_line} ist Leerzeile bzw. existiert nicht\X\S$\6 +\&{for} $\|j\K\\{actual\_line\_length}+\\{next\_line\_length}+1\mathrel{% +\&{to}}240$ \1\&{do}\5 +$\\{buffer}[\|j]\K\.{\'\ \'}$;\2\6 +$\\{last\_line\_length}\K\\{actual\_line\_length}$;\5 +$\\{actual\_line\_length}\K\\{next\_line\_length}$;\5 +$\\{next\_line\_length}\K0$;\par +\U sections~8 and~8.\fi + +\M13. Es findet kein Zeilenwechsel statt, da das Ende der \\{actual\_line} noch +nicht erreicht ist: \\{change} ist false. + +\Y\P$\4\X13:Kein Zeilenwechsel\X\S$\6 +$\\{change}\K\\{false}$;\par +\U section~8.\fi + +\M14. Die \\{actual\_line} ist eine Leerzeile. Da ein Wert an das Programm +zur"uckgegeben werden mu\8, erh"alt \\{get\_char} den Wert \.{\'\ \'}. + +\Y\P$\4\X14:\\{actual\_line} ist Leerzeile\X\S$\6 +$\\{get\_char}\K\.{\'\ \'}$;\par +\U section~8.\fi + +\M15. Ist der \\{buffer} richtig belegt, so kann das n"achste Zeichen auf +\\{get\_char} eingelesen werden. + +\Y\P$\4\X15:Zeichen lesen\X\S$\6 +$\\{get\_char}\K\\{buffer}[\\{line\_ptr}]$;\par +\U section~8.\fi + +\N16. Anhang B: Hauptprogramm und Function ausruf. + +\fi + +\M17. Hauptprogramm\par +Im Hauptprogramm werden die oben definierten Textfiles zum Lesen bzw. +Schreiben ge"offnet. Solange das Ende der Eingabedatei nicht +erreicht ist, wird mit der Variablen \\{music\_num} +unterschieden, ob gerade eine Noteneingabe ($\\{music\_num}=\\{true}$) +oder eine +Texteingabe ($\\{music\_num}=\\{false}$) bearbeitet wird. +Je nachdem wird entweder die Routine \\{nonmusic} oder \\{music} aufgerufen. +Texteingaben werden so wie sie in der Eingabedatei stehen in +die Ausgabedatei \\{outfile} geschrieben, also Zeile f"ur Zeile. +Noteneingaben werden in eine +andere Form gebracht. + +Falls innerhalb einer Routine das Ende der Eingabedatei erreicht +wird, soll das Programm beendet werden. An der entsprechenden Stelle +in der Routine wird dann auf das Label 10 verwiesen. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{music\_num}: \37\\{boolean};\par +\fi + +\M18. Labeldeklaration +\Y\P$\4\X18:Labels\X\S$\6 +10;\par +\U section~5.\fi + +\M19. Hauptprogramm. + +\Y\P\&{begin} \37$\\{termout}(\\{outterm})$;\5 +$\\{termin}(\\{interm})$;\5 +\X59:Setze die default-Werte\X;\6 +$\\{reset}(\\{infile})$;\5 +$\\{rewrite}(\\{outfile})$;\5 +$\\{rewrite}(\\{err})$;\5 +$\\{eof\_infile}\K(\\{eof}(\\{infile})\W(\\{line\_ptr}>\\{last\_line\_length}+% +\\{actual\_line\_length}))$;\6 +\&{while} $\R(\\{eof\_infile})$ \1\&{do}\6 +\&{begin} \37\&{case} $\\{music\_num}$ \1\&{of}\6 +\4\\{false}: \37\\{nonmusic};\6 +\4\\{true}: \37\\{music};\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\6 +\&{end};\2\6 +\410: \37\&{end}.\par +\fi + +\M20. Routine, die den Wechsel zwischen Noteneingabe und Texteingabe +anzeigt\par +Die Funktion berechnet als Wert, ob sich der mode ge"andert hat +oder nicht. +Ein Wechsel des Modes wird durch zwei aufeinanderfolgende +Ausrufezeichen angezeigt. Die Routine wird also aufgerufen, +sobald ein Ausrufezeichen gelesen wurde. Dann mu\8 +"uberpr"uft werden, ob ein zweites Ausrufezeichen folgt oder nicht. +\par +An die Routine wird der Wert von \\{change} "ubergeben, da es +f"ur das Schreiben in \\{outfile} f"ur allem bei Texteingabe +notwendig ist, "uber einen Zeilenwechsel Bescheid zu wissen. +\par +Falls es "uberhaupt kein n"achstes Zeichen gibt, also das +Ende der Eingabedatei erreicht wurde, wird bei einer Texteingabe +($\\{music\_num}=\\{false}$) +das gelesene Zeichen +in die Ausgabedatei \\{outfile} geschrieben; bei einer Noteneingabe +zeigt das Ausrufezeichen das Ende an.\par +Falls das n"achste Zeichen kein Ausrufezeichen ist, werden im +Fall $\\{music\_num}=\\{false}$ das Ausrufezeichen und das neu gelesene Zeichen +in \\{outfile} geschrieben. F"ur $\\{music\_num}=\\{true}$ wird angenommen, da% +\8 +das zweite Ausrufezeichen vergessen wurde, also ein Wechsel +in den nonmusic-mode stattfindet. Das neu gelesene Zeichen wird +dann - als erstes Zeichen der Texteingabe - +in eine neue Zeile von \\{outfile} geschrieben. +\par +Der dritte Fall ist, da\8 es sich bei dem neuen Zeichen um ein +Ausrufezeichen handelt. Dann findet ein mode-Wechsel statt. +\par\noindent +\\{w\_column} ist die Variable, die anzeigt, in welche Spalte von \\{outfile} +geschrieben wird. + + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{w\_column}: \37\\{integer};\par +\fi + +\M21. + +\Y\P$\4\X21:Function ausruf\X\S$\6 +\4\&{function}\1\ \37$\\{ausruf}(\\{help}:\\{boolean})$: \37\\{boolean};\2\6 +\&{begin} \37\&{if} $\R(\\{eof\_infile})$ \1\&{then}\5 +\X22:Lesen des n"achsten Zeichens\X\6 +\4\&{else} \X30:Ende der Eingabedatei erreicht\X;\2\6 +\&{end};\par +\U section~5.\fi + +\M22. Das n"achste Zeichen wird auf \\{sign} gelesen und "uberpr"uft, ob es +ein Ausrufezeichen ist oder nicht. + +\Y\P$\4\X22:Lesen des n"achsten Zeichens\X\S$\6 +\&{begin} \37$\\{sign}\K\\{get\_char}$;\6 +\&{if} $\\{sign}=\.{\'!\'}$ \1\&{then}\5 +\X23:Wechsel des modes\X\6 +\4\&{else} \X26:Kein Wechsel des modes\X\2\6 +\&{end}\par +\U section~21.\fi + +\M23. + +\Y\P$\4\X23:Wechsel des modes\X\S$\6 +\&{begin} \37\&{case} $\\{music\_num}$ \1\&{of}\6 +\4\\{false}: \37\X24:Wechsel in music mode\X;\6 +\4\\{true}: \37\X25:Wechsel in nonmusic mode\X;\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\6 +\&{end}\par +\U section~22.\fi + +\M24. Beim Wechsel in den musicmode bzw. nonmusicmode wird jeweils eine +neue Zeile angefangen. + +\Y\P$\4\X24:Wechsel in music mode\X\S$\6 +\&{begin} \37\&{if} $\\{line\_num}>1$ \1\&{then}\5 +$\\{writeln}(\\{outfile})$;\2\6 +$\\{write}(\\{outfile},\39\.{\'\\beginsong\'})$;\5 +$\\{ausruf}\K\\{true}$;\5 +$\\{w\_column}\K10$;\6 +\&{end};\par +\U section~23.\fi + +\M25. + +\Y\P$\4\X25:Wechsel in nonmusic mode\X\S$\6 +\&{begin} \37$\\{newline\_music}(9)$;\5 +$\\{writeln}(\\{outfile},\39\.{\'\\endsong\'})$;\5 +$\\{w\_column}\K0$;\5 +$\\{ausruf}\K\\{false}$;\6 +\&{end};\par +\U section~23.\fi + +\M26. + +\Y\P$\4\X26:Kein Wechsel des modes\X\S$\6 +\&{begin} \37\&{case} $\\{music\_num}$ \1\&{of}\6 +\4\\{false}: \37\X27:Gelesene Zeichen schreiben\X;\6 +\4\\{true}: \37\&{begin} \37\X28:Ausrufezeichen fehlt\X;\6 +\X29:Ende musicmode, Zeichen schreiben\X;\6 +\&{end};\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\6 +\&{end};\par +\U section~22.\fi + +\M27. Falls ein Zeilenwechsel beim Lesen des letzten Zeichens stattgefunden +hat, wird das Ausrufezeichen in die letzte Zeile von \\{outfile} +geschrieben, f"ur das neue Zeichen wird eine neue Zeile angefangen. +\par +Hat der Zeilenwechsel beim Lesen des Ausrufezeichens stattgefunden, +werden beide Zeichen in eine neue Zeile geschrieben. + +\Y\P$\4\X27:Gelesene Zeichen schreiben\X\S$\6 +\&{begin} \37\&{if} $\\{change}=\\{true}$ \1\&{then}\6 +\&{begin} \37$\\{writeln}(\\{outfile},\39\.{\'!\'})$;\5 +$\\{write}(\\{outfile},\39\\{sign})$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{help}=\\{true}$ \1\&{then}\6 +\&{begin} \37$\\{writeln}(\\{outfile})$;\5 +$\\{write}(\\{outfile},\39\.{\'!\'},\39\\{sign})$;\6 +\&{end}\6 +\4\&{else} $\\{write}(\\{outfile},\39\.{\'!\'},\39\\{sign})$;\2\6 +\&{end};\2\6 +$\\{ausruf}\K\\{false}$;\6 +\&{end};\par +\U section~26.\fi + +\M28. + +\Y\P$\4\X28:Ausrufezeichen fehlt\X\S$\6 +\&{if} $\\{change}=\\{true}$ \1\&{then}\5 +$\\{error}(\.{\'Fehlendes\ Ausrufezeichen\ gesetzt\'},\39\\{line\_num}-1)$\6 +\4\&{else} $\\{error}(\.{\'Fehlendes\ Ausrufezeichen\ gesetzt\'},\39\\{line% +\_num})$;\2\par +\U section~26.\fi + +\M29. + +\Y\P$\4\X29:Ende musicmode, Zeichen schreiben\X\S$\6 +$\\{ausruf}\K\\{false}$;\5 +$\\{newline\_music}(9)$;\6 +\&{if} $\\{eof}(\\{infile})$ \1\&{then}\6 +\&{begin} \37\&{if} $\\{actual\_line\_length}=0$ \1\&{then}\5 +$\\{write}(\\{outfile},\39\.{\'\\endsong\'})$\6 +\4\&{else} $\\{writeln}(\\{outfile},\39\.{\'\\endsong\'})$;\2\6 +\&{end}\6 +\4\&{else} $\\{writeln}(\\{outfile},\39\.{\'\\endsong\'})$;\2\6 +$\\{write}(\\{outfile},\39\\{sign})$;\5 +$\\{w\_column}\K1$;\par +\U section~26.\fi + +\M30. + +\Y\P$\4\X30:Ende der Eingabedatei erreicht\X\S$\6 +\&{begin} \37\&{if} $\\{music\_num}=\\{true}$ \1\&{then}\6 +\&{begin} \37$\\{newline\_music}(8)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\endsong\'})$;\5 +$\\{error}(\.{\'Fehlendes\ Ausrufezeichen\ am\ Ende\ gesetzt\'},\39\\{line% +\_num})$;\6 +\&{end}\6 +\4\&{else} $\\{write}(\\{outfile},\39\.{\'!\'})$;\2\6 +$\\{ausruf}\K\\{music\_num}$;\5 +\&{goto} \3710;\6 +\&{end};\par +\U section~21.\fi + +\M31. F"ur das Schreiben in die Ausgabedatei wird f"ur den music-mode +eine weitere Routine ben"otigt, die berechnet, ob +eine neue Zeile in der Ausgabedatei begonnen werden mu\8. +F"ur den nonmusic-mode ist das nicht n"otig, da die Zeilen +so "ubernommen werden, wie sie in der Eingabedatei stehen. +"Ubergeben wird zur Berechnung die L"ange des zu schreibenden Worts. + +\Y\P$\4\X31:Procedure newline music\X\S$\6 +\4\&{procedure}\1\ \37$\\{newline\_music}(\\{word\_length}:\\{integer})$;\2\6 +\&{begin} \37$\\{w\_column}\K\\{w\_column}+\\{word\_length}$;\6 +\&{if} $\\{w\_column}\G70$ \1\&{then}\6 +\&{begin} \37$\\{write}(\\{outfile},\39\.{\'\%\'})$;\5 +$\\{writeln}(\\{outfile})$;\5 +$\\{w\_column}\K\\{word\_length}$;\6 +\&{end};\2\6 +\&{end};\par +\U section~5.\fi + +\N32. Anhang B: Prozedur nonmusic. + +\fi + +\M33. Prozedur, die normalen Text ausgibt, solange \\{music\_num} false ist. +Ein Zeilenwechsel im Ausgabefile findet statt, wenn die +Zeile in der Eingabedatei ebenfalls gewechselt wird. Falls +ein Ausrufezeichen eingelesen wird, mu\8 die Funktion \\{ausruf} +aufgerufen werden. + +\Y\P$\4\X33:Procedure nonmusic\X\S$\6 +\4\&{procedure}\1\ \37\\{nonmusic};\2\6 +\&{begin} \37\&{while} $\\{music\_num}=\\{false}$ \1\&{do}\6 +\&{begin} \37\&{if} $\R(\\{eof\_infile})$ \1\&{then}\6 +\&{begin} \37$\\{sign}\K\\{get\_char}$;\6 +\&{if} $\\{sign}=\.{\'!\'}$ \1\&{then}\5 +$\\{music\_num}\K\\{ausruf}(\\{change})$\6 +\4\&{else} \&{begin} \37\&{if} $\\{line\_num}=1$ \1\&{then}\5 +$\\{write}(\\{outfile},\39\\{sign})$\6 +\4\&{else} \&{begin} \37\&{if} $\\{change}=\\{false}$ \1\&{then}\5 +$\\{write}(\\{outfile},\39\\{sign})$\6 +\4\&{else} \&{begin} \37\&{if} $\\{w\_column}=0$ \1\&{then}\5 +$\\{write}(\\{outfile},\39\\{sign})$\6 +\4\&{else} \&{begin} \37$\\{writeln}(\\{outfile})$;\5 +$\\{write}(\\{outfile},\39\\{sign})$\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\2\6 +$\\{w\_column}\K\\{line\_ptr}-1$;\6 +\&{end}\6 +\4\&{else} \&{goto} \3710;\2\6 +\&{end};\2\6 +\&{end};\par +\U section~5.\fi + +\N34. Anhang B: Prozedur music. + + +\fi + +\M35. Prozedur, die Musikeingabe abarbeitet und abfragt, +um welches Zeichen es sich gerade handelt. +Dabei wird unterschieden, +ob es sich um eine Tonh"ohe , um eine Pause oder +Taktstrich, um erg"anzende Angaben zur +Tonh"ohe (z. B. Dauer, Vorzeichen, Oktave, Punkte), +um das Ende der Musikeingabe oder +um den Beginn +einer Kontrollsequenz (\\{backslash}) oder eines Kommentars handelt. + + + +\Y\P$\4\X35:Procedure music\X\S$\6 +\4\&{procedure}\1\ \37\\{music};\2\6 +\&{begin} \37\&{while} $\\{music\_num}=\\{true}$ \1\&{do}\6 +\&{begin} \37\&{if} $\R(\\{eof\_infile})$ \1\&{then}\6 +\&{begin} \37$\\{sign}\K\\{get\_char}$;\6 +\&{case} $\\{sign}$ \1\&{of}\6 +\X37:Zeichen ist Angabe zum Ton\X;\6 +\X38:Zeichen ist Tonh"ohe\X;\6 +\X51:Zeichen ist Pause oder Taktstrich\X;\6 +\X56:Zeichen bedeutet Ende der Musikeingabe\X;\6 +\X54:Zeichen ist Kommentar\X;\6 +\X55:Zeichen ist backslash\X;\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\6 +\&{end}\6 +\4\&{else} \&{goto} \3710;\2\6 +\&{end};\2\6 +\&{end};\par +\U section~5.\fi + +\M36. Es folgen die Variablen, die f"ur die Prozedur \\{music} ben"otigt +werden. Die einzelnen Programmteile werden an den entsprechenden +Stellen erl"autert. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{octave\_num}: \37\\{integer};\6 +\4\\{dot\_num}: \37\\{integer};\6 +\4\\{nat\_num}: \37\\{integer};\6 +\4\\{b\_num}: \37\\{integer};\6 +\4\\{x\_num}: \37\\{integer};\6 +\4\\{duration}: \37\\{char};\par +\fi + +\M37. In diesem Teil werden die f"ur die Note notwendigen Variablen +besetzt. +\\{octave\_num} z"ahlt die Hochkommata bzw. Kommata, +die zur Angabe der Oktave +eingegeben wurden. +Die Tondauer mu\8 f"ur den Ausgabefile mit einer Zahl angegeben +werden. Diese Belegung findet mit Hilfe von \\{duration} statt. +\\{dot\_num} z"ahlt die eingegebenen Punkte. +Etwaige Vorzeichen werden registriert. Da ein Doppelkreuz bzw. Doppel-be +durch zwei x bzw. b eingegeben wird, werden diese mit \\{x\_num} +bzw. \\{b\_num} gez"ahlt. + + +\Y\P$\4\X37:Zeichen ist Angabe zum Ton\X\S$\6 +\4\.{\',\'}: \37$\\{octave\_num}\K\\{octave\_num}-1$;\6 +\4\.{\'\'}\.{\'\'}: \37$\\{octave\_num}\K\\{octave\_num}+1$;\6 +\4\.{\'1\'}: \37$\\{duration}\K\.{\'g\'}$;\6 +\4\.{\'2\'}: \37$\\{duration}\K\.{\'h\'}$;\6 +\4\.{\'4\'}: \37$\\{duration}\K\.{\'v\'}$;\6 +\4\.{\'8\'}: \37$\\{duration}\K\.{\'a\'}$;\6 +\4\.{\'6\'}: \37$\\{duration}\K\.{\'s\'}$;\6 +\4\.{\'5\'}: \37$\\{duration}\K\.{\'z\'}$;\6 +\4\.{\'.\'}: \37$\\{dot\_num}\K\\{dot\_num}+1$;\6 +\4\.{\'b\'}: \37$\\{b\_num}\K\\{b\_num}+1$;\6 +\4\.{\'x\'}: \37$\\{x\_num}\K\\{x\_num}+1$;\6 +\4\.{\'n\'}: \37$\\{nat\_num}\K5$;\par +\U section~35.\fi + +\M38. Die oben +beschriebene Belegung ist beendet, sobald ein Notenname eingelesen +wird. +Dann wird die Oktave endg"ultig berechnet, +der Tonh"ohe wird +eine Zahl zugeordnet, die die Stellung der Note im Notenliniensystem +angibt und die Vorzeichen angegeben. Anschlie\8end wird die +Note in die Ausgabedatei \\{outfile} geschrieben. + +\Y\P$\4\X38:Zeichen ist Tonh"ohe\X\S$\6 +\4$\.{\'c\'},\39\.{\'d\'},\39\.{\'e\'},\39\.{\'f\'},\39\.{\'g\'},\39\.{\'a\'},% +\39\.{\'h\'}$: \37\&{begin} \37\X42:Berechnung der richtigen Oktave\X;\6 +\X40:Umsetzung der Tonh"ohe in eine Zahl\X;\6 +\X46:Gibt es ein Vorzeichen\X;\6 +\X48:Schreibe die gelesene Note\X;\6 +\X49:Schreibe die Punkte\X;\6 +\&{end};\par +\U section~35.\fi + +\M39. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{pitchnum}: \37\\{integer};\par +\fi + +\M40. Das Liniensystem wird mit einer Numerierung versehen. Jedem Notennamen +wird dann mit der Variablen \\{pitchnum} die entsprechende Zahl zwischen +-2 und 4 in Abh"angigkeit von der Lage +im Notenliniensystem zugeordnet. + +\Y\P$\4\X40:Umsetzung der Tonh"ohe in eine Zahl\X\S$\6 +\&{case} $\\{sign}$ \1\&{of}\6 +\4\.{\'c\'}: \37$\\{pitchnum}\K-2$;\6 +\4\.{\'d\'}: \37$\\{pitchnum}\K-1$;\6 +\4\.{\'e\'}: \37$\\{pitchnum}\K0$;\6 +\4\.{\'f\'}: \37$\\{pitchnum}\K1$;\6 +\4\.{\'g\'}: \37$\\{pitchnum}\K2$;\6 +\4\.{\'a\'}: \37$\\{pitchnum}\K3$;\6 +\4\.{\'h\'}: \37$\\{pitchnum}\K4$;\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\par +\A section~43. +\U section~38.\fi + +\M41. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{octave}: \37\\{integer};\par +\fi + +\M42. Nun wird die Oktave berechnet. Das ist wichtig f"ur +die n-gestrichene Oktave (n$>$0), da die eingestrichene Oktave +den Wert \\{octave}=0 erhalten soll, die zweigestrichene den Wert 1 usw. +Weil aber zun"achst die Hochkommas gez"ahlt wurden, ist eine +Zur"ucksetzung erforderlich. + +\Y\P$\4\X42:Berechnung der richtigen Oktave\X\S$\6 +\&{if} $\\{octave\_num}>0$ \1\&{then}\6 +\&{begin} \37$\\{octave}\K\\{octave\_num}-1$;\5 +$\\{octave\_num}\K0$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{octave\_num}<0$ \1\&{then}\6 +\&{begin} \37$\\{octave}\K\\{octave\_num}$;\5 +$\\{octave\_num}\K0$;\6 +\&{end}\2\6 +\&{end};\2\par +\U section~38.\fi + +\M43. Nun wird die Tonh"ohe unter Ber"ucksichtigung der +eben gesetzten Zahl \\{pitchnum} und der Oktave \\{octave} +endg"ultig berechnet. + +\Y\P$\4\X40:Umsetzung der Tonh"ohe in eine Zahl\X\mathrel{+}\S$\6 +\&{if} $(-3\L\\{octave})\W(\\{octave}\L3)$ \1\&{then}\5 +$\\{pitchnum}\K\\{pitchnum}+(\\{octave})\ast7$\6 +\4\&{else} \&{begin} \37$\\{error}(\.{\'Die\ Oktave\ wurde\ falsch\ eingegeben,% +\ default\ gesetzt\'},\39\\{line\_num})$;\5 +$\\{octave\_num}\K0$;\6 +\&{end};\2\par +\fi + +\M44. Zur Berechnung der Vorzeichen mu\8. +ein neuer Variablentyp definiert werden. +\\{accidental} ist ein array, mit dem mit Hilfe der +eingelesenen Anzahl der x bzw. b das Vorzeichen bestimmt werden kann. + +\Y\P$\4\X44:New type\X\S$\6 +$\\{accidental}=$\1\5 +\&{array} $[1\to5]$ \1\&{of}\5 +$\\{string}(2)$;\2\2\par +\U section~5.\fi + +\M45. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{accid}: \37\\{accidental};\6 +\4\\{acc}: \37$\\{string}(2)$;\par +\fi + +\M46. Falls \\{x\_num} bzw. \\{b\_num} von 0 verschieden sind, gibt es ein +Vorzeichen. Ob es sich um ein Kreuz oder ein b handelt, +wird anhand der Variablen +\\{x\_num} bzw. \\{b\_num} deutlich. Diese integer-Zahlen werden als +Index von \\{accid} benutzt, dieser gibt dann das Vorzeichen an. +Danach werden \\{x\_num}, \\{b\_num} und \\{nat\_num} auf die defaults +gesetzt. + +\Y\P$\4\X46:Gibt es ein Vorzeichen\X\S$\6 +\&{if} $\\{x\_num}>0$ \1\&{then}\6 +\&{begin} \37$\\{acc}\K\\{accid}[\\{x\_num}]$;\5 +$\\{x\_num}\K0$;\5 +\X47:Schreibe das Vorzeichen\X;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{b\_num}>2$ \1\&{then}\6 +\&{begin} \37$\\{acc}\K\\{accid}[\\{b\_num}]$;\5 +$\\{b\_num}\K2$;\5 +\X47:Schreibe das Vorzeichen\X;\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{nat\_num}=5$ \1\&{then}\6 +\&{begin} \37$\\{acc}\K\\{accid}[\\{nat\_num}]$;\5 +$\\{nat\_num}\K0$;\5 +\X47:Schreibe das Vorzeichen\X;\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\2\par +\U section~38.\fi + +\M47. Die Schreibbefehle f"ur Vorzeichen, Noten, Pausen, Punkte folgen. +\par +Das Vorzeichen wird geschrieben, falls vorhanden. +Beim Schreiben m"ussen zwei F"alle unterschieden werden. +Falls n"amlich \\{pitchnum} kleiner als 0 oder gr"o\8er als 9 +ist, mu\8 die Zahl in +geschweifte Klammern geschrieben werden, sonst nicht. +Die Zahl, die zu der Variablen +\\{w\_column} (z"ahlt die Spalte in \\{outfile}) +addiert wird, ist die gr"o\8tm"ogliche. + +\Y\P$\4\X47:Schreibe das Vorzeichen\X\S$\6 +\&{if} $(\\{pitchnum}<0)\V(\\{pitchnum}>9)$ \1\&{then}\6 +\&{begin} \37$\\{newline\_music}(8)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{acc},\39\.{\'\{\'},\39% +\\{pitchnum}:1,\39\.{\'\}\'})$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37$\\{newline\_music}(5)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{acc},\39\\{pitchnum}:1)$;\6 +\&{end};\2\par +\U sections~46, 46, and~46.\fi + +\M48. Die Note wird - "ahnlich wie das Vorzeichen - geschrieben. + +\Y\P$\4\X48:Schreibe die gelesene Note\X\S$\6 +\&{if} $(\\{pitchnum}<0)\V(\\{pitchnum}>9)$ \1\&{then}\6 +\&{begin} \37$\\{newline\_music}(7)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{duration},\39\.{\'\{\'},\39% +\\{pitchnum}:1,\39\.{\'\}\'})$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37$\\{newline\_music}(4)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{duration},\39\\{pitchnum}:1)$;\6 +\&{end};\2\par +\U section~38.\fi + +\M49. Punkte werden geschrieben, falls vorhanden. +Danach wird \\{dot\_num} auf 0 gesetzt. + +\Y\P$\4\X49:Schreibe die Punkte\X\S$\6 +\&{if} $\\{dot\_num}>0$ \1\&{then}\6 +\&{begin} \37$\\{newline\_music}(\\{dot\_num}+1)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\.{\'.\'},\39\\{dot\_num}:1)$;\5 +$\\{dot\_num}\K0$;\6 +\&{end};\2\par +\U section~38.\fi + +\M50. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{bar\_line}: \37\\{char};\6 +\4\\{rest}: \37\\{char};\par +\fi + +\M51. Pause und Taktstrich werden gesondert behandelt und sofort +ausgedruckt. + +\Y\P$\4\X51:Zeichen ist Pause oder Taktstrich\X\S$\6 +\4$\.{\'|\'},\39\.{\'=\'}$: \37\&{begin} \37$\\{bar\_line}\K\\{sign}$;\5 +\X53:Schreibe Taktstrich\X;\6 +\&{end};\6 +\4\.{\'p\'}: \37\&{begin} \37$\\{rest}\K\\{sign}$;\5 +\X52:Schreibe Pause\X;\6 +\&{end};\par +\U section~35.\fi + +\M52. Pause wird geschrieben. + +\Y\P$\4\X52:Schreibe Pause\X\S$\6 +$\\{newline\_music}(3)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{rest},\39\\{duration})$;\par +\U section~51.\fi + +\M53. Taktstrich wird geschrieben. + +\Y\P$\4\X53:Schreibe Taktstrich\X\S$\6 +$\\{newline\_music}(2)$;\5 +$\\{write}(\\{outfile},\39\.{\'\\\'},\39\\{bar\_line})$;\par +\U section~51.\fi + +\M54. Das Zeichen ist ein Kommentarzeichen. Der Rest der Zeile +soll im Musikmode nicht mit"ubergeben werden. Deshalb setzen wir +\\{line\_ptr} um eins zu hoch; daraufhin wird die n"achste Zeile +eingelesen. + +\Y\P$\4\X54:Zeichen ist Kommentar\X\S$\6 +\4\.{\'\%\'}: \37$\\{line\_ptr}\K\\{last\_line\_length}+\\{actual\_line% +\_length}+1$;\par +\U sections~35 and~65.\fi + +\M55. Das Zeichen ist Beginn eines macros. + +\Y\P$\4\X55:Zeichen ist backslash\X\S$\6 +\4\.{\'\\\'}: \37\\{backslash};\par +\U sections~35 and~65.\fi + +\M56. Es wird "uberpr"uft, ob man zum Ende der Musikeingabe gelangt ist. + +\Y\P$\4\X56:Zeichen bedeutet Ende der Musikeingabe\X\S$\6 +\4\.{\'!\'}: \37$\\{music\_num}\K\\{ausruf}(\\{change})$;\par +\U section~35.\fi + +\M57. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\|i: \37\\{integer};\par +\fi + +\N58. Anhang B: Default-Werte. + + +\fi + +\M59. Die am Anfang notwendigen Werte werden gesetzt. + +\Y\P$\4\X59:Setze die default-Werte\X\S$\6 +$\\{last\_line\_length}\K0$;\5 +$\\{actual\_line\_length}\K0$;\5 +$\\{next\_line\_length}\K0$;\5 +$\\{inline\_length}\K0$;\5 +$\\{line\_ptr}\K1$;\5 +$\\{line\_num}\K0$;\5 +$\\{music\_num}\K\\{false}$;\5 +$\\{change}\K\\{false}$;\5 +$\\{w\_column}\K0$;\5 +$\\{octave\_num}\K0$;\5 +$\\{duration}\K\.{\'v\'}$;\5 +$\\{dot\_num}\K0$;\5 +$\\{x\_num}\K0$;\5 +$\\{b\_num}\K2$;\5 +$\\{nat\_num}\K0$;\5 +$\\{octave}\K0$;\5 +$\\{accid}[1]\K\.{\'x\'}$;\5 +$\\{accid}[2]\K\.{\'xx\'}$;\5 +$\\{accid}[3]\K\.{\'b\'}$;\5 +$\\{accid}[4]\K\.{\'bb\'}$;\5 +$\\{accid}[5]\K\.{\'n\'}$;\5 +$\|i\K1$;\par +\U section~19.\fi + +\N60. Anhang B: Fehlermeldungen. + +\fi + +\M61. Prozedur, die f"ur manche +Syntaxfehler Meldungen auf den Bildschirm und in einen +Fehler--file (\\{err}) schreibt. +Dabei wird die Zeile, in der der Fehler vorkommt bis zur falschen +Stelle ausgedruckt, der Rest der Zeile \\{actual\_line} wird in der +n"achsten Zeile ausgedruckt. Au\8erdem wird mit der Fehlermeldung +auch die Zeilennummer in der der Fehler steht, ausgedruckt. +"Ubergeben wird der Text der Fehlermeldung, ein string +der L"ange 80, und die Zeilennummer \\{line\_num} der Zeile, in der der +Fehler auftritt. + +\Y\P$\4\X7:Globals\X\mathrel{+}\S$\6 +\4\\{error\_help}: \37$\\{string}(20)$;\6 +\4\\{input\_term}: \37$\\{string}(20)$;\6 +\4\\{input\_char}: \37\\{char};\par +\fi + +\M62. + +\Y\P$\4\X62:Procedure error\X\S$\6 +\4\&{procedure}\1\ \37$\\{error}(\\{error\_text}:\\{string}(80);\,\35\\{help}:% +\\{integer})$;\6 +\4\&{var} \37\|i: \37\\{integer};\2\6 +\&{begin} \37$\\{writeln\_error}(\.{\'\ \'})$;\5 +$\\{writeln\_error}(\.{\'Fehler\ in\ Zeile:\ \'},\39\\{help}:1)$;\6 +\&{if} $\\{line\_ptr}-11>0$ \1\&{then}\6 +\&{begin} \37\&{for} $\|i\K10\mathrel{\&{downto}}0$ \1\&{do}\6 +\&{begin} \37$\\{write\_error}(\\{buffer}[\\{line\_ptr}-1-\|i])$;\6 +\&{end};\2\6 +$\\{writeln\_error}(\.{\'\ \'})$;\5 +$\\{write\_error}(\.{\'\ \ \ \ \ \ \ \ \ \ \ \'})$;\6 +\&{for} $\|i\K1\mathrel{\&{to}}11$ \1\&{do}\6 +\&{begin} \37$\\{write\_error}(\\{buffer}[\\{line\_ptr}-1+\|i])$;\6 +\&{end};\2\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{for} $\|i\K1\mathrel{\&{to}}(\\{line\_ptr}-1)$ \1% +\&{do}\6 +\&{begin} \37$\\{write\_error}(\\{buffer}[\|i])$;\6 +\&{end};\2\6 +$\\{writeln\_error}(\.{\'\ \'})$;\6 +\&{for} $\|i\K1\mathrel{\&{to}}(\\{line\_ptr}-1)$ \1\&{do}\6 +\&{begin} \37$\\{write\_error}(\.{\'\ \'})$;\6 +\&{end};\2\6 +\&{for} $\|i\K1\mathrel{\&{to}}11$ \1\&{do}\6 +\&{begin} \37$\\{write\_error}(\\{buffer}[\\{line\_ptr}-1+\|i])$;\6 +\&{end};\2\6 +\&{end};\2\6 +$\\{writeln\_error}(\.{\'\ \'})$;\5 +$\\{writeln\_error}(\\{error\_text})$;\5 +\X63:Eingabe vom Terminal\X;\6 +\&{end};\par +\U section~5.\fi + +\M63. Nach der Fehlermeldung kann eine Eingabe vom Terminal erfolgen. + +\Y\P$\4\X63:Eingabe vom Terminal\X\S$\6 +$\\{writeln}(\\{err},\39\.{\'?\'})$;\5 +$\\{writeln}(\\{outterm},\39\.{\'?\'})$;\5 +$\\{read}(\\{interm},\39\\{input\_char})$;\6 +\&{case} $\\{input\_char}$ \1\&{of}\6 +\4\.{\'i\'}: \37\&{begin} \37$\\{writeln\_error}(\.{\'input>\'})$;\5 +$\\{read}(\\{interm},\39\\{input\_term})$;\5 +$\\{error\_help}\K\\{input\_term}$;\6 +\&{end};\6 +\4\.{\'x\'}: \37\&{goto} \3710;\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\par +\U section~62.\fi + +\N64. Anhang B: Prozedur backslash. + +\fi + +\M65. Prozedur, die aufgerufen wird, wenn ein backslash eingelesen +wurde. Sie erkennt, um welches Kontrollwort es sich handelt und +ruft die entsprechenden Unterprogramme auf. +Daf"ur wird zun"achst das macro auf den string \\{control} gelesen. +Das Kontrollwort ist beendet, falls $\\{macroend}=\\{true}$, d.h. +das eingelesen Zeichen ist ein \.{\'\ \'}, \.{\'\{\'}, \.{\'\%\'} oder \.{\'% +\\\'}. + +\Y\P$\4\X65:Procedure backslash\X\S$\6 +\4\&{procedure}\1\ \37\\{backslash}; \6 +\4\&{var} \37\\{control}: \37$\\{string}(80)$;\5 +\\{macroend}: \37\\{boolean}; \X67:Procedure macro\X \6 +\&{begin} \37$\\{control}\K\\{str}(\.{\'\ \'})$;\6 +\1\&{repeat} \37\&{begin} \37\X66:Einlesen der Kontrollsequenz auf \\{control}% +\X\6 +\&{end}\6 +\4\&{until}\5 +$\\{macroend}=\\{true}$;\2\6 +$\\{control}\K\\{trim}(\\{control})$;\5 +$\\{control}\K\\{ltrim}(\\{control})$;\6 +\&{if} $((\\{control}=\.{\'\\beam\'})\V(\\{control}=\.{\'\\slur\'})\V(% +\\{control}=\.{\'\\cresc\'})\V(\\{control}=\.{\'\\decresc\'})\V(\\{control}=\.{% +\'\\chord\'}))$ \1\&{then}\6 +\&{begin} \37$\\{macro}(\\{control})$\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{control}=\.{\'\\group\'}$ \1\&{then}\6 +\&{begin} \37$\\{macro}(\\{control})$\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $\\{control}=\.{\'\\signature\'}$ \1\&{then}\6 +\&{begin} \37$\\{macro}(\\{control})$\6 +\&{end}\6 +\4\&{else} \&{begin} \37\&{if} $((\\{control}=\.{\'\\text\'})\V(\\{control}=\.{% +\'\\vocal\'})\V(\\{control}=\.{\'\\two\'}))$ \1\&{then}\6 +\&{begin} \37$\\{macro}(\\{control})$\6 +\&{end}\6 +\4\&{else} \&{begin} \37$\\{newline\_music}(\\{length}(\\{control}))$;\5 +$\\{write}(\\{outfile},\39\\{control})$;\6 +\&{case} $\\{sign}$ \1\&{of}\6 +\X54:Zeichen ist Kommentar\X;\6 +\X55:Zeichen ist backslash\X;\6 +\4\&{othercases} \37;\2\6 +\&{endcases};\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\2\6 +\&{end};\par +\U section~5.\fi + +\M66. Dieser Teil wird von der Prozedur \\{backslash} ben"otigt und +liest auf den String \\{control} die Kontrollsequenz ein, die durch +backslash angezeigt wird. + +\Y\P$\4\X66:Einlesen der Kontrollsequenz auf \\{control}\X\S$\6 +$\\{control}\K\\{control}\\{str}(\\{sign})$;\6 +\&{if} $\R(\\{eof\_infile})$ \1\&{then}\6 +\&{begin} \37$\\{sign}\K\\{get\_char}$;\5 +$\\{macroend}\K((\\{sign}=\.{\'\{\'})\V(\\{sign}=\.{\'\%\'})\V(\\{sign}=\.{\'% +\\\'})\V(\\{sign}=\.{\'\ \'}))$;\6 +\&{end}\6 +\4\&{else} \&{begin} \37$\\{control}\K\\{trim}(\\{control})$;\5 +$\\{newline\_music}(\\{length}(\\{control}))$;\5 +$\\{write}(\\{outfile},\39\\{control})$;\5 +\&{goto} \3710;\6 +\&{end};\2\par +\U section~65.\fi + +\M67. + +\Y\P$\4\X67:Procedure macro\X\S$\6 +\4\&{procedure}\1\ \37$\\{macro}(\\{help}:\\{string}(80))$;\2\6 +\&{begin} \37$\\{help}\K\\{trim}(\\{help})$;\5 +$\\{help}\K\\{ltrim}(\\{help})$;\5 +$\\{help}\K\\{compress}(\\{help})$;\5 +$\\{newline\_music}(\\{length}(\\{help}))$;\5 +$\\{write}(\\{outfile},\39\\{help})$;\5 +$\\{line\_ptr}\K\\{line\_ptr}-1$;\6 +\&{end};\par + +\U sections~5 and~65.\fi + +\pageheight=23cm\vskip0.5cm \def\rhead{ANHANG B: INDEX} +\inx +\:\\{acc}, 45, 46, 47. +\:\\{accid}, 45, 46, 59. +\:\\{accidental}, 44, 45. +\:\\{actual\_line}, 7, 11, 13, 14, 61. +\:\\{actual\_line\_length}, 7, 8, 10, 11, 12, 19, 29, 54, 59. +\:\\{ausruf}, \[21], 24, 25, 27, 29, 30, 33, 56. +\:\\{b\_num}, 36, 37, 46, 59. +\:\\{backslash}, 35, 55, \[65], 66. +\:\\{bar\_line}, 50, 51, 53. +\:\\{boolean}, 7, 17, 21, 65. +\:\\{buffer}, 7, 10, 11, 12, 15, 62. +\:\\{change}, 7, 11, 13, 20, 27, 28, 33, 56, 59. +\:\\{char}, 7, 8, 36, 50, 61. +\:\\{compress}, 9, 67. +\:\\{control}, \[65], 66. +\:\\{dot\_num}, 36, 37, 49, 59. +\:\\{duration}, 36, 37, 48, 52, 59. +\:\&{else}, 2. +\:\&{end}, 2. +\:\&{endcases}, \[2]. +\:\\{eof}, 8, 19, 29. +\:\\{eof\_infile}, 7, 8, 19, 21, 33, 35, 66. +\:\\{err}, 3, 5, 6, 19, 61, 63. +\:\\{error}, 28, 30, 43, \[62]. +\:\\{error\_help}, 61, 63. +\:\\{error\_text}, 62. +\:\\{false}, 13, 17, 19, 20, 23, 25, 26, 27, 29, 33, 59. +\:\\{get}, 8. +\:\\{get\_char}, 7, \[8], 14, 15, 22, 33, 35, 66. +\:\\{help}, 21, 27, 62, 67. +\:\|{i}, \[62]. +\:\\{in\_file}, 7. +\:\\{in\_line}, 7, 9, 10, 12. +\:\\{infile}, 5, 6, 7, 8, 9, 19, 29. +\:\\{inline\_length}, 7, 8, 9, 10, 59. +\:\\{input\_char}, 61, 63. +\:\\{input\_term}, 61, 63. +\:\\{integer}, 7, 8, 20, 31, 36, 39, 41, 57, 62. +\:\\{interm}, 5, 6, 19, 63. +\:\|{j}, \[8]. +\:\\{last\_line}, 7, 11. +\:\\{last\_line\_length}, 7, 8, 10, 11, 12, 19, 54, 59. +\:\\{length}, 9, 65, 66, 67. +\:\\{line\_num}, 7, 8, 11, 24, 28, 30, 33, 43, 59, 61. +\:\\{line\_ptr}, 7, 8, 15, 19, 33, 54, 59, 62, 67. +\:\\{ltrim}, 9, 65, 67. +\:\\{macro}, 65, \[67]. +\:\\{macroend}, 65, 66. +\:\\{music}, 17, 19, \[35], 36. +\:\\{music\_num}, 17, 19, 20, 23, 26, 30, 33, 35, 56, 59. +\:\\{nat\_num}, 36, 37, 46, 59. +\:\\{newline\_music}, 25, 29, 30, \[31], 47, 48, 49, 52, 53, 65, 66, 67. +\:\\{next\_line}, 7, 11. +\:\\{next\_line\_length}, 7, 10, 11, 12, 59. +\:\\{nonmusic}, 17, 19, \[33]. +\:\\{octave}, 41, 42, 43, 59. +\:\\{octave\_num}, 36, 37, 42, 43, 59. +\:\&{othercases}, \[2]. +\:\\{otherwise}, 2. +\:\\{outfile}, 5, 6, 17, 19, 20, 24, 25, 27, 29, 30, 31, 33, 38, 47, 48, 49, +52, 53, 65, 66, 67. +\:\\{outterm}, 3, 5, 6, 19, 63. +\:\\{pascal}, 2. +\:\\{pitchnum}, 39, 40, 43, 47, 48. +\:\\{read}, 9, 63. +\:\\{reset}, 19. +\:\\{rest}, 50, 51, 52. +\:\\{rewrite}, 19. +\:\\{sign}, 7, 22, 27, 29, 33, 35, 40, 51, 65, 66. +\:\\{str}, 65, 66. +\:\\{string}, 7, 44, 45, 61, 62, 65, 67. +\:\\{tangle}, 2. +\:\\{termin}, 19. +\:\\{termout}, 19. +\:\\{text}, 6. +\:\\{trans}, \[5]. +\:\\{trim}, 9, 65, 66, 67. +\:\\{true}, 11, 17, 19, 20, 23, 24, 26, 27, 28, 30, 35, 65. +\:\\{w\_column}, 20, 24, 25, 29, 31, 33, 47, 59. +\:\\{weave}, 2. +\:\\{word\_length}, 31. +\:\\{write}, 3, 24, 27, 29, 30, 31, 33, 47, 48, 49, 52, 53, 65, 66, 67. +\:\\{write\_error}, \[3], 62. +\:\\{writeln}, 3, 24, 25, 27, 29, 31, 33, 63. +\:\\{writeln\_error}, \[3], 62, 63. +\:\\{x\_num}, 36, 37, 46, 59. +\fin +\def\rhead{ANHANG B: NAMES OF THE SECTIONS} +\:\X28:Ausrufezeichen fehlt\X +\U section~26. +\:\X42:Berechnung der richtigen Oktave\X +\U section~38. +\:\X63:Eingabe vom Terminal\X +\U section~62. +\:\X66:Einlesen der Kontrollsequenz auf \\{control}\X +\U section~65. +\:\X10:Einlesen der neuen Zeile in den buffer\X +\U sections~8 and~8. +\:\X30:Ende der Eingabedatei erreicht\X +\U section~21. +\:\X29:Ende musicmode, Zeichen schreiben\X +\U section~26. +\:\X6:Files\X +\U section~5. +\:\X21:Function ausruf\X +\U section~5. +\:\X8:Function getchar\X +\U section~5. +\:\X27:Gelesene Zeichen schreiben\X +\U section~26. +\:\X46:Gibt es ein Vorzeichen\X +\U section~38. +\:\X7, 17, 20, 36, 39, 41, 45, 50, 57, 61:Globals\X +\U section~5. +\:\X26:Kein Wechsel des modes\X +\U section~22. +\:\X13:Kein Zeilenwechsel\X +\U section~8. +\:\X18:Labels\X +\U section~5. +\:\X9:Lesen der n"achsten Zeile von infile\X +\U sections~8 and~8. +\:\X22:Lesen des n"achsten Zeichens\X +\U section~21. +\:\X11:Neubelegung der \\{actual\_line} durch \\{next\_line}, Zeilenwechsel\X +\U section~8. +\:\X44:New type\X +\U section~5. +\:\X65:Procedure backslash\X +\U section~5. +\:\X62:Procedure error\X +\U section~5. +\:\X67:Procedure macro\X +\U sections~5 and~65. +\:\X35:Procedure music\X +\U section~5. +\:\X31:Procedure newline music\X +\U section~5. +\:\X33:Procedure nonmusic\X +\U section~5. +\:\X52:Schreibe Pause\X +\U section~51. +\:\X53:Schreibe Taktstrich\X +\U section~51. +\:\X47:Schreibe das Vorzeichen\X +\U sections~46, 46, and~46. +\:\X49:Schreibe die Punkte\X +\U section~38. +\:\X48:Schreibe die gelesene Note\X +\U section~38. +\:\X59:Setze die default-Werte\X +\U section~19. +\:\X40, 43:Umsetzung der Tonh"ohe in eine Zahl\X +\U section~38. +\:\X23:Wechsel des modes\X +\U section~22. +\:\X24:Wechsel in music mode\X +\U section~23. +\:\X25:Wechsel in nonmusic mode\X +\U section~23. +\:\X56:Zeichen bedeutet Ende der Musikeingabe\X +\U section~35. +\:\X37:Zeichen ist Angabe zum Ton\X +\U section~35. +\:\X54:Zeichen ist Kommentar\X +\U sections~35 and~65. +\:\X51:Zeichen ist Pause oder Taktstrich\X +\U section~35. +\:\X38:Zeichen ist Tonh"ohe\X +\U section~35. +\:\X55:Zeichen ist backslash\X +\U sections~35 and~65. +\:\X15:Zeichen lesen\X +\U section~8. +\:\X14:\\{actual\_line} ist Leerzeile\X +\U section~8. +\:\X12:\\{in\_line} ist Leerzeile bzw. existiert nicht\X +\U sections~8 and~8. + +\vfill\eject % finish the section names +\rightskip 0pt \hyphenpenalty 50 \tolerance 200 +\setpage diff --git a/macros/mtex/documentation/mdocverb.tex b/macros/mtex/documentation/mdocverb.tex new file mode 100644 index 0000000000..8ec5d53d0a --- /dev/null +++ b/macros/mtex/documentation/mdocverb.tex @@ -0,0 +1,40 @@ +% macros for verbatim scanning +% im wesentlichen dem file MANHDR TEX von DEK entnommen +\catcode`@=11 +\def\tt{\fam\ttfam\tentt}% +\newskip\ttglue \ttglue=.5em plus .25em minus .15em +\chardef\other=12 +\def\ttverbatim{\begingroup + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\^=\other + \catcode`\"=\other + \parskip \z@ + \obeyspaces \obeylines \tt} + +\def\begintt{$$\let\par=\endgraf \ttverbatim + \catcode`\|=0 \rightskip-5pc \ttfinish} +{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character + |obeylines % end of line is active + |gdef|ttfinish#1^^M#2\endtt{|vbox{#2}|endgroup$$}} + +\catcode`\|=\active +{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}} +%\def\ttspace{{\tt\hskip\ttglue}} + +\def\vrt{\hbox{\tt\char`\|}} % vertical line +\def\dn{\hbox{\tt\char'14}} % downward arrow +\def\up{\hbox{\tt\char'13}} % upward arrow +\def\]{\hbox{\tt\char`\ }} % visible space + +\catcode`@=12 % at signs are no longer letters +\def\verbatimon{\catcode`\|=\active} +\def\verbatimoff{\catcode`\|=\other} +\verbatimoff diff --git a/macros/mtex/documentation/webmac.tex b/macros/mtex/documentation/webmac.tex new file mode 100644 index 0000000000..769fa8bf9d --- /dev/null +++ b/macros/mtex/documentation/webmac.tex @@ -0,0 +1,201 @@ +% This is WEBMAC.TEX in text format, as of May 5, 1986. +% standard macros for WEB listings (in addition to PLAIN.TEX) +\xdef\fmtversion{\fmtversion+WEBMAC1.4} +\parskip 0pt % no stretch between paragraphs +\parindent 1em % for paragraphs and for the first line of Pascal text + +\font\eightrm=cmr8 +\let\sc=\eightrm \let\mainfont=\tenrm +\font\titlefont=cmr7 scaled\magstep4 % title on the contents page +\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title +\font\tentex=cmtex10 % TeX extended character set (used in strings) + +\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers +\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way +\def\{\hbox{\bf#1\/}} % boldface type for reserved words +\def\.#1{\hbox{\tentex % typewriter type for strings + \let\\=\BS % backslash in a string + \let\'=\RQ % right quote in a string + \let\`=\LQ % left quote in a string + \let\{=\LB % left brace in a string + \let\}=\RB % right brace in a string + \let\~=\TL % tilde in a string + \let\ =\SP % space in a string + \let\_=\UL % underline in a string + \let\&=\AM % ampersand in a string + #1}} +\def\#{\hbox{\tt\char`\#}} % parameter sign +\def\${\hbox{\tt\char`\$}} % dollar sign +\def\%{\hbox{\tt\char`\%}} % percent sign +\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat +% circumflex accents can be obtained from \^^D instead of \^ +\def\AT!{@} % at sign for control text + +\chardef\AM=`\& % ampersand character in a string +\chardef\BS=`\\ % backslash in a string +\chardef\LB=`\{ % left brace in a string +\def\LQ{{\tt\char'22}} % left quote in a string +\chardef\RB=`\} % right brace in a string +\def\RQ{{\tt\char'23}} % right quote in a string +\def\SP{{\tt\char`\ }} % (visible) space in a string +\chardef\TL=`\~ % tilde in a string +\chardef\UL=`\_ % underline character in a string + +\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em +\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems + +\newcount\ind % current indentation in ems +\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch +\def\2{\global\advance\ind by-1} % indent one less notch +\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement +\def\4{\copy\bak} % backspace one notch +\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break +\def\6{\ifmmode\else\par % forced break + \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi} +\def\7{\Y\6} % forced break and a little extra space + +\let\yskip=\smallskip +\def\to{\mathrel{.\,.}} % double dot, used only in math mode +\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1 #2.\par}} +\def\lapstar{\rlap{*}} +\def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}} +\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format' +\def\A{\note{See also}} % cross-reference for multiply defined section names +\def\B{\mathopen{\.{@\{}}} % begin controlled comment +\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments + \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX} +\def\D{\defin{define}} % macro definition +\def\E{\cdot10^} % exponent in floating point constant +\def\F{\defin{format}} % format definition +\let\G=\ge % greater than or equal sign +\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant +\let\I=\ne % unequal sign +\def\J{\.{@\&}} % TANGLE's join operation +\let\K=\gets % left arrow +\let\L=\le % less than or equal sign +\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section + \vskip12ptminus3pt\startsection\ignorespaces} +\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section + \def\rhead{\uppercase{\ignorespaces#2}} % define running headline + \message{*\modno} % progress report + \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file + \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces} +\def\MN#1.{\par % common code for \M, \N + {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} + \ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}} +\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant +\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode + \sfcode`;=3000 + \pretolerance 10000 + \hyphenpenalty 10000 \exhyphenpenalty 10000 + \global\ind=2 \1\ \unskip} +\def\Q{\rightskip=0pt % get out of Pascal mode + \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 } +\let\R=\lnot % logical not +\let\S=\equiv % equivalence sign +\def\T{\mathclose{\.{@\}}}} % terminate controlled comment +\def\U{\note{This code is used in}} % cross-reference for uses of sections +\let\V=\lor % logical or +\let\W=\land % logical and +\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name + \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX} +\def\Y{\par\yskip} +\let\Z=\let % now you can \send the control sequence \Z +\def\){\hbox{\.{@\$}}} % sign for string pool check sum +\def\]{\hbox{\.{@\\}}} % sign for forced line break +\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule + \hbox{\strut\kern2pt\.{#1}\kern2pt}} + \hrule}\vrule}\kern2pt} % verbatim string +\let\~=\ignorespaces +\let\*=* + +\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue +\newif\ifon \newif\iftitle \newif\ifpagesaved +\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad + \tensy x\mainfont\topmark} % top line on left-hand pages +\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead + \qquad\mainfont\the\pageno} % top line on right-hand pages +\def\page{\box255 } +\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi + \shipout\vbox{ + \vbox to\fullpageheight{ + \iftitle\global\titlefalse + \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi + \vfill#1}} % parameter #1 is the page itself + \global\advance\pageno by1} + +\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections +\def\title{} % an optional title can be set by the user +\def\topofcontents{\centerline{\titlefont\title} + \vfill} % this material will start the table of contents page +\def\botofcontents{\vfill} % this material will end the table of contents page +\def\contentspagenumber{0} % default page number for table of contents +\newdimen\pagewidth \pagewidth=6.5in % the width of each page +\newdimen\pageheight \pageheight=8.7in % the height of each page +\newdimen\fullpageheight \fullpageheight=9in % page height including headlines +\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones +\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein + \fullpageheight=9truein\setpage} +\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size +\def\contentsfile{CONTENTS} % file that gets table of contents info +\def\readcontents{\input CONTENTS} + +\newwrite\cont +\output{\setbox0=\page % the first page is garbage + \openout\cont=\contentsfile + \global\output{\normaloutput\page\lheader\rheader}} +\setpage +\vbox to \vsize{} % the first \topmark won't be null + +\def\ch{\note{The following sections were changed by the change file:} + \let\*=\relax} +\newbox\sbox % saved box preceding the index +\newbox\lbox % lefthand column in the index +\def\inx{\par\vskip6pt plus 1fil % we are beginning the index + \write\cont{} % ensure that the contents file isn't empty + \closeout\cont % the contents information has been fully gathered + \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi + \global\setbox\sbox=\page \global\pagesavedtrue} + \pagesavedfalse \eject % eject the page-so-far and predecessors + \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box + \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height + \hsize=.5\pagewidth \advance\hsize by -10pt + % column width for the index (20pt between cols) + \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines + \def\lr{L} % this tells whether the left or right column is next + \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} + \else\normaloutput{\vbox to\pageheight{\box\sbox\vss + \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader + \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} + \message{Index:} + \parskip 0pt plus .5pt + \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry + \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room + \def\[##1]{$\underline{##1}$} % underlined index item + \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar + \hyphenpenalty 10000 \parindent0pt} +\def\fin{\par\vfill\eject % this is done when we are ending the index + \ifpagesaved\null\vfill\eject\fi % output a null index column + \if L\lr\else\null\vfill\eject\fi % finish the current page + \parfillskip 0pt plus 1fil + \def\rhead{NAMES OF THE SECTIONS} + \message{Section names:} + \output{\normaloutput\page\lheader\rheader} + \setpage + \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1 ##2.}} + \linepenalty=10 % try to conserve lines + \def\U{\note{Used in}} % cross-reference for uses of sections + \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry} +\def\con{\par\vfill\eject % finish the section names + \rightskip 0pt \hyphenpenalty 50 \tolerance 200 + \setpage + \output{\normaloutput\page\lheader\rheader} + \titletrue % prepare to output the table of contents + \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS} + \message{Table of contents:} + \topofcontents + \line{\hfil Section\hbox to3em{\hss Page}} + \def\Z##1##2##3{\line{\ignorespaces##1 + \leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}} + \readcontents\relax % read the contents info + \botofcontents \end} % print the contents page(s) and terminate diff --git a/macros/mtex/macros/mtex.tex b/macros/mtex/macros/mtex.tex new file mode 100644 index 0000000000..57c2acdb2d --- /dev/null +++ b/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 diff --git a/macros/mtex/macros/mtexdemo.tex b/macros/mtex/macros/mtexdemo.tex new file mode 100644 index 0000000000..e1c8402c6e --- /dev/null +++ b/macros/mtex/macros/mtexdemo.tex @@ -0,0 +1,299 @@ +%format plain +%--------------------------------------------------- +\input german.sty +%\input verbatim +% macros for verbatim scanning +% im wesentlichen dem file MANHDR TEX von DEK entnommen +\catcode`@=11 +\def\tt{\fam\ttfam\tentt}% +\newskip\ttglue \ttglue=.5em plus .25em minus .15em +\chardef\other=12 +\def\ttverbatim{\begingroup + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\^=\other + \catcode`\"=\other + \parskip \z@ + \obeyspaces \obeylines \tt} + +\def\begintt{$$\let\par=\endgraf \ttverbatim + \catcode`\|=0 \rightskip-5pc \ttfinish} +{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character + |obeylines % end of line is active + |gdef|ttfinish#1^^M#2\endtt{|vbox{#2}|endgroup$$}} + +\catcode`\|=\active +{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}} +%\def\ttspace{{\tt\hskip\ttglue}} + +\def\vrt{\hbox{\tt\char`\|}} % vertical line +\def\dn{\hbox{\tt\char'14}} % downward arrow +\def\up{\hbox{\tt\char'13}} % upward arrow +\def\]{\hbox{\tt\char`\ }} % visible space + +\catcode`@=12 % at signs are no longer letters +\def\verbatimon{\catcode`\|=\active} +\def\verbatimoff{\catcode`\|=\other} +\verbatimoff +%--------------------------------------------------- end of verbatim.tex +\nopagenumbers +\headline{\eightrm \hfill Beispiele f"ur den Notensatz mit \TeX +\hfill\hbox to 0pt{\hss Schofer/Steinbach 1987}} +%--------------------------------------------------- +\input mtex +%--------------------------------------------------- +\let\os=\^ +\let\us=\_ +\def\ks#1{\noindent\hbox{{\tt \char\hex5C}\bf#1}} +\def\bs{\noindent\hbox{{\tt \char\hex5C}}}%Backslash +\def\lk{\hbox{{\tt\char\hex7B}}}%linke Klammer auf +\def\strich{{\hbox{\tt \char\hex7C}}} +\def\dpkt{{\hbox{\tt \char\hex3A}}}%Doppelpunkt +\def\gleich{{\hbox{\tt \char\hex3D}}}% +\def\slash{\noindent{\hbox{\tt \char\hex2F}}} +\def\blank{{\hbox{\tt \char\hex20}}} +% +\let\leftbrace=\{ +\def\{{\ifmmode\leftbrace\else{$\leftbrace$}\fi} +\let\rightbrace=\} +\def\}{\ifmmode\rightbrace\else{$\rightbrace$}\fi} +% +% +\verbatimon +\normalbaselines +\openup\jot +% +%\universal %ist f"ur MTEX etwas zu breit +\small %so gehts vielleicht besser +% +\title{\vbox{\hbox to 0pt{\hss 6 Suiten f"ur Cello Solo\hss} + \hbox to 0pt{\hss Suite II Menuet I\hss}}} +\poet{\vtop{\hbox to 0pt{F"ur Viola "ubertragen \hss} + \hbox to 0pt{von Franz Schmidtner\hss}}} +\composer{Johann Sebastian Bach} +\parindent 20pt +\beginsong\alto\F\meter3/4% +\rchord \h5\h7\h9\endchord\v{10}\|% +\two{\group{\\{\a{10}}\\{\a9}\\{\a{10}}\\{\a8}}{\\{10}\\{9}\\{10}\\{8}}% +\ubeam14\uslur12\go}{\rchord \a4\a6\endchord}% +\v9\|\rchord\v3\v5\endchord\v8% +\group{\\{\a7}\\{\a6}}{\\{7}\\{6}}\lbeam12\go\|% +\two{\group{\\{\a7}\\{\a6}\\{\a5}\\{\x4\a4}\\{\n3\a3}\\{\a2}} +{\\{7}\\{6}\\{5}\\{4}\\{3}\\{2}}\ubeam16\uslur13\go}% +{\a2}\|\rchord \h5\h7\h9\endchord\v{10}\|% +\two{\group{\\{\a{10}}\\{\a9}\\{\tenuto\a{10}}\\{\tenuto\a8\noaccent}} +{\\{10}\\{9}\\{10}\\{8}}\ubeam14\uslur12\go}{\a6}% +\v{11}\|\rchord\v7\v9\endchord\rchord\v3\v7\v{12}\endchord +\rchord\v1\v8\v{13}\endchord\|\rchord\h2\.1\h6\.1\x{11}\h{11}\.1\endchord +\leftrightrepeat +\rchord\h9\h{13}\endchord +{\def\beamlist{\\{1-3,}\\{2-3,}}% +\group{\\{\a{12}}\\{\s{13}}\\{\s{14}}}{\\{12}\\{13}\\{14}}\lbeam13% +\uslur13\go}\| +\two{\group{\\{\a{13}}\\{\a{12}}\\{\x{11}\a{11}}\\{\a{13}}\\{\a9}\\{\a8}} +{\\{13}\\{12}\\{11}\\{13}\\{9}\\{8}}\ubeam16\uslur15\go}{\a8}\|% +\two{\group{\\{\v9}\\{\v{12}}}{\\{9}\\{12}}\uslur12\go}{\h7}% +\x{11}\two{\v{11}}{\v6}\|% +\two{\group{\\{\a{15}}\\{\a{14}}\\{\a{13}}\\{\a{14}}\\{\a{12}}% +\\{\n{11}\a{11}}} +{\\{15}\\{14}\\{13}\\{14}\\{12}\\{11}}\ubeam16\uslur15\go}{\a5}\|% +\two{\h{10}}{\group{\\{\v8}\\{\v7}}{\\{8}\\{7}}\lslur12\go}% +\two{\v{11}}{\v6}\|% +\two{\group{\\{\a9}\\{\a8}\\{\a9}\\{\a7}}{\\{9}\\{8}\\{9}\\{7}}\ubeam14% +\go}{\a7}% +\rchord\v{12}\v6\v3\endchord\|\rchord\v{11}\v7\v2\endchord +\group{\\{\a{10}}\\{\a9}\\{\a8}\\{\a9}}{\\{10}\\{9}\\{8}\\{9}}\lbeam14\go +\|\group{\\{\a7}\\{\a6}\\{\a7}\\{\a9}\\{\a8}\\{\a{10}}} +{\\{7}\\{6}\\{7}\\{9}\\{8}\\{10}}\lbeam16\go\|% +\x7\two{\tr\h9\noaccent}{\h7}% +\two{\v{10}}{\pv}\|\b6% +\two{\group{\\{\a8}\\{\a7}\\{\a8}\\{\a6}} +{\\{8}\\{7}\\{8}\\{6}}\ubeam14\uslur12\go}{\a6}% +\x7\tr\v7\noaccent\|\rchord\v{12}\v8\v3\endchord\rchord\v{11}\v8\v4\endchord +\two{\group{\\{\a{10}}\\{\a9}}{\\{10}\\{9}}\ubeam12\uslur12\go}{\v5}\|% +\group{\\{\rchord\a{11}\a5\a1\endchord +}\\{\a{10}}\\{\a9}\\{\a{10}}\\{\a8}\\{\a{10}}} +{\\{1}\\{10}\\{9}\\{10}\\{8}\\{10}}\lbeam16\go\|% +\two{\group{\\{\v{12}}\\{\x{11}\v{11}}} +{\\{12}\\{11}}\uslur12\go}{\v8\pv}\n7% +\two{\v{12}}{\v7}\|\x4% +\two{\group{\\{\a8}\\{\a7}\\{\a8}\\{\a6}} +{\\{8}\\{7}\\{8}\\{6}}\ubeam14\uslur12\go}{\a4}% +\two{\v7}{\v5}\|% +\group{\\{\a1}\\{\a8}}{\\{1}\\{8}}\lbeam12\go\two{\tr\v6\.1}{\v2\.1}% +\two{\a5}{\raise-1.5\nhh\hbox{\pa}}\|\lchord\h5\.1\h2\.1\h{-2}\.1\endchord +\rightrepeat +\endsong +\parindent0pt +{\eightrm +Aus: Johann Sebastian Bach, Sechs Suiten, f"ur Viola bearbeitet von +Franz Schmidtner, Musikverlag Hans Sikorski, Hamburg. +} +\vskip0.5cm +F"ur dieses Musikst"uck lautet die Eingabe: +\vskip0.5cm +%%%%%%%%%%%%%%%%%% +%%%%% bach %%%%%%% +%%%%%%%%%%%%%%%%%% +{\bf !!} +\ks{title}\{6 Suiten f"ur Cello Solo +\bs{atop} Suite II Menuet I\}\par +\ks{composer}\{Johann Sebastian Bach\} +\ks{poet}\{F"ur Viola "ubertragen \bs{atop} von Franz Schmidtner\}\par +\ks{alto}\ks{F}\ks{meter}\{{\bf3}\slash {\bf4}\}\ks{two} +\par{\bf \{\ \ \ \ks{chord}\{2`d f a\} 4h\strich +\ks{chord}\{'8c `e\}\slash\ \slash\ \slash\ 4a\strich +\par +\ks{chord}\{4,h `d\} g\ks{beam}\{8f e\}\strich +,8a \slash\ \slash\ \slash\ \slash\ \slash\ \strich +\ks{chord}\{`2d f a\} 4h\strich 8e +\slash\ \slash\ \slash\ +{`}{`}4c \strich\par +\ks{chord}\{4`f a\}\ks{chord}\{,h `f {`}{`}d\} +\ks{chord}\{,g `g {`}{`}e\}\strich +\par\ks{chord}\{2.,a ,`e ,x{`}{`}c\} +\dpkt\strich\strich\dpkt +\par\ks{chord}\{2`a {`}{`}e\}\ks{slur}\{\ks{beam}\{8d 6e f\}\}\strich +8`g\slash\ \slash\ \slash\ \slash\ \slash\ \strich +2f \slash\ 4e\strich 8d \slash\ \slash\ \slash\ \slash\ \slash\strich +\ks{slur}\{4g f\}e\strich\par + 8f\slash\ \slash\ \slash\ +\ks{chord}\{4,h `e {`}{`}d\}\strich\ks{chord}\{4,a `f {`}{`}c\} +\ks{beam}\{8`h a g a\}\strich\par \ks{beam}\{8f e f a g h\}\strich +2xf 4p \strich b8e \slash\ \slash\ \slash\ +4xf \ks{tr}\strich\ks{chord}\{4,h `g {`}{`}d\} +\ks{chord}\{4`c g {`}{`}c\} `d\slash\ \strich +\par\ks{beam}\{\ks{chord}\{,8g `d {`}{`}c\} 8`h a h g h\}\strich +4g p nf\strich 8xc \slash\ \slash\ \slash\ 4d\strich +\par\ks{beam}\{8,g `g\} 4.,a 8p\strich \ \slash\ +\dpkt\strich\strich\ \ \}\par +\{\ \ \slash\ \slash\ \strich +\ks{beam}\{\ks{slur}\{8{`}h a\} h g\}\slash\ \strich +\slash\ \slash\ \slash\ \slash\ \strich +\ks{beam}\{\ks{slur}\{'8f e d\}xc ,nh a\}\strich +\slash\ \slash\ \strich\par\ks{beam}\{\ks{slur}\{8h a\}\ks{tenuto} h +f \ks{noaccent}\ \slash\ \}\strich +\slash\ \slash\ \slash\ \strich +\slash\ \dpkt\strich\strich\dpkt\par +\slash\ \slash\ \slash\ \slash\ \strich +\ks{beam}\{\ks{slur}\{8{`}{`}e d xc e `a\}g\}\strich +\ks{slur}\{`4a {`}{`}d\}xc\strich +\ks{beam}\{\ks{slur}\{8{`}{`}g f e f d \}nc\}\strich\par +`2h\slash\ {`}{`}4c\strich \ks{beam}\{8`a g a f\}\slash\ \strich +\slash\ \slash\ \slash\ \slash\ \slash\strich +\slash\ \slash\ \slash\ \slash\ \slash\ \slash\strich\par +2`a \ks{tr} 4h\strich +\ks{beam}\{\ks{slur}\{8g f\} g e\}\slash\strich +\slash\ \slash\ \ks{beam}\{\ks{slur}\{8h a\}\}\strich +\slash\ \slash\ \slash\ \slash\ \slash\ \slash\ \strich\par +\ks{slur}\{{`}{`}4d `a\} {`}{`}d\strich +\ks{beam}\{\ks{slur}\{8`g f\} g e\} 4f\strich +\slash\ \slash\ 4.e \ks{tr} 8d\strich +\ks{chord}\{2.,d .a `.d\} + \dpkt\strich\strich +\ \ \} }{\bf!!} + +\vfill\eject +\vskip2cm +\title{Lobe den Herren} +\composer{Hugo Distler} +\def\@#1#2{{$\hbox{#1\hfill}\atop\hbox{#2\hfill}$}} +\def\lv{{\leaders\hrule \hskip1cm plus 1fill}} +\parindent 40pt +\voice{Sopran}% +\universal +\beginsong\vio\G\^r{{\rm Schnell}}{\vrule height 7\nhh width0pt% +\gluebrule}\meter3/4% +\^{\mezzoforte}\_{\@{Lo-}{Mei-}}{\v2}% +\_{\@{be}{ne}}{\v2}% +\_{\@{den}{ge - }}{\v6}\|% +\_{\@{Her-}{lie - }}{\v4\.1}\_{\@{ren, }{be - }}{\a3}% +\_l{\@{den}{te }}{\v2}\|% +\_l{\@{m"ach - }{See - }}{\v1}\_{\@{ti - }{le, }}{\v0}% +\_{\@{gen }{das }}{\v{-1}}\|% +\_{\@{K"o - }{ist }}{\h0}% +\group{\\{\_n{\@{nig \lv }{mein \lv }}{\v1}}\\{\|\meter2/4}\\{\v1}} +{\\{1}\\{0}\\{1}}\lslur13\go\_{\@{der }{Be- }}{\v2}\|\meter4/4% +\_{\@{Eh - }{geh - }}{\h3}\_{\@{ren!}{ren.}}{\h2}\rightrepeat\meter3/4% +%Ende Wiederholung +\_{Kom-}\^{\forte}{\v6}\_{met}{\v6}\_{zu}{\v6}\|% +\_{Hauf!}{\h7\.1}\caesura\|\_l{Psal - }{\v4}\_{ter}{\a5}% +\_l{und }{\a5}% +\group{\\{\_n{Har\hskip40pt - \hskip40pt -\hskip 40pt - \hskip40pt +}{\v6}}\\{\|}\\{\a6}\\{\a7}\\{\a6}\\{\a4}\\{\v6}% +\\{\|}\\{\a6}\\{\a7}\\{\v6\.1}\\{\a7}\\{\|}\\{\v6\.1}} +{\\{6}\\{8}\\{6}\\{7}\\{6}\\{4}\\{6}\\{8}\\{6}\\{7}\\{6}\\{7}\\{8}\\{6}}% +\lbeam36\lbeam9{10}\uslur13\uslur79\uslur1{14}\go +\_{fe,}{\a5}\_l{wacht}{\v4}\|% +\^{\piano}\_{auf, }{\h3}\group{\\{\_n{wacht}{\caesura\a4}}\\{\a2}} +{\\{4}\\{2}}\ubeam12\go\|\^{\dec}\_{auf,}{\h3}% +\group{\\{\_n{wacht}\^{zart}{\caesura\a4}}\\{\a2}} +{\\{4}\\{2}}\ubeam12\go\|\^{\dec}\_{auf,}{\h6\.1}\caesura\|% +\^{\forte}\_{las-}{\v{-1}}\_{set}{\v0\.1}\_{den}{\a1}\|% +\meter4/4\_{Lob - }{\h2}\_{ge - }{\v3}\_{sang}{\v4}\|\meter7/4% +\group{\\{\_n{h"o \hskip20pt - \hskip20pt - \hskip20pt +- }{\h5}}\\{\v4\.1}\\{\a3}\\{\v2}\\{\h3}} +{\\{5}\\{4}\\{3}\\{2}\\{9}}\uslur15\go +\|\meter3/4\_{ren!}{\h2\.1}\=\endsong +\parindent=0pt \eightrm +Aus: R. Baum,``Geselliges Chorbuch I'' B"arenreiter-Verlag, Kassel und +Basel. +\vskip1cm \rm Auch zu diesem St"uck sei die Eingabe aufgef"uhrt: +\vskip1cm +%%%%%%%%%%%%%%%% +%%%%%% distler% +%%%%%%%%%%%%%%%% +{\bf !!}\ks{title}\{Lobe den Herren\} +\ks{composer}\{Hugo Distler\} +\par +\ks{voice}\{Sopran\} +\ks{treble}\ks{signature}\{{`}{`}xf\} +\ks{text}\{\ks{\os{ }l} Schnell\} +\ks{meter}\{{\bf3}\slash {\bf4}\}\ks{vocal} +\par {\bf\{\ \ \ +4g\ks{mezzoforte} g {`}{`}d\strich `h. 8a 4g\strich f e d \strich 2e +\ks{slur}\{4f\strich\ks{meter}\{2\slash 4\} f\} 4g\strich +\par\ks{meter}\{4\slash 4\} 2a 2g\dpkt\strich\strich +\ks{meter}\{3\slash 4\} 4{`}{`}d d d \strich 2.e 0p\strich +\par `4h 8{`}{`}c c +\ks{group}\{4d\strich 8d e d `h 4{`}{`}d\strich 8d e 4.d 8e\strich 4.d\} +\ks{gslur}\{1-3, 1-13\}\par +\ks{gbeam}\{3-6, 9-10\} 8c 4`h\strich 2a +\ks{piano} 0p\ks{beam}\{8h g\}\strich\par 2a \ks{decr} 0p +%ks{beam}\{8h g\}\strich\par 2a \ks{decr} 0p +\ks{beam}\{8h \ks{text}\{{\rm zart}\}g\}\strich + {`}{`}2.d\ks{decr} 0p\strich +\par `4d\ks{forte} .e 8f\strich \ks{meter}\{4\slash 4\} 2g 4a h\strich +\par +\ks{meter}\{7\slash 4\}\ks{slur}\{`{}`2c `4.h 8a 4g 2a\}\strich +\ks{meter}\{3\slash 4\} 2.g \gleich\ \ \ \} } +\par +\{\ \ \ \{Lo-\bs{atop} Mei-\} \{be\bs{atop} ne\} \{den\bs{atop} ge-\} +\{Her-\bs{atop} lie-\} \{ren,\bs{atop} be-\}\par + \{den \bs{atop} te\} \{m"ach-\bs{atop} See-\} + \{ti-\bs{atop} le,\} \{gen\bs{atop} das\} \par + \{K"o-\bs{atop} ist\} + \{nig--\bs{atop} mein--\} \slash\ + \{der\bs{atop} Be-\} \{Eh-\bs{atop} geh-\} + \{ren!\bs{atop} ren.\} +\par Kom- met zu Hauf! Psal- ter und Har- +\slash\ \slash\ \slash\ +\slash\ \slash\ \slash\ +\slash\ \slash\ \slash\ \slash\ +fe, \par +wacht auf, wacht \slash\ auf, wacht\ \slash\ auf, \par +las- set +den Lob- ge- sang h"o- +\slash\ \slash\ \slash\ \slash\ +ren!\ \ \ \}{\bf!!} +\vfill\eject +% +% +\bye diff --git a/macros/mtex/macros/mtexinfo.tex b/macros/mtex/macros/mtexinfo.tex new file mode 100644 index 0000000000..2236c5b919 --- /dev/null +++ b/macros/mtex/macros/mtexinfo.tex @@ -0,0 +1,468 @@ +%format plain +%\input verbatim +%-------------------------------------------------------------------- +% macros for verbatim scanning +% im wesentlichen dem file MANHDR TEX von DEK entnommen +\catcode`@=11 +\def\tt{\fam\ttfam\tentt}% +\newskip\ttglue \ttglue=.5em plus .25em minus .15em +\chardef\other=12 +\def\ttverbatim{\begingroup + \catcode`\\=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\$=\other + \catcode`\&=\other + \catcode`\#=\other + \catcode`\%=\other + \catcode`\~=\other + \catcode`\_=\other + \catcode`\^=\other + \catcode`\"=\other + \parskip \z@ + \obeyspaces \obeylines \tt} + +\def\begintt{$$\let\par=\endgraf \ttverbatim + \catcode`\|=0 \rightskip-5pc \ttfinish} +{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character + |obeylines % end of line is active + |gdef|ttfinish#1^^M#2\endtt{|vbox{#2}|endgroup$$}} + +\catcode`\|=\active +{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}} +%\def\ttspace{{\tt\hskip\ttglue}} + +\def\vrt{\hbox{\tt\char`\|}} % vertical line +\def\dn{\hbox{\tt\char'14}} % downward arrow +\def\up{\hbox{\tt\char'13}} % upward arrow +\def\]{\hbox{\tt\char`\ }} % visible space + +\catcode`@=12 % at signs are no longer letters +\def\verbatimon{\catcode`\|=\active} +\def\verbatimoff{\catcode`\|=\other} +\verbatimoff +%---------------------------------------------- end of verbatim.tex +\catcode`\"=12 +\def\hex{"} % zum Eingeben von Zahlen in hex +\def\3{\char"19{}} +\catcode`\"=\active %Umlaute +\def"{\accent'177} +\newskip \iindent \iindent=30pt +\font\bigrm=cmbx12 +\font\ninerm=cmr9 +\font\music=music16 +%\footline={} +\headline={\hfill Benutzermacros der aktuellen Version MTEX TEX} +\parindent=0pt +% +% einige allgemeine Definitionen (nicht alle hier ben"otigt) +\def\tex#1{{\it #1\/}} +\def\disp#1{{\sl #1\/}} +\def\defi#1{{\bf #1}} +\def\parh{\par\hang\hangafter0} +\def\parn{\par\noindent} +\def\ul#1{$\underline{\text{#1}}$} +\def\pt{\,{\rm pt}}%nur f"ur mathmode +\def\<#1>{\leavevmode\hbox{$\langle$#1\/$\rangle$}} % syntactic quantity +\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet +\def\hang{\hangindent\iindent} +\def\textindent#1{\noindent\hskip\iindent\llap{#1\enspace}\ignorespaces} +\def\item{\par\hang\textindent} +\def\itemitem{\par\noindent\hskip\iindent\hangindent2\iindent\textindent} +\frenchspacing +% macros for non-centered displays +\outer\def\begindisplay{\obeylines\startdisplay} +{\obeylines\gdef\startdisplay#1 +{\catcode`\^^M=5$$#1\halign\bgroup\hskip\iindent##\hfil&&\qquad##\hfil\cr}} +\outer\def\enddisplay{\crcr\egroup$$} +\def\vo{\tt\verbatimon} +\def\voff{\tt\verbatimoff} +\def\mf{{\rm METAFONT}} +%\let\headings\relax +% +\openup\jot +Dies ist eine Auf{}listung der +benutzbaren Kontrollsequenzen aus MTEX zum Notensatz. + +\verbatimon +Jedes eingegebene Musikst"uck mu\3 in folgender Form aufgebaut sein: +\begindisplay +Kopfzeile\cr +|\beginsong|\\\cr +{}$\vdots$\cr +|\endsong|\cr +\enddisplay +In der Kopfzeile k"onnen die Informationen "uber Titel, Komponist oder +Textautor in beliebiger Reihenfolge angegeben werden mit: +\begindisplay +|\title{...}|\cr +|\composer{...}|\cr +|\poet{...}|\cr +\enddisplay +Mit |\voice{...}| kann der Name der Stimme angegeben werden. Dieser +wird in der ersten Zeile vor das Liniensystem geschrieben. + +Als Notenschl"ussel sind verf"ugbar: +\begindisplay +|\vio| && Violinschl"ussel \cr +%|\viooct| && oktavierter Violinschl"ussel (nach unten) \cr +%|\vioOct| && oktavierter Violinschl"ussel (nach oben) \cr +|\bass| && Ba\3schl"ussel \cr +%|\bassoct| && oktavierter Ba\3schl"ussel (nach unten) \cr +%|\bassOct| && oktavierter Ba\3schl"ussel (nach oben) \cr +C-Schl"ussel:\cr +|\bariton| && Baritonschl"ussel \cr +|\tenor| && Tenorschl"ussel \cr +|\alto| && Altschl"ussel \cr +|\mezzosopran| && Mezzosopransch"ussel \cr +|\sopran| && Sopranschl"ussel \cr +\enddisplay +%Test: +%\def\viooct{$\mathop{\hbox{\music\mviolin}}\limits^8_8$} +%\def\bassoct{$\mathop{\hbox{\music\mbass}}\limits^8_8$} +%\viooct +%\bassoct +F"ur die Tonartangabe wurden folgende Kontrollsequenzen verwendet: +\begindisplay +Durtonarten:\cr +|\F| && |\C| \cr +|\B| && |\G| \cr +|\Es| && |\D| \cr +|\As| && |\A| \cr +|\Des| && |\E| \cr +|\Ges| && |\H| \cr +|\Ces| && |\Fis| \cr +Molltonarten:\cr +|\mdis| && |\ma| \cr +|\mgis| && |\md| \cr +|\mcis| && |\mg| \cr +|\mfis| && |\mc| \cr +|\mh| && |\mf| \cr +|\me| && |\mb| \cr + && |\mes| \cr +\enddisplay +Die Taktart wird angegeben durch +\begindisplay +|\meter{|\|}/{|\|}| +\enddisplay +Die Symbole f"ur Taktangaben k"onnen auch mit |\meter| +eingegeben werden, indem f"ur den ersten Parameter +nichts eingegeben wird, z.B.: |\meter/{\mC}| f"ur {\music \char\hex53}. + +Die Musikfonts k"onnen "uber folgende Kontrollsequenzen angesprochen +werden: +\begindisplay +|\music| && Musikzeichen \cr +|\beamfont| && Balkenfont \cr +|\slurfontuu| && Bogenfont (konkav, steigend) \cr +|\slurfontud| && Bogenfont (konkav, fallend) \cr +|\slurfontdu| && Bogenfont (konvex, steigend) \cr +|\slurfontdd| && Bogenfont (konvex, fallend) \cr +zus"atzlich noch: \cr +|\eightrm| && Acht-Punkt Roman Font f"ur die Textunterlage \cr +\enddisplay +Die Namen f"ur die \tex{character} im Font |\music| sind: +\begindisplay +Notenk"opfe:\cr +|\quart| (|\hex21|) && ausgef"ullter Notenkopf\cr +|\half| (|\hex22|) && unausgef"ullter Notenkopf\cr +|\whole| (|\hex23|) && ganze Note \cr +F"ahnchen:\cr +|\eighthup| (|\hex28|) && Achtel aufw"arts \cr +|\eighthdown| (|\hex2D|) && Achtel abw"arts \cr +|\sixteenthup| (|\hex29|) && Sechzehntel aufw"arts \cr +|\sixteenthdown| (|\hex2E|) && Sechzehntel abw"arts \cr +|\thirtytwoup| (|\hex2A|) && Zweiunddrei\3igstel aufw"arts \cr +|\thirtytwodown| (|\hex2F|) && Zweiunddrei\3igstel abw"arts\cr +|\sixtyfourup| (|\hex2B|) && Vierundsechzigstel aufw"arts \cr +|\sixtyfourdown| (|\hex30|) && Vierundsechzigstel abw"arts\cr +|\hundredtwentyeightup| (|\hex2C|)&& Hunderteinundzwanzigstel aufw"arts\cr +|\hundredtwentyeightdown| (|\hex31|)&& Hunderteinundzwanzigstel abw"arts\cr +Pausen: \cr +|\wholerest| (|\hex3C|) && Ganze \cr +|\halfrest| (|\hex3D|) && Halbe \cr +|\quartrest| (|\hex3E|) && Viertel \cr +|\eighthrest| (|\hex3F|) && Achtel \cr +|\sixteenthrest| (|\hex40|) && Sechzehntel \cr +Taktpausen: \cr +|\doublerest| (|\hex3A|) && zwei Takte \cr +|\ddoublerest| (|\hex3B|) && vier Takte \cr +Fermaten: \cr +|\fermateup| (|\hex50|) && Fermate oberhalb \cr +|\fermatedown| (|\hex51|) && Fermate unterhalb \cr +Versetzungszeichen: \cr +|\mflat| (|\hex32|) && b \cr +|\mdoubleflat| (|\hex33|) && Doppel-b \cr +|\mquartflat| (|\hex37|) && Viertelton-b \cr +|\mthreequartflat| (|\hex3A|) && Dreiviertelton-b \cr +|\msharp| (|\hex34|) && Kreuz \cr +|\mdoublesharp| (|\hex35|) && Doppel-Kreuz \cr +|\mnatural| (|\hex36|) && Aufl"osungszeichen \cr +Notenschl"ussel: \cr +|\mviolin| (|\hex47|) && Violinschl"ussel \cr +%|\mviolinoct| (|\hex47|) && \cr +%|\mviolinOct| (|\hex47|) && \cr +|\mbass| (|\hex49|) && Ba\3schl"ussel \cr +%|\mbassoct| (|\hex49|) && \cr +%|\mbassOct| (|\hex49|) && \cr +|\mbariton| (|\hex4D|) && Baritonschl"ussel \cr +|\mtenor| (|\hex4C|) && Tenorschl"ussel \cr +|\malt| (|\hex4B|) && Altschl"ussel \cr +|\mmezzosopran| (|\hex4E|) && Mezzosopranschl"ussel \cr +|\msopran| (|\hex4E|) && Sopranschl"ussel \cr +Taktangaben: \cr +|\mC| (|\hex53|) \cr +|\allabreve| (|\hex52|)\cr +|\mCreverse| (|\hex54|)\cr +\enddisplay +"Anderbare Parameter sind: +\begindisplay +|\textline| && Abstand der Schriftlinie von der untersten Notenlinie\cr +|\minsl| && minimale Notenhalsl"ange (bei Verbalkung) \cr +|\overtext| && Schriftlinie oberhalb des Liniensystems \cr +|\undertext| && Schriftline unterhalb des Liniensystems \cr +\enddisplay +Ausschlu\3parameter nach den Noten: +\begindisplay +|\NOTEskip| && Glue nach ganzer Note \cr +|\Noteskip| && Glue nach halber Note \cr +|\noteskip| && Glue nach 1/4 Note \cr +|\notEskip| && Glue nach 1/8 Note \cr +|\noTEskip| && Glue nach 1/16 Note \cr +|\nOTEskip| && Glue nach 1/32 Note \cr +|\nOteskip| && Glue nach 1/64 Note \cr +|\nOtEskip| && Glue nach 1/128 Note \cr +|\ruleskip| && Glue nach Rules \cr +|\hunkskip| && Glue vor Noten und Rules \cr +\enddisplay +Nachfolgend sind die z.Zt. verf"ugbaren Ausschlu\3schemata angef"uhrt: +\begindisplay +|\ruleskip = \nhw plus \seminhw minus \seminhw| \cr +\cr +|\def\hsmall{%hader| \cr +|\Noteskip 3\nhw plus 2\seminhw minus 2\seminhw| \cr +|\NOTEskip = \Noteskip| \cr +|\noteskip 2\nhw plus 1.5\seminhw minus 1.5\seminhw| \cr +|\notEskip 1\nhw plus \seminhw minus \seminhw| \cr +|\noTEskip \z@ plus 0.5\seminhw minus \z@| \cr +|\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip| \cr +|\hunkskip \z@\relax}| \cr +\cr +|\def\small{%| \cr +|\Noteskip 3.5\nhw plus 1.8\seminhw minus 1.8\seminhw| \cr +|\NOTEskip = \Noteskip| \cr +|\noteskip 2.5\nhw plus 1.4\seminhw minus 1.4\seminhw| \cr +|\notEskip 1.5\nhw plus \seminhw minus \seminhw| \cr +|\noTEskip \seminhw plus 0.6\seminhw minus 0.6\seminhw| \cr +|\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip| \cr +|\hunkskip \z@ \relax}| \cr +\cr +|\def\universal{%| \cr +|\Noteskip 4\nhw plus 1.6\nhw minus 1.6\nhw| \cr +|\NOTEskip = \Noteskip| \cr +|\noteskip 3\nhw plus 1.3\nhw minus 1.3\nhw| \cr +|\notEskip 2\nhw plus \nhw minus \nhw| \cr +|\noTEskip \nhw plus 0.6\nhw minus 0.6\nhw| \cr +|\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip| \cr +|\hunkskip \z@ \relax}| \cr +\cr +|\def\wide{%| \cr +|\Noteskip 4\nhw plus 1.42\nhw minus 1.42\nhw| \cr +|\NOTEskip = \Noteskip| \cr +|\noteskip 3.5\nhw plus 1.28\nhw minus 1.28\nhw| \cr +|\notEskip 2.5\nhw plus \nhw minus \nhw| \cr +|\noTEskip 1.5\nhw plus 0.9\nhw minus 0.9\nhw| \cr +|\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip| \cr +|\hunkskip \z@ \relax}| \cr +\cr +|\def\loose{%| \cr +|\Noteskip 5\nhw plus 1.5\nhw minus 1.5\nhw| \cr +|\NOTEskip = \Noteskip| \cr +|\noteskip 4\nhw plus 1.25\nhw minus 1.25\nhw| \cr +|\notEskip 3\nhw plus \nhw minus \nhw| \cr +|\noTEskip 2\nhw plus 0.75\nhw minus 0.75\nhw| \cr +|\nOTEskip=\noTEskip \nOteskip=\noTEskip \nOtEskip=\noTEskip| \cr +|\hunkskip \z@\relax}| \cr +\enddisplay +Baselineskip-Macros: +\begindisplay +|\baselinesa| && f"ur Einzeilige Notenbespiele \cr +|\baselinesb| && f"ur Musikst"ucke \cr +\enddisplay +Default ist: |\let\baselines = \baselinesb| + +\bigskip +\goodbreak +Makros f"ur die Noteneingabe: + +Zun"achst die Noten und Pausen und Versetzungszeichen: +\begindisplay +Notennamen:\cr +|\g{|\|}| && ganze Note \cr +|\h{|\|}| && halbe Note \cr +|\v{|\|}| && viertel Note \cr +|\a{|\|}| && achtel Note \cr +|\s{|\|}| && sechzehntel Note \cr +|\z{|\|}| && zweiunddrei\3igstel Note \cr +|\d{|\|}| && vierundsechzigstel Note \cr +|\o{|\|}| && hundertachtundzwanzigstel Note \cr +Versetzungszeichen:\cr +|\x{|\|}| && Kreuz \cr +|\xx{|\|}| && Doppelkreuz \cr +|\n{|\|}| && Aufl"osungszeichen \cr +|\b{|\|}| && Be \cr +|\bb{|\|}| && Doppel-Be \cr +Versetzungszeichen in der Vorzeichnung:\cr +|\b@{|\|}| && Be \cr +|\x@{|\|}| && Kreuz \cr +|\n@{|\|}| && Aufl"osungszeichen \cr +\enddisplay +Pausen erhalten als interne Tonh"ohe |\pitch=5| +zum Setzen der Wertpunkte im 3. Zwischenraum: +\begindisplay +|\pg| && ganze Pause \cr +|\dpd| && Zwei Pausentakte \cr +|\dpg| && drei Pausentakte \cr +|\dpdd| && vier Pausentakte \cr +|\ph| && halbe Pause \cr +|\pv| && viertel Pause \cr +|\pa| && achtel Pause \cr +|\ps| && sechzehntel Pause \cr +|\pz| && zweiunddrei\3igstel Pause \cr +|\pd| && vierundsechzigstel Pause \cr +|\po| && hundertachtundzwanzigstel Pause \cr +Wertpunkte: \cr +|\.{|\|}| \cr +Taktstriche:\cr +|\|\vrt && normaler Taktstrich \cr +|\=| && Schlu\3strich \cr +|\doublebarline| && doppelter Taktstrich \cr +|\rightrepeat| && Wiederholungszeichen rechts :\vrt\vrt \cr +|\leftrepeat| && Wiederholungszeichen links \vrt\vrt: \cr +|\leftrightrepeat| && doppeltes Wiederholungszeichen :\vrt\vrt: \cr +Makro f"ur Orientierungszeichen:\cr +|\boxed{|\|}| \cr +K"asten: \cr +|\1|\|\2|\|\*|\cr +Atemzeichen:\cr +|\caesura|\cr +Akzentzeichen:\cr +|\noaccent| && Akzente l"oschen \cr +|\stac| && Stakkatozeichen \cr +|\dec| && kleines $>$ am Notenkopf \cr +|\staccatissimo| && Stakkatissimozeichen \cr +|\tr| && Triller {\it tr} \cr +|\trbrack| && Triller in Klammern ({\it tr}) \cr +|\tenuto| && Tenutozeichen \cr +|\plus| && Triller $+$ \cr +|\cresc{|\|}| && Crescendozeichen $<$ "uber Noten\cr +|\decresc{|\|}| && Decrescendozeichen $>$ "uber Noten\cr +Abk"urzungen f"ur Akzente:\cr +|\cantusfirmus| && {\it c.f.} \cr +|\crescendo| && {\it cresc.} \cr +|\dacapo| && {\it d.c.} \cr +|\dalsegno| && {\it d.s.} \cr +|\decrescendo| && {\it decresc.} \cr +|\diminuendo| && {\it dim.} \cr +|\fine| && {\it fine} \cr +|\forte| && {\it f} \cr +|\fortissimo| && {\it ff} \cr +|\fortissimoposs| && {\it fff} \cr +|\fortepiano| && {\it fp} \cr +|\forzato| && {\it fz} \cr +|\mezzoforte| && {\it mf} \cr +|\mezzopiano| && {\it mp} \cr +|\piano| && {\it p} \cr +|\pianissimo| && {\it pp} \cr +|\pianissimoposs| && {\it ppp} \cr +|\rallentando| && {\it rall.} \cr +|\rinforzando| && {\it rfz.} \cr +|\ritardando| && {\it rit.} \cr +|\ritenuto| && {\it riten.} \cr +|\sforzato| && {\it sfz} \cr +|\sforz| && {\it sf} \cr +|\staccato| && {\it stacc.} \cr +|\tacet| && {\it tacet} \cr +|\unisono| && {\it unis.} \cr +\enddisplay +\goodbreak +Balkengruppen und Bogen werden wie folgt eingegeben: + +Zun"achst mu\3 die Notengruppe eingegeben werden. Und zwar mit +\begindisplay +|\group{|\|}{|\|}|\cr +\enddisplay +Dabei mu\3 die Elementliste so aussehen:\begindisplay +|\\{|\|}|$\ldots$|\\{|\|}| +\enddisplay +Die Tonh"ohenliste sieht genauso aus. Nur muss anstatt der Note die dem +$i$-ten Element der Notenliste zugeh"orige interne Tonh"ohe eingetragen +sein. +Anschlie\3end kann die Verbalkung und die Angabe der Bogen geschehen: +\begindisplay +|\ubeam{|\|}{|\|}| && Balken an +aufw"arts gestielten Noten \cr +|\lbeam{|\|}{|\|}| && Balken an +abw"arts gestielten Noten \cr +|\ubeam{|\|}{|\|}| && Bogen oberhalb der +Notengruppe \cr +|\lbeam{|\|}{|\|}| && Bogen unterhalb der +Notengruppe \cr +\enddisplay +Diese Makros k"onnen beliebig oft aufgerufen werden. Es mu\3 jedoch mit +dem Makro |\go| abgeschlossen werden. +Die Balken werden nach der jeweils aktuellen |\beamlist| gesetzt. Diese +enth"alt Informationen "uber die zu setzenden Balken einer +Teilnotengruppe. +Der Aufbau der |\beamlist| ist etwas komlizierter, aber +in der Diplomarbeit genau beschrieben. +Default ist +\begindisplay + |\def\beamlist{\\{\the\n@a-\the\n@e,}}| +\enddisplay +wobei |\n@a| das erste Element der Balkengruppe ist, und |\n@e| das +letzte. Ein Element der |\beamlist| beschreibt eine Balkenreihe, das +hei\3t, wird der Default verwendet k"onnen nur Achtel-Balken gesetzt +werden. + +Als weiteres ist noch zu erw"ahnen der zweistimmige Notensatz und die +Textunterlage. +Mit |\two{|\|}{|\|}| k"onnen Noten +"ubereinander notiert werden. +Text"uberlage bzw. Textunterlage erh"alt man mit: +\begindisplay +|\^|$\lbrack$\$\rbrack$% +|{|\|}{|\|}|\cr +|\_|$\lbrack$\$\rbrack$% +|{|\|}{|\|}| +\enddisplay +Als Positionierungskennzeichen kann |n| (Textbreite wird nicht +ber"ucksichtigt), |c| (Text wird "uber der Note zentriert), |l| (Text +wird linksb"undig "uber der Note unter Ber"ucksichtigung der Breite +positioniert) oder |r| (Text wird rechtsb"undig "uber der Note +positioniert) angegeben werden. +Im Falle der Textunterlage gibt es ein weiteres +Positionierungskennzeichen: |v|. In diesem Fall wird der Text variabel +direkt +unter der Noten und nicht auf der Schriftlinie positioniert. +Wird kein Positionierungskennzeichen angegeben, so wird das Zeichen +automatisch positioniert. + +Bei der Eingabe von Akkorden mu\3 zun"achst entschieden werden, ob +der Notenhals nach oben oder nach unten zeigen soll, d.h. rechts oder +links der Notenk"opfe erscheinen soll. +Die Eingabe erfolgt mit: +\begindisplay +|\rchord|\|\endchord|\cr +|\lchord|\|\endchord| +\enddisplay +Die Noten sollten in der Reihenfolge von oben nach unten eingegeben +werden. +\bigskip +Allgemeine abschlie\3ende Bemerkungen:\hfill \break +\hang Bei der Eingabe des Musikst"uckes ist zu beachten, da\3 keine +unn"otigen Leerzeichen eingegeben werden (Regeln f"ur Kontrollsequenzen +beachten!). Daher sollte jede Eingabezeile mit einem Kommentarzeichen +(\%) enden. + +\end diff --git a/macros/mtex/metafont/acc16.mf b/macros/mtex/metafont/acc16.mf new file mode 100644 index 0000000000..821f879e8a --- /dev/null +++ b/macros/mtex/metafont/acc16.mf @@ -0,0 +1,142 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% VERSETZUNGSZEICHEN % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%% +%% "flat" % +%%%%%%%%%%%% + +beginchar(50, nhw#, 2nhh#, 2nhh#); + clear; + penpos4(7/24nhh, 30);%/5,20 % 1 + penpos3(nhh/5,-90);%/5,20 % + penpos2(nhh/5, 90);%/5,20 % + y1 = h; %4 + x1 = x2 = x3 = s; x4 = w-s; % 2 + y4 = s; % + y2l - y3r = 1/4h; y2l = 0; % 3 + currentpen:= pencircle scaled 3thinwidth; + penstroke z2e...z4e...z3e{sw};%right ,sw + draw z1--z3; + draw z1--z3; +penlabels(1,2,3,4); +endchar; + +%%%%%%%%%% +%% "bb" % +%%%%%%%%%% + +beginchar(51,2nhw#, 2nhh#, 2nhh#); + clear; + penpos4(nhh/4, 0);%/5,20 + penpos3(nhh/4,-90);%/5,20 + penpos2(nhh/4, 90);%/5,20 + y1 = h; %4 + x1 = x2 = x3 = s; x4 = w/2-s; % 2 + y4 = s; % + y2l - y3r = 1/4h; y2l = 0; % 3 + currentpen:= pencircle scaled 3thinwidth; + draw z1--z3; + draw z1--z3; + penstroke z2e..z4e...z3e{sw}; + draw (z1--z3) shifted ((w/2 - 1.5s),0); + penstroke (z2e..z4e...z3e{sw})shifted ((w/2 -1.5s),0); +endchar; + +%%%%%%%%%%%%% +%% "sharp" % +%%%%%%%%%%%%% + +beginchar(52, nhw#, 1.5nhh#, 1.5nhh#); + clear; + penpos3(nhh/2,90); + penpos4(nhh/2,90); + y1 = h - s; y1 - y2 = 2h - s; + x1 = x2 = s; z3 = (0,1/4nhh); + y4l = y3r; x4 = w; + currentpen:= pencircle scaled 3thinwidth; + draw z1--z2; + draw (z1--z2) shifted (w-2s,s); + penstroke z3e--z4e; + penstroke (z3e--z4e) shifted (0, -nhh); +penlabels(1,2,3,4); +endchar; + +%%%%%%%%%% +%% "xx" % +%%%%%%%%%%% + +beginchar(53, nhw#, .5nhh#, .5nhh#); + clear; + z1 = (s, h-s); z2 = (w-s, h-s); + z3 = (s,-h+s); z4 = (w-s,-h+s); + currentpen:= pencircle scaled .2nhh; + draw z1--z4; draw z3--z2; + currentpen:= pencircle scaled .3nhh; + drawdot z1; drawdot z2; drawdot z3; drawdot z4; +endchar; + +%%%%%%%%%%%%%%% +%% "natural" % +%%%%%%%%%%%%%%% + +beginchar(54, nhw#, 1.5nhh#, 1.5nhh#); + clear; + penpos3(nhh/2,90); + penpos4(nhh/2,90); + y1 = h; y2 = -h + nhh/2; + x1 = x2 = s; z3l = (s,0); + y4 = y3r; x4 = w-s; + currentpen:= pencircle scaled 3thinwidth; + draw z1--z2; + draw (z1--z2) shifted (w-2s,-h+y4r); + penstroke z3e--z4e; + penstroke (z3e--z4e) shifted (0, -nhh); +endchar; + +%%%%%%%%%%%%%%%% +%% "1/4 flat" % +%%%%%%%%%%%%%%%% + +beginchar(55, nhw#, 2nhh#, 2nhh#); + clear; + penpos4(7/24nhh, 30);%/5,20 % 1 + penpos3(nhh/5,-90);%/5,20 % + penpos2(nhh/5, 90);%/5,20 % + y1 = h; % 4 + x1 = x2 = x3 = w-s; x4 =2w-3s; % 2 + y4 = s; % + y2l - y3r = 1/4h; y2l = 0; % 3 + currentpen:= pencircle scaled 3thinwidth; + penstroke (counterclockwise + (z2e...z4e...z3e{sw}) reflectedabout(z1 ,z3)); + draw z1--z3; + draw z1--z3; +penlabels(1,2,3,4); +endchar; + +%%%%%%%%%%%%%%%% +%% "3/4 flat" % +%%%%%%%%%%%%%%%% + +beginchar(56, 2nhw#-2S, 2nhh#, 2nhh#); + clear; + penpos4(7/24nhh, 30);%/5,20 % 1 + penpos3(nhh/5,-90);%/5,20 % + penpos2(nhh/5, 90);%/5,20 % + y1 = h; % 4 + x1 = x2 = x3 = w/2; x4 =w-s; % 2 + y4 = s; % + y2l - y3r = 1/4h; y2l = 0; % 3 + currentpen:= pencircle scaled 3thinwidth; + penstroke z2e...z4e...z3e{sw}; + penstroke (counterclockwise + (z2e...z4e...z3e{sw}) reflectedabout(z1 ,z3)); + draw z1--z3; + draw z1--z3; +penlabels(1,2,3,4); +endchar; diff --git a/macros/mtex/metafont/beam16.mf b/macros/mtex/metafont/beam16.mf new file mode 100644 index 0000000000..03239d1784 --- /dev/null +++ b/macros/mtex/metafont/beam16.mf @@ -0,0 +1,79 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BALKEN % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +font_x_height beamht#; + +def drawbeams (expr st, jj) = + save i, length, height; + numeric i, length, height; + length:= 0.5; + for i=0 upto 7: + height := length*st + beamht#; + beginchar(jj*8+i, length, height, 0); + clear; + % x2 = w; x1 = 0; + z2r = (w,h); + z1l = origin; + penpos1(beamht,90); + penpos2(beamht,90); + penstroke z1e---z2e; + endchar; + length := 2*length; + endfor; +enddef; + +def drawbeamsneg (expr st, jj) = + save i, length, depth; + numeric i, length, depth; + length:= 0.5; + for i=0 upto 7: + depth := length*st - beamht#; + beginchar(jj*8+i, length, 0, depth); + clear; + z2l = (w,d); + z1r = origin; + penpos1(beamht,90); + penpos2(beamht,90); + penstroke z1e---z2e; + endchar; + length := 2*length; + endfor; +enddef; + +numeric ss[]; + +ss[0]:=0.05; +ss[1]:=0.10; +ss[2]:=0.15; +ss[3]:=0.20; +ss[4]:=0.25; +ss[5]:=0.30; +ss[6]:=0.35; +ss[7]:=0.45; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Balken mit positiver Steigung % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +for j=0 upto 7 : +drawbeams(ss[j],j); +endfor; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Balken mit negativer Steigung % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +for j=0 upto 7 : +drawbeamsneg(-ss[j],j+8); +endfor; + +end; + diff --git a/macros/mtex/metafont/music16.mf b/macros/mtex/metafont/music16.mf new file mode 100644 index 0000000000..9565133273 --- /dev/null +++ b/macros/mtex/metafont/music16.mf @@ -0,0 +1,12 @@ +input musicdef +font_x_height nhh#; +font_quad nhw#; +font_normal_space 0pt; +font_normal_stretch 0pt; +font_normal_shrink 0pt; +input noten16 +input acc16 +input pause16 +input vio16 +input sonder16 +end diff --git a/macros/mtex/metafont/musicdef.mf b/macros/mtex/metafont/musicdef.mf new file mode 100644 index 0000000000..fbbef58249 --- /dev/null +++ b/macros/mtex/metafont/musicdef.mf @@ -0,0 +1,71 @@ +% this is musicdef.mf +% +% +% hier evtl. mode fuer gewuenschten output setzen +% +% AGFA P400 mode: for devices that print 406 pixels per inch +% mode_def agfa = +% proofing:=0; +% fontmaking:=1; +% tracingtitles:=0; +% pixels_per_inch:=406; +% blacker:=0.65; +% fillin:=0; +% o_correction:=1; +% enddef; +% localfont:=agfa; +% mode:=agfa; +% +% low resolution music fonts are not very nice - but you need something... + mode_def atari = + proofing:=0; + fontmaking:=1; + tracingtitles:=0; + pixels_per_inch:=96; + blacker:=1.0; + fillin:=0; + o_correction:=1; + enddef; + localfont:=atari; + mode:=atari; + mode_setup; +% +% +%mode_def ibm = % ibm mode: for the IBM3820 +% proofing:=0; % no, we're not making proofs +% fontmaking:=1; % yes, we are making a font +% tracingtitles:=0; % no, don't show titles in the log +% pixels_per_inch:=240; +% blacker:=.78; % (this value is conjectural) +% fillin:=0.25; % (ditto) +% o_correction:=.5; % (ditto) +% enddef; +% +fontmaking:=1; +turningcheck:=0; +displaying:=1; +designsize:=16; +nhh#:=1/4designsize; %noteheadheight +nhw#:=1.2nhh#; %noteheadwidth +beamht#:=0.6nhh#; %Balkenst"arke +nhh:=nhh#*pt; %noteheadheight *pt +nhw:=nhw#*pt; %noteheadwidth *pt +thinwidth := 0.1pt; +beamht := beamht#*pt; +s := 10thinwidth; +S := 1/16designsize; +%pair constants +pair ne,se,sw,nw; %northeast,southeast,southwest,northwest +ne = up+right; se = down+right; sw = down+left; nw = up+left; +openit; +def clear = + numeric x[],y[],x[]l,y[]l,x[]r,y[]r,dx[],dy[]; + pair sh[]; +enddef; +% +pickup pencircle scaled (0.1pt); +def penstrike text t = + forsuffixes e = l,r: path_.e:=t; endfor + if cycle path_.l: cyclestroke_ + else: filldraw path_.l -- reverse path_.r -- cycle fi enddef; +% diff --git a/macros/mtex/metafont/noten16.mf b/macros/mtex/metafont/noten16.mf new file mode 100644 index 0000000000..6aff8ab739 --- /dev/null +++ b/macros/mtex/metafont/noten16.mf @@ -0,0 +1,292 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% NOTENKOEPFE UND FAEHNCHEN % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% +% +%%%%%%%%%%%%%%% +%%notenkoepfe % +%%%%%%%%%%%%%%% +% +% +% +% +def drawnoteb(expr noteheadwidth, theta_a, theta_b, theta_c, +width_a, width_b) = + % .l + penpos1(width_a, theta_a); % .2 + % .r + penpos3(width_a, 180+theta_a); %.l.1.r .r.3.l + % .r + penpos2(width_b, 180+theta_b); % .4 + % .l + penpos4(width_b, theta_b); % + y1 = y3 = 0; + x2 = x4 = 1/2noteheadwidth; + x1l= 0; x3l = w; y2l = h; y4l = -h; + penstroke (z1e{up}..z2e{right}..z3e{down}..z4e{left}..cycle) + rotatedaround((origin +1/2w*right),theta_c); + enddef; +% +% +%%%%%%%%%%%%%%% +%% flags % +%%%%%%%%%%%%%%% +% +% +% +pickup pencircle scaled (0.1pt); +def penstrike text t = + forsuffixes e = l,r: path_.e:=t; endfor + if cycle path_.l: cyclestroke_ + else: filldraw path_.l -- reverse path_.r -- cycle fi enddef; +def flagshape (suffix i) (expr width, height, thicka, thin, shift) = + pair intersectionp; % + thick := 1/3 height; + sh[-3] = origin; + sh[i] = shift; % .1 + penpos[i](thick,90); % + penpos[i+1]( 3thin ,90); % .2 + penpos[i+2](thin,0); % + penpos[i+3](thin,0); % .3 + x[i] = -1/16mm; % + y[i]r = height; % .4 + x[i+1] = 3/8width; % + y[i+1] = height - thick; % + y[i+3] = 0; + x[i+2]r = x[i+3]+2s= width; + y[i+2]r = height - 2thick; + if i>1: intersectionp = z[i-2]; + else : intersectionp = z[i+3]; + fi; + penstrike (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)} + ..z[i+1]e{z[i+1]e-z[i]e} + ..z[i+2]e{down}..intersectionp shifted (sh[i-4]-sh[i])) + shifted sh[i]; + for n=0 upto 3: + k:=i+n; + penlabels(k);endfor; + enddef; + +%def flagshaper (suffix i) (expr width, height, thicka, thin, shift) = +% pair intersectionp; % +% thick := 1/3 height; +% sh[-3] := origin+shift; +% sh[i] = shift; % .1 +% penpos[i](thick,90); % +% penpos[i+1]( 3thin ,90); % .2 +% penpos[i+2](thin,0); % +% penpos[i+3](thin,0); % .3 +% x[i] = 0; % +% y[i]r = height; % .4 +% x[i+1] = 3/8width; % +% y[i+1] = height - thick; % +% y[i+3] = 0; +% x[i+2]r = x[i+3]+2s= width; +% y[i+2]r = height - 2thick; +% if i>1: intersectionp = z[i-2]; +% else : intersectionp = z[i+3]; +% fi; +% penstroke (counterclockwise +% (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)} +% ..z[i+1]e{z[i+1]e-z[i]e} +% ..z[i+2]e{down}..intersectionp shifted (-sh[i-4]+sh[i])) +% reflectedabout (z1r scaled 0.5, +% z1r scaled 0.5+right) ) +% shifted sh[i]; +% for n=0 upto 3: +% k:=i+n; +% penlabels(k);endfor; +% enddef; + +def flagshaper (suffix i) (expr width, height, thicka, thin, shift) = + pair intersectionp; % + thick := 1/3 height; + sh[-3] := origin+shift; + sh[i] = shift; % .1 + penpos[i](thick,90); % + penpos[i+1]( 3thin ,90); % .2 + penpos[i+2](thin,0); % + penpos[i+3](thin,0); % .3 + x[i] = 0; % + y[i]r = height; % .4 + x[i+1] = 3/8width; % + y[i+1] = height - thick; % + y[i+3] = 0; + x[i+2]r = x[i+3]+2s= width; + y[i+2]r = height - 2thick; + if i>1: intersectionp = z[i-2]; + else : intersectionp = z[i+3]; + fi; + penstrike (counterclockwise + (z[i]e{dir(angle(z[i+1]e-z[i]e)-15)} + ..z[i+1]e{z[i+1]e-z[i]e} + ..z[i+2]e{down}..intersectionp shifted (-sh[i-4]+sh[i])) + reflectedabout (z1r scaled 0.5, + z1r scaled 0.5+right) ) + shifted sh[i]; + enddef; + + +%%%%%%%%%%%%%%% +%% volle Note % +%%%%%%%%%%%%%%% + +beginchar(33, nhw#, .5nhh#, .5nhh#); + w:=w+2thinwidth; + drawnoteb(w, 0, 90, 20, w/2, nhh/2); +endchar; + +%%%%%%%%%%%%%%% +%% halbe Note % +%%%%%%%%%%%%%%% + +beginchar(34, nhw#, .5nhh#, .5nhh#); + w:=w+2thinwidth; + drawnoteb(w, 0, 90, 20, 3*thinwidth, nhh/4); +endchar; + +%%%%%%%%%%%%%%% +%% ganze Note % +%%%%%%%%%%%%%%% + +beginchar (35,1.5nhh#, .5nhh#, .5nhh#); + drawnoteb(w, 0, 85, 0, nhh/3, 3*thinwidth); +endchar; + +%%%%%%%%%%%%%%%%%%%%%%% +%% "8flag nach unten" % +%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(40, 0, 3nhh#, 0); + clear; + w:=nhw; + flagshape (1,w, h, nhh, 5thinwidth, origin); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%% +%% "16flag nach unten" % +%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(41, 0, 3.25nhh#, 0); + clear; + w:=nhw; + flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin); + flagshape (5,.95 w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh)); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%% +%% "32flag nach unten" % +%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(42, 0, 3.75 nhh#, 0); + clear; + w:=nhw; + flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin); + flagshape (5, .95w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh)); + flagshape (9, .9w, 2 nhh, 2/3nhh, 5thinwidth, (0,1.75nhh)); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%% +%% "64flag nach unten" % +%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(43, 0, 4.25nhh#, 0); + clear; + w:=nhw; + flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin); + flagshape (5,.95 w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,nhh)); + flagshape (9,.9w, 2 nhh, 2/3nhh, 5thinwidth, (0,1.75nhh)); + flagshape(13,0.85w, 2nhh, 2/3nhh, 5thinwidth, (0,2.25nhh)); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%%% +%% "128flag nach unten" % +%%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(44, 0, 4.5nhh#, 0); + clear; + w:=nhw; + flagshape (1, w, 2.5nhh, 2/3nhh, 5thinwidth, origin); + flagshape (5, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,nhh)); + flagshape (9, w, 2 nhh, 2/3nhh, 5thinwidth, (0,1.75nhh)); + flagshape(13,0.9 w, 2nhh, 2/3nhh, 5thinwidth, (0,2.25nhh)); + flagshape(17,0.9 w, 1.5nhh, 1/3nhh, 5thinwidth, (0,3nhh)); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%% +%% "8flag nach oben" % +%%%%%%%%%%%%%%%%%%%%%% + +beginchar(45, 0, 3nhh#, 0); + clear; + w:=nhw; + flagshaper(1,w, h, nhh, 5thinwidth, origin); + penlabels(1,2,3,4); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%% +%% "16flag nach oben" % +%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(46, 0, 3.25nhh#, 0); + clear; + w:=nhw; + flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,0.75nhh)); + flagshaper(5, w, 2.25 nhh, 2/3nhh, 5thinwidth,(0,-0.25nhh)); + penlabels(1,2,3,4,5,6,7,8); + w:=0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%% +%% "32flag nach oben" % +%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(47, 0, 3.75 nhh#, 0); + clear; + w:=nhw; + flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,1.5nhh)); + flagshaper(5, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,0.75nhh)); + flagshaper(9, .95w, 2.25 nhh, 2/3nhh, 5thinwidth, origin); + penlabels(1,2,3,4,5,6,7,8,9,10,11,12); + w := 0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%% +%% "64flag nach oben" % +%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(48, 0, 4.25nhh#, 0); + clear; + w:=nhw; + flagshaper(1, w, 2.5nhh, 2/3nhh, 5thinwidth, (0,1.75nhh)); + flagshaper(5, w, 2.25 nhh, 2/3nhh, 5thinwidth, (0,1nhh)); + flagshaper(9,w, 2 nhh, 2/3nhh, 5thinwidth, (0,0.34nhh)); + flagshaper(13,0.9w, 2nhh, 2/3nhh, 5thinwidth, (0,-0.32nhh)); + penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); + w := 0; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%% +%% "128flag nach oben" % +%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(49, 0, 4.5nhh#, 0); + clear; + w:=nhw; + flagshaper (1, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,2.5nhh)); + flagshaper (5, w, 2.25nhh, 2/3nhh, 5thinwidth, (0,1.75nhh)); + flagshaper (9, w, 2 nhh, 2/3nhh, 5thinwidth, (0,1nhh)); + flagshaper(13,0.9 w, 2nhh, 2/3nhh, 5thinwidth, (0,0.5nhh)); + flagshaper(17,0.9 w, 2nhh, 1/3nhh, 5thinwidth, (0,0nhh)); + w := 0; +endchar; diff --git a/macros/mtex/metafont/pause16.mf b/macros/mtex/metafont/pause16.mf new file mode 100644 index 0000000000..7ebbf449f9 --- /dev/null +++ b/macros/mtex/metafont/pause16.mf @@ -0,0 +1,184 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PAUSEN % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + +%%%%%%%%% +%% "dp" % +%%%%%%%%% + +beginchar(58,1/2nhw#, 3nhh#, 0); + clear; + penpos1(nhh,90); + penpos2(nhh,90); + y1r = y2r = h; + x1r = 0; x2r = w; + currentpen:= pencircle; + penstroke z1e--z2e; +labels(1,2); +endchar; + +%%%%%%%%%% +%% "ddp" % +%%%%%%%%%% + +beginchar(59,1/2nhw#, 3nhh#, 0); + clear; + penpos1(2nhh,90); + penpos2(2nhh,90); + y1r = y2r = h; + x1r = 0; x2r = w; + currentpen:= pencircle; + penstroke z1e--z2e; +labels(1,2); +endchar; + +%%%%%%%%%%%%%%%%%% +%% "ganze Pause" % +%%%%%%%%%%%%%%%%%% + +beginchar(60, nhw#, 3nhh#, 0); + clear; + penpos1(nhh/2,90); + penpos2(nhh/2,90); + y1r = y2r = h; + x1r = 0; x2r = w; + currentpen:= pencircle; + penstroke z1e--z2e; +endchar; +%charwd:=4.5; chardx:=charwd*pt; chardp:=0; charht:=4; + +%%%%%%%%%%%%%%%%%% +%% "halbe Pause" % +%%%%%%%%%%%%%%%%%% + +beginchar(61, nhw#, 2.5nhh#, 0); + clear; + penpos1(nhh/2,90); + penpos2(nhh/2,90); + y1r = y2r = h; + x1r = 0; x2r = w; + currentpen:= pencircle; + penstroke z1e--z2e; +endchar; + +%%%%%%%%%%%%%%%%%%%% +%% "viertel Pause" % +%%%%%%%%%%%%%%%%%%%% + +beginchar(62, nhw#, 4nhh#, 0); % .1 + clear; % .2 + thin := 5 thinwidth; thick := 1/2 nhh; % 8..3 + alpha_a = -50; alpha_b = -50; % .4 + penpos1 ( thin, (alpha_a+90)); % .5 + penpos5 ( thin, (alpha_b)); % .6 + penpos2 ( thick, alpha_a ); % + penpos4 ( thick, alpha_b ); % .7 + penpos3 ( thick, 1/2(alpha_a+alpha_b)); + x3r:=9/10[x3,x3r]; + penpos8 ( thick, 1/2(alpha_a+alpha_b)); + x8l:=9/10[x8,x8l]; + penpos6 ( 1/2thick, (alpha_b+10)); + penpos7 ( 1/4thick,-20); + y1l = h - 2s; + x1l = 2s; + z2r = z1 +(nhh* right) rotated alpha_a; + z5 = z4l+(nhh* right) rotated alpha_b; + z3 = 1/3[z2,z4]; + z8 = 2/3[z2,z4]; +% z3 = 1/2[z2r,z4]; + z4 = (w,h) scaled .5; + y6r = 1.5nhh; + x6l = x4l; + x7 = w/2; y7r= nhh; + currentpen:= pencircle scaled thin; + draw z1--z2r; draw z5--z4l; + penstroke z2e..z3e..z8e..z4e; + penstroke z5e{nw}..z6e{z7-z6}..z7e; +endchar; +%%title "viertelpause"; % +%beginchar(62, nhw#, 4nhh#, 0); % .1 +% clear; % .2 +% thin := 5 thinwidth; thick := 1/2 nhh; % 8..3 +% alpha_a = -50; alpha_b = -50; % .4 +%% penpos4(thick,-45); +% z1 = (s,h-s); +% z3 = (w,nhh); +% z2-z3=(h/2-s)*up; +% z1-z6=(h/2-2s)*up; +% z4r = 1/3z1; +% z4l = (w/2,nhh);% z2 = (w-s,h-nhh-s); +% % 1[z2,z4r]=1/3(w,h); +% z5 = 1/2(w,nhh); +% currentpen:= pencircle scaled thin;%4 +% draw z1--z2; draw z6--z3; +% filldraw z1--z2..control1/3[-z2,z4r] +% %-(w/2,h/2))} +% ..z3--z6..control1/4[-z6,z2] +% %(w/2,h-nhh))} +% ..z1--cycle; +% filldraw z3...z4r...z5--z5..z4l..z3..cycle; +%penlabels(1,2,3,4,5,6); +%endchar; +%end; + +%%%%%%%%%%%%%%%%%%% +%% "achtel Pause" % +%%%%%%%%%%%%%%%%%%% + +beginchar(63, 2nhh#, 3nhh#, 0) +clear; + %punkte f"ur achtelpause, 16. und 32. Pause + x1=y1= nhh; x2=x6=7/4nhh; y2=11/4nhh; + x3=x4=x5=1/2nhh; y3=10/4nhh; + y4=3nhh; y5=0; y6=15/4nhh; + currentpen := pencircle scaled 2thinwidth; + draw z1..z2; + currentpen := pensquare rotated45 scaled(sqrt2*thinwidth); + draw z2..z3{up+left}; + fill z3..z4..z3..cycle; +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%% +%% "sechzehntel Pause" % +%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(64,2nhh#, 3nhh#, 0) + clear; + %punkte f"ur achtelpause, 16. und 32. Pause + x1=y1= nhh; x2=x6=7/4nhh; y2=11/4nhh; + x3=x4=x5=1/2nhh; y3=10/4nhh; + y4=3nhh; y5=0; y6=15/4nhh; + currentpen := pencircle scaled 2thinwidth; + draw z5..z2; + currentpen := pensquare rotated45 scaled(sqrt2*thinwidth); + draw z2..z3{up+left}; + draw z2..z3{up+left} shifted(-1/2nhh,-nhh); + fill z3..z4..z3..cycle; + fill z3..z4..z3..cycle shifted (-1/2nhh,-nhh); +endchar; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% "zweiunddreissigstel Pause" % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +beginchar(65,2nhh#, 4nhh#, 0) + clear; + %punkte f"ur achtelpause, 16. und 32. Pause + x1=y1= nhh; x2=x6=7/4nhh; + y2=11/4nhh; x3=x4=x5=1/2nhh; y3=10/4nhh; + y4=3nhh; y5=0; y6=15/4nhh; + currentpen := pencircle scaled 2thinwidth; + draw z5..z6; + currentpen := pensquare rotated45 scaled(sqrt2*thinwidth); + draw z2..z3{up+left} shifted( 0,nhh); + draw z2..z3{up+left} shifted(-1/4nhh, 0); + draw z2..z3{up+left} shifted(-2/3nhh,-nhh); + fill z3..z4..z3..cycle shifted ( 0, nhh); + fill z3..z4..z3..cycle shifted (-1/4nhh, 0); + fill z3..z4..z3..cycle shifted (-2/3nhh,-nhh); +endchar; diff --git a/macros/mtex/metafont/slur16.mf b/macros/mtex/metafont/slur16.mf new file mode 100644 index 0000000000..1ce0c194ae --- /dev/null +++ b/macros/mtex/metafont/slur16.mf @@ -0,0 +1,229 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BOGEN UND (DE)CRESCENDO % +% % +% (Phrasierungsbogen und Bogen der Steigung 0) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +def drawslurs (expr st) = + save i, factor, length, height; + numeric i, absp, length, height, factor; + factor:= 1/6; + for i= 0 upto 15: + length := (i+2)*nhw#; + height := 0 ; + + beginchar(i, length, height, 0); + clear; + z2r = (w,h); + z1l = origin; + absp := abs((-h,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2l+factor*(-h,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); + % currentpen := pencircle xscaled thinwidth yscaled beamht ; + pickup pencircle scaled (1/16mm + blacker); + penstroke z1e..z3e..z2e; %statt dir 30 + endchar; + endfor; +enddef; + +def drawslursneg (expr st) = + save i, factor, length, depth; + numeric i, absp, length, depth, factor; + factor:= 1/6; + for i=0 upto 15: + length := (i+2)*nhw#; + depth := length*st ; + + beginchar(16+i, length, 0, depth); + clear; + z2l = (w,-d); + z1r = origin; + absp := abs((d,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2l+factor*(d,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); +% currentpen := pencircle xscaled thinwidth yscaled beamht ; + pickup pencircle scaled (1/16mm + blacker); + penstroke (z1e..z3e..z2e) rotatedaround(1/2z2r, 180); + endchar; + endfor; +enddef; + +def drawleftslur = + save i, length, height; + numeric i, length, height; + length := 9*nhw#; + for i = 1 upto 9: + height := (i+2)*1/2nhh# ; + beginchar(i-1+32, length, height, 0); + clear; + z2r = (w+4thinwidth,h); + z1l = origin; + penpos1(thinwidth,90); + penpos2(5/12beamht,90); +% currentpen := pencircle xscaled thinwidth yscaled beamht ; + pickup pencircle scaled (1/16mm + blacker); + penstroke z1e..z2e{(2w,0)}; %statt dir 30 + endchar; + endfor; +enddef; + +def drawrightslur = + save i, length, height; + numeric i, length, height; + length := 9*nhw#; + for i= 1 upto 9: + height := (i+2)*1/2nhh#; + beginchar(i-1+48, length, height, 0); + clear; + z1r = (0-4\thinwidth,h); + z2l = (w,0); + penpos2(thinwidth,90); + penpos1(5/12beamht,90); +% currentpen := pencircle xscaled thinwidth yscaled beamht ; + pickup pencircle scaled (1/16mm + blacker); + penstroke z1e{right}..z2e; %statt dir 30 + endchar; + endfor; +enddef; + +def drawleftslurneg = + save i, length, depth; + numeric i, length, depth; + length := 9*nhw#; + for i= 1 upto 9: + depth := (i+2)*1/2nhh# ; + beginchar(i-1+64, length, 0, depth); + clear; + z2l = (w+4thinwidth,-d); + z1r = origin; + penpos1(thinwidth,90); + penpos2(5/12beamht,90); + pickup pencircle scaled (1/16mm + blacker); + % currentpen := pencircle xscaled thinwidth yscaled beamht ; + penstroke z1e..z2e{(2w,0)}; %statt dir 30 + endchar; + endfor; +enddef; + +def drawrightslurneg = + save i, length, depth; + numeric i, length, depth; + length := 9*nhw#; + for i= 1 upto 9: + depth := (i+2)*1/2nhh#; + + beginchar(i-1+80, length, 0, depth); + clear; + z1l = (0-4\thinwidth,-d); + z2r = (w,0); + penpos2(thinwidth,90); + penpos1(5/12beamht,90); +% currentpen := pencircle xscaled thinwidth yscaled beamht ; + pickup pencircle scaled (1/16mm + blacker); + penstroke z1e{right}..z2e; %statt dir 30 + endchar; + endfor; +enddef; + +%decrescendo und cresc. +def drawcrescendo = + save i, height, length, depth; + numeric i, length, height, depth; + for i= 0 upto 15: + length := (i+1)*nhw#; + depth := 1/2nhh# ; + height := depth ; + + beginchar(i+96, length, height, depth); + clear; + z1 = origin; + z2l = (w,h); + z3r = (w,-d); + penpos2(1/16mm,90); + penpos1(1/16mm,90); + penpos3(1/16mm,90); + pickup pencircle scaled (blacker); + penstrike z1e--z2e; + penstrike z1e--z3e; + endchar; + endfor; +enddef; + +def drawdecrescendo = + save i, height, length, depth; + numeric i, length, height, depth; + for i= 0 upto 15: + length := (i+1)*nhw#; + depth := 1/2nhh# ; + height := depth ; + + beginchar(i+112, length, height, depth); + clear; + z1l = (0,h); + z2 = (w,0); + z3r = (0,-d); + penpos2(1/16mm,90); + penpos1(1/16mm,90); + penpos3(1/16mm,90); + pickup pencircle scaled (blacker); + penstrike z3e---z2e; + penstrike z1e---z2e; +%label(1,2,3); + endchar; + endfor; +enddef; + +%%%%%%%%%%%%%%%%%%% +% Bogen nach oben % +%%%%%%%%%%%%%%%%%%% + +drawslurs(0); + +%%%%%%%%%%%%%%%%%%%% +% Bogen nach unten % +%%%%%%%%%%%%%%%%%%%% + +drawslursneg(0); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% linge Halbboegen nach oben % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +drawleftslur; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% rechte Halbboegen nach oben % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +drawrightslur; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% linke Halbboegen nach unten % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +drawleftslurneg; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% rechte Halbboegen nach unten % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +drawrightslurneg; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Crescendo und Decrescendo % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +drawcrescendo; +drawdecrescendo; + + +end; diff --git a/macros/mtex/metafont/slurdd16.mf b/macros/mtex/metafont/slurdd16.mf new file mode 100644 index 0000000000..fd5712c57c --- /dev/null +++ b/macros/mtex/metafont/slurdd16.mf @@ -0,0 +1,41 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BOGEN (KONKAV) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +def drawslursneg (expr i, j) = + save jj, factor, length, depth; + numeric jj, absp, length, depth, factor; + factor:= 1/6; + length := j*nhw#; + depth := i*1/2nhh#; + if j<4 : jj := (j*(j-1)+(i-1))*8 + else: jj := (i-1)*8+(j mod 2)*64+floor((j-2)/2);fi; + beginchar(jj, length, 0, depth); + clear; + z2r = (w,-d); + z1l = origin; + absp := abs((d,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2r+factor*(d,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); + currentpen := pencircle xscaled thinwidth yscaled beamht ; + penstroke (z1e..z3e..z2e) rotatedaround (1/2z2r,180); + endchar; +enddef; + +%%%%%%%%%%%%%%%%%%%%%%% +% negative Steigungen % +%%%%%%%%%%%%%%%%%%%%%%% + +for j= 1 upto 17: +for i= 1 upto min(2j,8): +drawslursneg(i,j); +endfor;endfor; +end; + diff --git a/macros/mtex/metafont/slurdu16.mf b/macros/mtex/metafont/slurdu16.mf new file mode 100644 index 0000000000..20282e2ca7 --- /dev/null +++ b/macros/mtex/metafont/slurdu16.mf @@ -0,0 +1,42 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BOGEN (KONVEX) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +def drawslursneg (expr i,j) = + save jj, factor, length, depth; + numeric jj, absp, length, depth, factor; + factor:= 1/6; + length := j*nhw#; + depth := i*1/2nhh#; + if j<4 : jj := (j*(j-1)+(i-1))*8 + else: jj := (i-1)*8+(j mod 2)*64+floor((j-2)/2);fi; + beginchar(jj, length, 0, depth); + clear; + % x2 = w; x1 = 0; + z2r = (w,-d); + z1l = origin; + absp := abs((d,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2r+factor*(d,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); + currentpen := pencircle xscaled thinwidth yscaled beamht ; + penstroke (z1e..z3e..z2e); + endchar; +enddef; + +%%%%%%%%%%%%%%%%%%%%%%% +% negative Steigungen % +%%%%%%%%%%%%%%%%%%%%%%% + +for j= 1 upto 17: +for i= 1 upto min(2j,8): +drawslursneg(i,j); +endfor;endfor; +end; + diff --git a/macros/mtex/metafont/slurud16.mf b/macros/mtex/metafont/slurud16.mf new file mode 100644 index 0000000000..f4028a8e96 --- /dev/null +++ b/macros/mtex/metafont/slurud16.mf @@ -0,0 +1,40 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BOGEN (KONKAV) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +def drawslurs (expr i,j) = + save jj, factor, length, height; + numeric jj, absp, length, height, factor; + factor:= 1/6; + height := i*1/2nhh#; + length := j*nhw#; + if j<4 : jj := (j*(j-1)+(i-1))*8 + else: jj := (i-1)*8+(j mod 2)*64+floor((j-2)/2);fi; + beginchar(jj, length, height, 0); + clear; + z2r = (w,h); + z1l = origin; + absp := abs((-h,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2r+factor*(-h,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); + currentpen := pencircle xscaled thinwidth yscaled beamht ; + penstroke (z1e..z3e..z2e) rotatedaround (1/2z2r,180); + endchar; +enddef; + +%%%%%%%%%%%%%%%%%%%%%%% +% positive Steigungen % +%%%%%%%%%%%%%%%%%%%%%%% + +for j= 1 upto 17: +for i= 1 upto min(2j,8): +drawslurs(i,j); +endfor;endfor; +end; diff --git a/macros/mtex/metafont/sluruu16.mf b/macros/mtex/metafont/sluruu16.mf new file mode 100644 index 0000000000..59fa5b22de --- /dev/null +++ b/macros/mtex/metafont/sluruu16.mf @@ -0,0 +1,39 @@ +input musicdef +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% BOGEN (KONVEX) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +def drawslurs(expr i,j) = + save jj,factor, length, height; + numeric jj, absp, length, height, factor; + factor:= 1/6; + height = i*1/2nhh#; + length = j*nhw#; + if j<4 : jj := (j*(j-1)+(i-1))*8 + else: jj := (i-1)*8+(j mod 2)*64+floor((j-2)/2);fi; + beginchar(jj, length, height, 0); + clear; + z2r = (w,h); + z1l = origin; + absp := abs((-h,w)); + if (factor*absp)>2nhh : factor:= 2nhh/absp fi; + z3r = 1/2z2l+factor*(-h,w); + penpos1(thinwidth,90); + penpos2(thinwidth,90); + penpos3(5/12beamht,90); + currentpen := pencircle xscaled thinwidth yscaled beamht ; + penstroke z1e..z3e..z2e; %statt dir 30 + endchar; +enddef; + +%%%%%%%%%%%%%%%%%%%%%%% +% positive Steigungen % +%%%%%%%%%%%%%%%%%%%%%%% + +for j= 1 upto 17: +for i= 1 upto min(2j,8): +drawslurs(i,j); +endfor;endfor; +end; diff --git a/macros/mtex/metafont/sonder16.mf b/macros/mtex/metafont/sonder16.mf new file mode 100644 index 0000000000..8421dee032 --- /dev/null +++ b/macros/mtex/metafont/sonder16.mf @@ -0,0 +1,112 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SONDERZEICHEN % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + + +def alla_breve (expr trans) = + thin := 5thinwidth; thick := 1/2 nhh; + penpos1(thin, 0); + penpos2(thin, -90); + penpos3(thick,180); + penpos4(2/3thin, 90); + penpos5(thin, 45); + penpos6(3/4thick,45); + 2x2r = 2x4r = x1 + 2s = w; + x3r = 0; 2y1 = 3y2 = y4r = h; + y3r = 2/3h; + x5 = w -2s; + y5 = h -2s; + z6r = z5r; + penstroke (z1e..z2e..z3e..z4e..z5e) transformed trans; + currentpen := pencircle scaled (2/3thick); + drawdot z6; +enddef; + + +%%%%%%%%%%%%%%%% +% "allabreve" %% +%%%%%%%%%%%%%%%% + +beginchar(82, 2nhh#, 3nhh#, 0); + clear; + alla_breve(identity); + z7 = z4 + 2/16 h *up; + z8 = z2 + 2/16 h *down; + currentpen := pencircle scaled (thin); + draw z7--z8; + +endchar; + +%%%%%%%% +% "C" %% +%%%%%%%% + +beginchar(83, 2nhh#, 3nhh#, 0); + clear; + alla_breve(identity); + +endchar; + +%%%%%%%%%%%%%%% +% "reverseC" %% +%%%%%%%%%%%%%%% + +beginchar(84, 2nhh#, 3nhh#, 0); + clear; + transform T; + xxpart T = -yypart T; xypart T = yxpart T; % T is a reflection + (w/2,0) transformed T = (w/2,0); (w/2,1) transformed T = (w/2,1); + thin := 5thinwidth; thick := 1/2 nhh; + penpos1(thin, 0); + penpos2(thin, -90); + penpos3(thick,180); + penpos4(2/3thin, 90); + penpos5(thin, 45); + penpos6(3/4thick,45); + 2x2r = 2x4r = x1 + 2s = w; + x3r = 0; 2y1 = 3y2 = y4r = h; + y3r = 2/3h; + x5 = w -2s; + y5 = h -2s; + z6r = z5r; + penstroke (counterclockwise + (z1e..z2e..z3e..z4e..z5e) transformed T); + currentpen := pencircle scaled (2/3thick); + drawdot (z6 transformed T); + +endchar; + +%%%%%%%%%%%%%%% +% "fermate1" %% +%%%%%%%%%%%%%%% + +beginchar(80, 2nhw#, 1.25nhh#, 0); + clear; + penpos2(nhh/4,90); + penpos4(nhh/4,90); + y2r = h; + z1 = origin; 2x2l = 2x4l = x3 = w; y4l = y3 = 0; + penstroke z1..z2e..z3; + currentpen:= pencircle scaled (nhh/4); + drawdot z4; +endchar; + +%%%%%%%%%%%%%%% +% "fermate2" %% +%%%%%%%%%%%%%%% + +beginchar(81, 2nhw#, 0, 1.25nhh#); + clear; + penpos2(nhh/4,90); + penpos4(nhh/4,90); + y2l = -d; + z1 = origin; 2x2l = 2x4 = x3 = w; + y4r = y3 = 0; + penstroke (z1..z2e..z3); + currentpen := pencircle scaled (nhh/4); + drawdot z4; +endchar; diff --git a/macros/mtex/metafont/vio16.mf b/macros/mtex/metafont/vio16.mf new file mode 100644 index 0000000000..8626d6c180 --- /dev/null +++ b/macros/mtex/metafont/vio16.mf @@ -0,0 +1,195 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% NOTENSCHLUESSEL % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%% +% VIOLINSCHLUESSEL % +%%%%%%%%%%%%%%%%%%%% + +def violin(expr width, beginleft, begindown, thick, penthick) = +x10=x3=x2=x8; +y6l=56/15width+y12r; +x11-x4=width; +x5=x4+13/15width; +x2=x4+31/45 width; +x1=x4+7/15width; +x4=beginleft; +x2-x12=4/15 width; +x9+2/5width=x6; +x6-4/15width=x7; +x9=x4+1/5width; +y12r=begindown; +y2r=y4=2y11; +y8=y12r+4/15width; +y2r=y12r+28/15width; +y1=y12r+width; +y3r=y12r+13/15width; +y7=y12r+116/45width; +y5=y12r+16/5width; +y5-y10=y11; +y9=y12r+2/15width; +penpos1(0,180); +penpos2(thick,90); +penpos3(penthick+1/16thick,-90); +penpos4(5/4thick,120); +penpos5(5/6thick,-120); +penpos6(5/3thick,-85); +penpos7(1/2thick,0); +penpos8(penthick,0); +penpos9(5/4thick,170); +penpos10(5/6thick,180); +penpos11(thick,0); +penpos12(penthick,-90); +pickup pencircle scaled 1s; +penstroke z1e{2left}..z2e..z11e..z3e +..z4e{right+up}..z10e..{up}z5e..z6e; +penstroke z6e{down+left}..{down}z7e--z8e; +fill z8l{2down+right}..z12l..z9l +--z9r..z12r..{up}z8r..cycle; +pickup pencircle scaled 1s; +fill z9l{3/2right+up}..{right+2down}z9r..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12); +enddef; + +beginchar(71,3.25nhw#, 6nhh#, 2nhh#); +clear; +violin(15/8nhh,7/4nhh,-3/2nhh,2/5nhh,1/9nhh); +endchar; + +%%%%%%%%violin-schluessel verkleinert%%%%%%%% +beginchar(72,3.25nhw#, 6nhh#, 2nhh#); +clear; +violin(12/8nhh,7/4nhh,-2/2nhh,3/10nhh,1/10nhh); +endchar; + +%%%%%%%%%%%%%%%%%%%%% +% BASS--SCHLUESSEL %% +%%%%%%%%%%%%%%%%%%%%% + +def bass(expr width, beginleft, begindown, thick, dotthick)= + +y1=begindown; +x1l=beginleft; +x4=x5; +x4-x3=width; +x1l-x3=1/10width; +y2=3/6(y4+y5); +y4-y5=3/9width; +y5-y3=9/9width; +y3=y1-17/12width; +x4-x2=3/9width; +x7-x3=1/5width; +y7=1/4(3y5+y4); +penpos1(1/2thick,10); +penpos2(thick,180); +penpos3(0,180); +penpos7(1/3thick,90); + +pickup pencircle scaled dotthick; +drawdot z4; drawdot z5; +pickup pencircle scaled 1s; +penstroke z3e{up+right}..z2e{up}..{down+left}z1e; +fill z1l{down+left}..{right}z7l{right}..{left+up}z1r..cycle; +penlabels(1,2,3,4,5,7); +enddef; + +beginchar(73,3nhw#, 4nhh#, 0nhh#); +clear; +bass(9/4nhh, 49/40nhh, 58/16nhh, 1/2nhh, 2s); +endchar; + +%%%%%%verkleinerter bass-schluessel%%%%%%%%% +beginchar(74,3nhw#, 4nhh#, 0nhh#); +clear; +bass(7/4nhh, 60/40nhh, 56/16nhh, 1/2nhh, 1.5s); +endchar; + +%%%%%%%%%%%%%%%%%%% +% ALT--SCHLUESSEL % +%%%%%%%%%%%%%%%%%%% + +def alt(expr height, beginleft, begindown, thick) = +x1=x7; +x2=x8; +y1-y7=height; +y2-y8=height; +y7=begindown; +x7=beginleft; +x2=x1+1/4height; +x6l=x8l; +y5=y7+1/2height; +x5=x3; +y4=y5+1/3(y3-y5); +x4-x7=height; +x4-x5=1/2height; +y3-y5=2/5height; +y8=y7; +y6=y7; +x9=x3; +y9=y7-1/2height-2/5height; +penpos8(1/4thick,180); +penpos2(1/4thick,180); +penpos1(thick,180); +penpos7(thick,180); +penpos6(thick,0); +penpos5(1/10thick,0); +penpos3(1/2thick,0); +penpos4(2/3thick,180); + +pickup pencircle scaled 1s; +fill z7l--z1l--z1r--z7r--cycle; +fill z8l--z2l--z2r--z8r--cycle; +penstroke z5e..{left+2down}z6e; +penstroke z5e{right+4down}..{up}z4e{up}..{left+down}z3e; +pickup pencircle scaled 1.8s; +drawdot z3; + + +pickup pencircle scaled 1s; +penstroke + (counterclockwise(z7e--z1e)reflectedabout(z7,z8)); +penstroke +(counterclockwise(z8e--z2e)reflectedabout(z7,z8)); +penstroke +(counterclockwise(z5e..{left+2down}z6e)reflectedabout(z7,z8)); +penstroke +(counterclockwise (z5e{right+4down}..{up}z4e{up}..{left+down}z3e) +reflectedabout(z7,z8)); + +pickup pencircle scaled 1.75s; +drawdot z9; +penlabels(1,2,3,4,5,6,7,8); +enddef; + +%%%%%%%%%%%Altschl"usseL%%%%%%%%%%% +beginchar(75,3.5nhw#, 4nhh#, 0nhh#); +clear; +alt(2nhh,1.25nhh,2nhh,2/5nhh); +endchar; + +%%%%%%%%%Tenorschluessel%%%%%%%%% +beginchar(76,3.5nhw#, 4nhh#, 0nhh#); +clear; +alt(2nhh,1.25nhh,3nhh,2/5nhh); +endchar; + +%%%%%%%%%Baritonschluessel%%%%%%%%% +beginchar(77,3.5nhw#, 4nhh#, 0nhh#); +clear; +alt(2nhh,1.25nhh,4nhh,2/5nhh); +endchar; + +%%%%%%%%%Mezzosopranschluessel%%%%%%%%% +beginchar(78,3.5nhw#, 4nhh#, 0nhh#); +clear; +alt(2nhh,1.25nhh,1nhh,2/5nhh); +endchar; + +%%%%%%%%%Sopranschluessel%%%%%%%%% +beginchar(79,3.5nhw#, 4nhh#, 0nhh#); +clear; +alt(2nhh,1.25nhh,0nhh,2/5nhh); +endchar; + -- cgit v1.2.3