WaBis

walter.bislins.ch

Aufbau von TeX Formeln in Umgekehrter Polnischer Notation (UPN)

Dienstag, 16. Juni 2015 - 18:06 | Autor: wabis | Themen: Programmierung, Mathematik, Nützliches, Interaktiv
Ich habe einen Editor in Form einer Webseite in JavaScript programmiert, mit welchem Formeln in TeX-Syntax einfach interaktiv Schritt für Schritt aufgebaut werden können. In Anlehnung an HP-Taschenrechner werden die Formeln in UP-Notation eingegeben. Dadurch kann man sich unter anderem die fehlerträchtige Eingabe der vielen TeX-Klammern ersparen.

Einleitung

Formeln auf Webseiten werden in der Regel in einer speziellen Syntax geschrieben, die dann vom Server oder Browser interpretiert und in Grafik umgewandelt wird. Als Standard hat sich in der Wissenschaft die TeX-Syntax etabliert. Die Wikipedia und diese Website verwenden zum Beispiel diese Art der Formel-Codierung.

Auf meiner Website wird die TeX-Syntax vom frei erhältlichen JavaScript-Paket jsmath interpretiert und über Styles in schöne Formeln umgewandelt. Das folgende Beispiel zeigt, wie die TeX-Eingabe in einer Formel resultiert:

\gamma = { 1 \over \sqrt{ 1 - { v^2 \over c^2 } } }
\gamma = { 1 \over \sqrt{ 1 - { v^2 \over c^2 } } }

Nachteile der TeX-Syntax

Dieses einfache Beispiel zeigt bereits einen Nachteil der TeX-Syntax: Es braucht sehr viele Geschweifte Klammern zur Strukturierung der Formel. Daher ist die Eingabe in einem Text-Editor mühsam und fehleranfällig.

Ein weiteres Problem ist, dass man das Resultat der Eingabe erst dann sehen kann, wenn man die Seite rendern läst. Vom JavaScript gefundene Fehler werden anstelle der Formel ausgegeben. Den bemängelten Fehler im TeX-Code zu finden ist oft nicht einfach. Formeln werden schnell unübersichtlich.

TeX-Syntax kennt viele Konstrukte, die man sich aber kaum alle merken kann. Selbst einfache Konstrukte wie Bruchstriche müssen mühsam eingegeben werden: { oben \over unten } oder \frac{ oben }{ unten }

In Formeln kommen häufig grössere Terme mehrfach vor. Diese müssen in einem Text-Editor mühsam kopiert und an anderer Stelle eingefügt werden. Den Originalterm im TeX-Code zu finden ist nicht immer einfach.

Beispiel eines grösseren Terms

\mathrm{ d } \tilde x^\mu( \alpha, \lambda ) \mathrm{ d } \tilde x^\mu( \alpha, \lambda )

Im UPN TeX Editor können mehrfach benötigte Terme einfach in einem Zwischenspeicher abgelegt und von dort an den gewünschten Stellen in den Code kopiert werden.

Die Formatierung von Schriften (kursiv, aufrecht, fett), Zahlen und Einheiten ist mühsam. So muss man zum Beispiel bei Zahlen Leerzeichen zur Strukturierung selbst einfügen und 10ner-Exponenten sind umständlich zu codieren.

\vec F_{ 1, \mathrm{ max } } \vec F_{ 1, \mathrm{ max } }
1,\!234\,56 \cdot 10^{ -12 } \ \mathrm{ kg \! \cdot \! m / s^2 } 1,\!234\,56 \cdot 10^{ -12 } \ \mathrm{ kg \! \cdot \! m / s^2 }

Im UPN TeX Editor gibt es Operatoren und Spezialzeichen, welche diese Formatierungen vornehmen.

Eingabe in Umgekehrter Polnischer Notation

Für das Problem der Klammerung gibt es seit langem ein in HP-Taschenrechnern angewandtes Verfahren: Die Eingabe in Umgekehrter Polnischer Notation UPN. UPN bedeutet, dass Operatoren nicht zwischen Termen eingegeben werden, sondern nach den Termen stehen, auf die sie angewandt werden.

Die UPN Methode arbeitet dazu mit einem sogenannten Stack. Ein Stack ist ein spezieller Zwischenspeicher. Zu speichernde Elemente (z.B. Zahlen) werden immer oben auf den Stack gelegt und von oben vom Stack wieder entfernt. Das funktioniert nach folgendem Prinzip:

  1. Argumente von Funktionen (z.B. Zahlen) werden auf den Stack gesetzt
  2. Eine Funktion wird ausgeführt, indem sie eine Anzahl von Argumenten vom Stack nimmt, diese verarbeitet und das Resultat wiederum als Argument für weitere Funktionen auf den Stack setzt.
  3. Das oberste Stack-Element zeigt jeweils die letzte Eingabe oder das letzte Resultat einer Funktion an.
  4. Die Anzahl Argumente, die eine Funktion benötigt, kann beliebig gross sein. Es muss nur dafür gesorgt werden, dass mindestens so viele Elemente auf dem Stack sind, wie die Funktion benötigt. Eine Wurzel-Funktion benötigt zum Beispiel nur ein Argument, eine Multiplikation braucht zwei Argumente.

Die folgenden Beispiele verdeutlichen die Arbeitsweise des Stacks anhand eines HP-Taschenrechners. Es zeigt, wie Formeln eingegeben werden und wie man komplett auf Klammern verzichten kann. Die Gruppierung der Terme erfolgt alleine durch die Reihenfolge der Eingabe:

Aufgabe UPN Eingabe
( 3 − √ 2 ) · ( 5 + 42 ) 3 Enter 2 x  −  5 Enter 4 x2  +   × 
3 − √ 2 · 5 + 42 3 Enter 2 x 5  ×   −  4 x2  + 

Erklärung Beispiel 1

Eingabe Anzeige Stack Beschreibung
3 3 Die Zahl 3 wird in die Eingabezeile des Taschenrechners eingegeben
Enter 3 3 Die Zahl in der Eingabezeile wird auf den Stack gesetzt
2 2 3 Die Zahl 2 wird in die Eingabezeile eingegeben
x 1.4142 1.4142
3
1. Die Zahl 2 wird auf den Stack gesetzt
2. das oberste Stack-Element (2) wird vom Stack genommen, die Wurzel davon berechnet und das Resultat wird auf den Stack gesetzt
 −  1.5858 1.5858 Die beiden obersten Zahlen werden vom Stack genommen, voneinander abgezogen und das Resultat wird auf den Stack gesetzt.
5 5 1.5858 Die Zahl 5 wird in die Eingabezeile eingegeben
Enter 5 5
1.5858
Die Eingabezeile wird auf den Stack gesetzt
4 4 5
1.5858
Die Zahl 4 wird in die Eingabezeile eingegeben
x2 16 16
5
1.5858
1. Die Zahl 4 wird auf den Stack gesetzt
2. Die oberste Zahl (4) wird vom Stack genommen und quadriert. Das Resultat (16) wird auf den Stack gesetzt
 +  21 21
1.5858
Die beiden obersten Zahlen werden vom Stack genommen, addiert, und das Resultat wird auf den Stack gesetzt
 ×  33.302 33.302 Die beiden obersten Zahlen werden vom Stack genommen, multipliziert, und das Resultat wird auf den Stack gesetzt.

Zwei Dinge sind zu beachten:

  • Die Eingabezeile zeigt entweder die aktuelle Eingabe an oder nach der Ausführung einer Operation das oberste Stack-Element, also das Resultat der Operation
  • Um die Eingabe einer Zahl abzuschliessen, muss Enter gedrückt werden. Enter muss nicht gedrückt werden, wenn nach der Eingabe einer Zahl eine Funktions-Taste gedrückt wird. Enter muss somit nur zwischen der Eingabe zweier Zahlen gedrückt werden.

Die UPN hat den grossen Vorteil, dass alle Zwischenergebnisse der Berechungen angezeigt werden. Bei Taschenrechnern mit Klammereingabe wird oft erst bei der letzten schliessenden Klammer die Berechnung gestartet und nur das Endresultat angezeigt. Da bei der UPN Eingabe überhaupt keine Klammern gebraucht werden, müssen meist weniger Tasten gedrückt werden, als bei der sequenziellen Eingabe.

Anwendung von UPN für einen TeX-Editor

Mir kam die Idee, dass man das UPN-Prinzip auch bei TeX-Formeln anwenden könnte. Dies würde wiefolgt aussehen:

  1. Symbole oder Terme in einer Eingabezeile eingeben.
  2. Die Eingabe wird mit Enter auf den Stack gesetzt.
  3. Operation auf die Elemente auf dem Stack anwenden und das Resultat auf den Stack setzen
  4. Bei jedem Schritt den Stack in TeX-Syntax und als Formel darstellen

Im Unterschied zu einem Taschenrechner würden Operatoren nicht Berechnungen anstellen, sondern Teile von TeX-Code auf vielfältige Weise miteinander verbinden.

Die TeX-Klammerung wird dabei vollständig vom Editor übernommen.

Der Editor zeigt den ganzen Stack in TeX-Syntax und die obersten vier Stack-Elemente als Formel an. Man sieht sofort das Resultat jedes Schrittes.

Wenn ein Schritt nicht das gewünschte Resultat ergibt, kann man per undo-Operator jeden Schritt rückgängig machen und eine andere Variante probieren.

Eingabe Stack in TeX-Syntax Stack als Formel
\gamma \gamma \gamma
1 1
\gamma
1
\gamma
v v
1
\gamma
v
1
\gamma
x2 { v }^2
1
\gamma
{ v }^2
1
\gamma
c c
{ v }^2
1
\gamma
c
{ v }^2
1
\gamma
x2 { c }^2
{ v }^2
1
\gamma
{ c }^2
{ v }^2
1
\gamma
 ÷  { { v }^2 \over { c }^2 }
1
\gamma
{ { v }^2 \over { c }^2 }

1
\gamma
 −  1 - { { v }^2 \over { c }^2 }
\gamma
1 - { { v }^2 \over { c }^2 }

\gamma
x \sqrt{ 1 - { { v }^2 \over { c }^2 } }
\gamma
\sqrt{ 1 - { { v }^2 \over { c }^2 } }

\gamma
1/x { 1 \over \sqrt{ 1 - { { v }^2 \over { c }^2 } } }
\gamma
{ 1 \over \sqrt{ 1 - { { v }^2 \over { c }^2 } } }

\gamma
 =  \gamma = { 1 \over \sqrt{ 1 - { { v }^2 \over { c }^2 } } }
\gamma = { 1 \over \sqrt{ 1 - { { v }^2 \over { c }^2 } } }

Weitere Möglicheiten und Infos

Der UPN TeX Editor unterstützt die Formeleingabe noch mit vielen weiteren Möglichkeiten:

  • Eingabe in TeX-Syntax möglich und kann mit UPN gemischt werden (Vorteile beider Welten nutzen).
  • Unbeschränkt grosser Stack
  • Beliebig grosser Speicher zum Abspeichern von Resultaten, Abkürzungen und selbstdefinierten Operatoren
  • Stack und Speicher können direkt editiert werden
  • Viele Operatoren eingebaut.
  • Zahlen und Einheiten lassen sich eingeben wie bei einem Taschenrechner.
  • Schriftarten wie Roman (mathrm) und Boldface (mathbf) lassen sich durch Voranstellen von $ bzw. @ vor einen Symbolnamen wählen.
  • Input-History zum Abruf alter Eingaben
  • Unbeschränkte Undo/Redo-Funktion
  • Zustand und Speicher des UPN Editors werden fortlaufend in einem Cookie ein Jahr lang gespeichert. So gehen keine Eingaben durch Fehlbedienung verloren und bei jedem Aufruf der Seite wird der letzte Zustand wieder hergestellt.
Dein Kommentar zu diesem Artikel
Name
Email optional; wird nicht angezeigt
Kommentar
  • Name wird bei deinem Kommentar angezeigt.
  • Email ist nur für den Administrator, sie wird nicht angezeigt.
  • Du kannst deine Kommentare eine Zeit lang editieren oder löschen.
  • Du kannst Formatierungen im Kommentar verwenden, z.B: Code, Formeln, usw.
  • Externen Links und Bilder werden nicht angezeigt, bis sie der Admin freischaltet.
Weitere Infos zur Seite
Erzeugt Dienstag, 16. Juni 2015
von wabis
Zum Seitenanfang
Geändert Sonntag, 10. Januar 2016
von wabis