Plattenbeulen/ Der Code
- Allgemein:Inhaltsverzeichnis ; Glossar ; Zahlen
- Rechenbeispiel: Allgemeiner Lösungsweg ; erstes ; zweites ; drittes ; viertes
- Verschiedenes: Ziel des Lehrbuches ; Tipps ; Tools ; Berechnung der semiplastischen Tragfähigkeit ; Auswertung ; Verzeichnisse
So wandelt man das Bild in ein Worddocxument um.
Das Bild wird als Windowsbitmap BMP gespeichert und dann mit einem Hexeditor geöffnet. Am Anfang und am Ende der Datei müssen Zeichen gelöscht werden. Am Anfang steht „Worddocxument beginnt hier“ und am Ende „Worddocxument endet hier“. Alle Zeichen inklusive des Textes davor bzw. dahinter werden entfernt. Die Dateiendung nennt man in docx um, um sie mit Word zu öffnen.

So bekommt man die Makros ins eigene Word:

Es gibt ein kleines Makro zur Reparatur der Dokumentstruktur von http://www.kastenmaier.de/?p=142. Dieses macht bei Worddokumenten mit mehr als 100 Seiten möglich, dass weiterhin ein Inhaltsverzeichnis aus Überschriften erstellt werden kann. Dieses Makro kommt ins Worddokument und nicht in Word. Dazu markiert und kopiert man von „Public Sub Reparatur()“ bis „End Sub“. Dann drückt man Alt F11 um den VBA-Editor zu öffnen. Oben links doppelklickt man auf Modul 1. Rechts ist ein weißer Bereich, in den man den Text einfügt.
Die eigentlichen Tools (die anderen 39 Seiten) werden unter NewMacros eingefügt. Dann geht man auf Extras – Anpassen und klickt unten auf Tastatur. Da scrollt man runter und klickt auf Makros. Nun kann man den Makros Tastenkürzel zuweisen. KKTformelumwandler erhöht das Formellevel. KKTfurmelumwandler senkt das Formellevel. Ausrechnen rechnet eine Formel aus und vAusrechnen rechnet eine Formel aus und schreibt die Formel links neben das Ergebnis.
Public Sub Reparatur()
On Error GoTo NoDocumentOpen
If Len(ActiveDocument.Name) = 0 Then GoTo NoDocumentOpen
' Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
' Gesamten Text im Dokument markieren
Selection.WholeStory
' Gliederungsebene auf Textkörper ändern
Selection.ParagraphFormat.OutlineLevel = wdOutlineLevelBodyText
NoDocumentOpen:
' Bildschirmaktualisierung einschalten
Application.ScreenUpdating = True
End Sub
Option Explicit
Function Klammer(ByVal a As String) As Integer
If a = "(" Then
Klammer = 1
ElseIf a = ")" Then
Klammer = -1
ElseIf a = "" Then
Klammer = 17000
Else
Klammer = 0
End If
End Function
Function Klammer2(ByVal a As String) As Integer
If a = "{" Then
Klammer2 = 1
ElseIf a = "}" Then
Klammer2 = -1
ElseIf a = "" Then
Klammer2 = 17000
Else
Klammer2 = 0
End If
End Function
Function Steuerzeichen(ByVal a As String) As Integer
Select Case a
Case "+", "-", "*", "•", "/", ")", "(", "^", "_", "=", ChrW(8729), ChrW(8211)
Steuerzeichen = 1
Case ""
Steuerzeichen = 17000
Case Else
Steuerzeichen = 0
End Select
End Function
Function IstZahl(ByVal a As String) As Integer
Select Case a
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ","
IstZahl = 1
Case ""
IstZahl = 17000
Case Else
IstZahl = 0
End Select
End Function
Function Typ() As Integer
Dim Länge, aktuellZeichen, c, d, e As Integer
Dim Formel, Tz As String
If Selection.Fields.Count = 1 Then
Formel = Selection.Fields(1).Code
Typ = 0 'Elementar (Berechnungsfeld)
For c = 1 To 3
Tz = Mid(Formel, c, 3)
If Tz = "EQ " Then
Typ = 2 'EQ Feld
End If
Next
Exit Function
End If
Formel = Selection
Länge = Len(Formel)
For c = 1 To 3
Tz = Mid(Formel, c, 8)
'
If Tz = ":<math> " Then
'
Typ = 3 'Wikipedia
Exit Function
End If
Tz = Mid(Tz, 1, 3)
If Tz = "EQ " Then
Typ = 2 'EQ Feld
Exit Function
End If
Next
d = 0 'elementare Zeichen
e = 0 'chicke Zeichen
For aktuellZeichen = Länge To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
Select Case Tz
Case "^", "_", "*"
d = d + 1
Case "²", "³", "•", ChrW(8729)
e = e + 1
End Select
Next
If Selection.Font.Superscript = False Then
d = d + 0
Else
e = e + 1
End If
If d = 0 And e = 0 Then Typ = -1 'elementar = chick
If d = 0 And e <> 0 Then Typ = 1 'chick
If d <> 0 And e = 0 Then Typ = 0 'elementar
If d <> 0 And e <> 0 Then Typ = 10 'elementarchick
End Function
Function Starten() As String
Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer
Dim Formel, Tz As String
If Selection.Fields.Count = 1 Then
Formel = Selection.Fields(1).Code
Else
Formel = Selection
Länge = Len(Formel)
If Länge = 1 Then 'markiert bis zum ende
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Formel = Selection
Länge = Len(Formel)
End If
If Länge = 1 Then ' markiert bei Fehlschlag bis zum Tab oder =
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Formel = Selection
Länge = Len(Formel)
d = 0
For e = Länge To 1 Step -1
Tz = Mid(Formel, e, 1)
If Asc(Tz) = 9 Or Asc(Tz) = 61 Then Exit For
d = d + 1
Next
Selection.Collapse
Selection.MoveRight Unit:=wdCharacter, Count:=Länge - d
Selection.MoveRight Unit:=wdCharacter, Count:=d, Extend:=wdExtend
End If
End If
Tz = Right(Formel, 1) 'prüft, ob rechts ein Absatz ist
c = Asc(Tz)
If c = 11 Or c = 13 Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'Tz = Formel
Formel = Selection
'Länge = Len(Formel)
If Länge - Len(Formel) = -1 Then
Länge = Len(Formel)
Selection.Collapse
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend
'c = MsgBox("Absatz markiert", 17, "Warnung")
'If c = 2 Then Exit Function
End If
End If
Tz = Left(Formel, 1) 'prüft, ob links ein Absatz ist
c = Asc(Tz)
If c = 11 Or c = 13 Then
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
'Tz = Formel
Formel = Selection
'Länge = Len(Formel)
If Länge - Len(Formel) = -1 Then
Länge = Len(Formel)
Selection.Collapse
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend
'c = MsgBox("Absatz markiert", 17, "Warnung")
'If c = 2 Then Exit Function
End If
End If
'Sicherung gegen Klammern
Klammersumme = 0
Länge = Len(Formel)
For aktuellZeichen = 1 To Länge
Tz = Mid(Formel, aktuellZeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz) + Klammer2(Tz)
If Klammersumme < 0 Then Exit For
Next
If Klammersumme <> 0 Then
c = MsgBox("Es sind " & Klammersumme & " Klammern zuviel", vbCritical, "Warnung")
Starten = " "
Exit Function
End If
Starten = Formel
End Function
Sub ausrechnen()
Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer
Dim Formel, Tz As String
Application.ScreenUpdating = False
Formel = Starten()
If Formel = " " Then Exit Sub
Formeltyp = Typ()
'Reversetranslatase und RNApolymerase können eine (1) in Klammern haben
'Dadurch erzeugen sie ein EQ-Feld ohne Feld und sind damit schneller
'senkt den Formeltyp auf elementar
Select Case Formeltyp
Case 3
d = Reversetranslatase(1) + Reversetransskriptase() + DNAse()
Case 2
d = Reversetransskriptase() + DNAse()
Case 1, 10
d = DNAse()
Case 0, -1
d = 0
End Select
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.TypeText Text:="= "
Selection.Fields.ToggleShowCodes
Selection.Fields.Update
Application.ScreenUpdating = True
End Sub
Sub vausrechnen()
Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer
Dim Formel, Tz As String
Application.ScreenUpdating = False
Formel = Starten()
If Formel = " " Then Exit Sub
Formeltyp = Typ()
'senkt den Formeltyp auf elementar
Select Case Formeltyp
Case 3
d = Reversetranslatase(1) + Reversetransskriptase() + DNAse()
Case 2
d = Reversetransskriptase() + DNAse()
Case 1, 10
d = DNAse()
Case 0, -1
d = 0
End Select
Formel = Selection
Länge = Len(Formel)
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.TypeText Text:="= "
Selection.Fields.ToggleShowCodes
Selection.Fields.Update
Selection.TypeText (Formel) & "=" & Chr(9)
Selection.MoveLeft Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'stellt wahrscheinlich das EQ-Feld wieder her
c = 0
For aktuellZeichen = Länge - 2 To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "/" Then
c = 1
Exit For
End If
Next
If c = 0 Then
For aktuellZeichen = Länge - 3 To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "0,5" Or Tz = "^1/" Then
c = 1
Exit For
End If
Next
End If
If c = 1 Then
d = DNApolymerase() + RNApolymerase(0)
Else
d = DNApolymerase()
End If
Application.ScreenUpdating = True
End Sub
Sub KKTformelumwandler()
'erhöht den Formeltyp
Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer
Dim Formel, Tz As String
Application.ScreenUpdating = False
Formel = Starten()
If Formel = " " Then Exit Sub
Formeltyp = Typ()
Länge = Len(Formel)
Select Case Formeltyp
Case -1, 10
d = DNApolymerase() + RNApolymerase(0)
Case 1
d = RNApolymerase(0)
Case 2
d = Ribosom()
Case 3
d = Reversetranslatase(1) + Reversetransskriptase() + DNAse()
Case 0
Formel = Selection
c = 0
For aktuellZeichen = Länge - 2 To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "/" Then
c = 1
Exit For
End If
Next
If c = 0 Then
For aktuellZeichen = Länge - 3 To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "0,5" Or Tz = "^1/" Then
c = 1
Exit For
End If
Next
End If
If c = 1 Then
d = DNApolymerase() + RNApolymerase(0)
Else
d = DNApolymerase()
End If
End Select
Application.ScreenUpdating = True
End Sub
Sub KKTfurmelumwandler()
'senkt den Formeltyp
Dim Länge, aktuellZeichen, Klammersumme, Formeltyp, c, d, e As Integer
Dim Formel, Tz As String
Application.ScreenUpdating = False
Formel = Starten()
If Formel = " " Then Exit Sub
Formeltyp = Typ()
Select Case Formeltyp
Case 3
d = Reversetranslatase(0)
Case 2
d = Reversetransskriptase()
Case 1, 10
d = DNAse()
Case 0, -1
d = DNApolymerase() + RNApolymerase(1) + Ribosom()
End Select
Application.ScreenUpdating = True
End Sub
Function DNApolymerase() As Integer
'Elementar zu chick
Dim Länge, Verkürzung, Endzeichen, aktuellZeichen, Klammersumme, c, d As Integer
Dim Zeichen, Formel, Tz As String
DNApolymerase = 1
'Tauscht ^2 und ^3 gegen ² und ³ aus
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 1 To 2 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
Zeichen = Mid(Formel, aktuellZeichen + 2, 1)
If IstZahl(Zeichen) = 0 Then
If Selection.Characters(aktuellZeichen + 1) = "2" Then
Selection.Characters(aktuellZeichen) = "²"
Selection.Characters(aktuellZeichen + 1) = ""
ElseIf Selection.Characters(aktuellZeichen + 1) = "3" Then
Selection.Characters(aktuellZeichen) = "³"
Selection.Characters(aktuellZeichen + 1) = ""
End If
End If
End If
Next
' Ersetzt * durch •
Formel = Selection
Länge = Len(Formel)
aktuellZeichen = 1
For aktuellZeichen = Länge - 1 To 2 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "*" Then
Selection.Characters(aktuellZeichen) = "•"
End If
Next
'stellt hochtief
aktuellZeichen = 1
For aktuellZeichen = Länge - 1 To 2 Step -1
Verkürzung = 0
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
d = 1
ElseIf Tz = "_" Then
d = -1
Else
d = 0
End If
If d <> 0 Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = " " Then
Selection.Characters(aktuellZeichen + 1) = ""
Formel = Selection
Tz = Mid(Formel, aktuellZeichen + 1, 1)
End If
Selection.Characters(aktuellZeichen) = "" '+1 im string
If Tz = "(" Then
Klammersumme = 1
Selection.Characters(aktuellZeichen) = ""
While Klammersumme > 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
ElseIf d = -1 Then
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 2, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = "^" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
ElseIf Tz = "_" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
End If
Wend
Selection.Characters(aktuellZeichen) = ""
aktuellZeichen = aktuellZeichen - Verkürzung
Else 'Tz <> "("
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
If Tz = "²" Or Tz = "³" Then c = 1
While c = 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
Else
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
If Tz = "²" Or Tz = "³" Then c = 1
If Tz = "" Then
c = 1
End If
Wend
aktuellZeichen = aktuellZeichen - Verkürzung
End If
End If
Next
End Function
Function DNAse() As Integer
'Chick zu elementar
Dim Länge, aktuellZeichen As Integer
Dim c, d, Endzeichen As Integer
Dim Zeichen, Formel, Tz As String
DNAse = 1
d = Selection.Fields.Count
If d = 1 Then
Selection.Fields.ToggleShowCodes
Selection.Fields(1).Code.Select
Länge = Selection.Characters.Count
With Selection
.Cut
.MoveRight Unit:=wdCharacter, Count:=1
.TypeBackspace
.TypeBackspace
.Paste
.MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend
End With
Formel = Selection
Länge = Länge - 2
Tz = Mid(Formel, Länge, 1)
If Tz = " " Then
Selection.Characters(Länge) = ""
End If
Tz = Mid(Formel, 1, 1)
If Tz = "Q" Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
End If
Formel = Selection
Länge = Len(Formel)
For c = 1 To 3
Tz = Mid(Formel, c, 3)
If Tz = "EQ " Then
d = 1 'EQ Feld ohne Feld und es werden {} statt () verwendet
End If
Next
' Ersetzt • durch *
aktuellZeichen = 2
For aktuellZeichen = 2 To Länge - 1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "•" Or Tz = ChrW(8729) Then
Selection.Characters(aktuellZeichen) = "*"
End If
Next
'Ersetzt ²³ durch ^2^3
For aktuellZeichen = Länge To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "²" Then
Selection.Characters(aktuellZeichen).InsertBefore ("^2")
Selection.Characters(aktuellZeichen + 2) = ""
ElseIf Tz = "³" Then
Selection.Characters(aktuellZeichen).InsertBefore ("^3")
Selection.Characters(aktuellZeichen + 2) = ""
End If
Next
'Entstellt hoch
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge To 1 Step -1
If Selection.Characters(aktuellZeichen).Font.Superscript = True Then
Endzeichen = aktuellZeichen
c = 0
While Selection.Characters(aktuellZeichen).Font.Superscript = True
c = c + Steuerzeichen(Selection.Characters(aktuellZeichen))
Selection.Characters(aktuellZeichen).Font.Superscript = False
aktuellZeichen = aktuellZeichen - 1
Wend
If d = 1 Then
If Endzeichen - aktuellZeichen = 1 Then
Selection.Characters(aktuellZeichen).InsertAfter ("^")
Else
Tz = Mid(Formel, Endzeichen, 1)
Selection.Characters(Endzeichen).InsertBefore ("}")
Selection.Characters(Endzeichen).InsertBefore (Tz)
Selection.Characters(Endzeichen + 2) = ""
Selection.Characters(aktuellZeichen).InsertAfter ("^{")
End If
Else
If c > 0 Then
Tz = Mid(Formel, Endzeichen, 1)
Selection.Characters(Endzeichen).InsertBefore (")")
Selection.Characters(Endzeichen).InsertBefore (Tz)
Selection.Characters(Endzeichen + 2) = ""
Selection.Characters(aktuellZeichen).InsertAfter ("^(")
Else
Selection.Characters(aktuellZeichen).InsertAfter ("^")
End If
End If
End If
Next
'Entstellt tief
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge To 1 Step -1
If Selection.Characters(aktuellZeichen).Font.Subscript = True Then
Endzeichen = aktuellZeichen
c = 0
While Selection.Characters(aktuellZeichen).Font.Subscript = True
c = c + Steuerzeichen(Selection.Characters(aktuellZeichen))
Selection.Characters(aktuellZeichen).Font.Subscript = False
aktuellZeichen = aktuellZeichen - 1
Wend
If d = 1 Then
If Endzeichen - aktuellZeichen = 1 Then
Selection.Characters(aktuellZeichen).InsertAfter ("_")
Else
Tz = Mid(Formel, Endzeichen, 1)
Selection.Characters(Endzeichen).InsertBefore ("}")
Selection.Characters(Endzeichen).InsertBefore (Tz)
Selection.Characters(Endzeichen + 2) = ""
Selection.Characters(aktuellZeichen).InsertAfter ("_{")
End If
Else
If c > 0 Then
Tz = Mid(Formel, Endzeichen, 1)
Selection.Characters(Endzeichen).InsertBefore (")")
Selection.Characters(Endzeichen).InsertBefore (Tz)
Selection.Characters(Endzeichen + 2) = ""
Selection.Characters(aktuellZeichen).InsertAfter ("_(")
Else
Selection.Characters(aktuellZeichen).InsertAfter ("_")
End If
End If
End If
Next
End Function
Function RNApolymerase(ByVal Hemmung As Integer) As Integer
'Chick zu EQ
Dim Länge, Widerherstellen, Verkürzung, aktuellZeichen, aktuellZeichen2, Klammersumme As Integer
Dim c, d, e, Endzeichen, Azeichen, Tausch As Integer
Dim Zeichen, Formel, Tz As String
RNApolymerase = 1
'bearbeitet Quadratwurzeln
Länge = Len(Selection)
Formel = Selection
aktuellZeichen = Länge
aktuellZeichen2 = Länge - 4
For aktuellZeichen = Länge To 3 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "5" Then
Tz = Mid(Formel, aktuellZeichen - 1, 1)
If Tz = "," Then
If Selection.Characters(aktuellZeichen - 2).Font.Superscript = True Then
If Selection.Characters(aktuellZeichen - 2) = "0" Then
If aktuellZeichen = Länge Then
e = 1
ElseIf Selection.Characters(aktuellZeichen + 1).Font.Superscript = False Then
e = 1
Else
e = 0
End If
If e = 1 Then
If Selection.Characters(aktuellZeichen - 3).Font.Superscript = True Then
If Selection.Characters(aktuellZeichen - 3) = "^" Then
Selection.Characters(aktuellZeichen - 3) = ""
aktuellZeichen = aktuellZeichen - 1
End If
End If
End If
If e = 1 Then
Selection.Characters(aktuellZeichen - 2) = ""
Formel = Selection
Tz = Mid(Formel, aktuellZeichen - 3, 1)
If Tz = ")" Then
Selection.Characters(aktuellZeichen - 2) = ""
Selection.Characters(aktuellZeichen - 2) = ""
Klammersumme = -1
aktuellZeichen2 = aktuellZeichen - 4
While Klammersumme <> 0
Tz = Mid(Formel, aktuellZeichen2, 1)
Klammersumme = Klammersumme + Klammer(Tz)
aktuellZeichen2 = aktuellZeichen2 - 1
Wend
If aktuellZeichen2 < 2 Then
Widerherstellen = Len(Selection) + 3
Selection.Characters(aktuellZeichen2 + 1) = "\r(;"
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend
End If
Else
If Selection.Characters(aktuellZeichen2 - 1) = "\" Then
Widerherstellen = Len(Selection) + 4
Selection.Characters(aktuellZeichen2 - 1).InsertBefore ("\r(;")
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend
End If
Selection.Characters(aktuellZeichen).InsertAfter (")")
aktuellZeichen = aktuellZeichen + 2
Else
Selection.Characters(aktuellZeichen2 + 1) = "\r(;"
End If
End If
Else
c = 0
aktuellZeichen2 = aktuellZeichen - 3
Selection.Characters(aktuellZeichen - 2) = ")"
Selection.Characters(aktuellZeichen - 1) = ""
Selection.Characters(aktuellZeichen - 2).Font.Superscript = False
While c = 0
Tz = Mid(Formel, aktuellZeichen2, 1)
c = Steuerzeichen(Tz)
aktuellZeichen2 = aktuellZeichen2 - 1
If aktuellZeichen2 = 0 Then
c = 1
End If
Wend
If aktuellZeichen2 = 0 Then
Selection.Characters(1).InsertBefore ("\r(;")
Else
Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(;")
End If
End If
End If
End If
End If
End If
End If
If aktuellZeichen2 = 0 Then
Exit For
End If
Next
'bearbeitet Wurzeln
Länge = Len(Selection)
Formel = Selection
aktuellZeichen = Länge - 2
For aktuellZeichen = Länge - 2 To 2 Step -1
c = 0
Tausch = 0
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "1" Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = "/" Then
If Selection.Characters(aktuellZeichen).Font.Superscript = True Then
If Selection.Characters(aktuellZeichen - 1).Font.Superscript = False Then
While c = 0
If Länge < aktuellZeichen + Tausch + 2 Then
c = 1
ElseIf Selection.Characters(aktuellZeichen + Tausch + 2).Font.Superscript = False Then
c = 1
Else
c = 0
End If
Tausch = Tausch + 1
Wend
Tausch = Tausch - 1
Selection.Characters(aktuellZeichen) = ""
Selection.Characters(aktuellZeichen) = ")"
Selection.Characters(aktuellZeichen).Font.Superscript = False
Tz = Mid(Formel, aktuellZeichen - 1, 1)
If Tz = ")" Then
Selection.Characters(aktuellZeichen) = ""
Klammersumme = -1
aktuellZeichen2 = aktuellZeichen - 2
While Klammersumme <> 0
Tz = Mid(Formel, aktuellZeichen2, 1)
Klammersumme = Klammersumme + Klammer(Tz)
aktuellZeichen2 = aktuellZeichen2 - 1
Wend
If aktuellZeichen2 < 2 Then
Widerherstellen = Len(Selection) + 2
Selection.Characters(aktuellZeichen2 + 1) = "\r("
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend
End If
Else
If Selection.Characters(aktuellZeichen2 - 1) = "\" Then
aktuellZeichen2 = aktuellZeichen2 - 2
Widerherstellen = Len(Selection) + 3
Selection.Characters(aktuellZeichen2 + 1) = "\r(\"
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend
End If
Selection.Characters(aktuellZeichen + 2).InsertAfter (")")
aktuellZeichen = aktuellZeichen + 2
Else
Selection.Characters(aktuellZeichen2 + 1) = "\r("
End If
End If
aktuellZeichen = aktuellZeichen + 2
d = 1
For d = 1 To Tausch
Selection.Characters(aktuellZeichen2 + 3).InsertAfter (Selection.Characters(aktuellZeichen + Tausch - 1))
Selection.Characters(aktuellZeichen + Tausch) = ""
Next
Selection.Characters(aktuellZeichen2 + 3 + Tausch).InsertAfter (";")
Else
aktuellZeichen2 = aktuellZeichen - 2
c = 0
If aktuellZeichen2 <> 0 Then
While c = 0
Tz = Mid(Formel, aktuellZeichen2, 1)
c = Steuerzeichen(Tz)
If Tz = ";" Then
c = 1
End If
aktuellZeichen2 = aktuellZeichen2 - 1
If aktuellZeichen2 = 0 Then
c = 1
End If
Wend
End If
Widerherstellen = Len(Selection) + 2
If aktuellZeichen2 = 0 Then
Selection.Characters(1).InsertBefore ("\r(")
aktuellZeichen2 = aktuellZeichen2 - 1
Else
Selection.Characters(aktuellZeichen2 + 1).InsertAfter ("\r(")
End If
aktuellZeichen = aktuellZeichen + 3
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Widerherstellen, Extend:=wdExtend
End If
d = 1
For d = 1 To Tausch
Selection.Characters(aktuellZeichen2 + 4).InsertAfter (Selection.Characters(aktuellZeichen + Tausch))
Selection.Characters(aktuellZeichen + Tausch + 1) = ""
Next
Selection.Characters(aktuellZeichen2 + 4 + Tausch).InsertAfter (";")
End If
End If
Formel = Selection
End If
End If
End If
Next
'Wandelt Brüche um
Länge = Len(Selection)
aktuellZeichen = Länge - 1
For aktuellZeichen = Länge - 1 To 2 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "/" Then
If Selection.Characters(aktuellZeichen + 1) = " " Then
Selection.Characters(aktuellZeichen + 1) = ""
Länge = Länge - 1
End If
If Selection.Characters(aktuellZeichen - 1) = " " Then
Selection.Characters(aktuellZeichen - 1) = ""
aktuellZeichen = aktuellZeichen - 1
Länge = Länge - 1
End If
Formel = Selection
'bearbeitet die rechte Seite
'345/54334-123 -> 0) 345/54334)-123
'345/54334 -> 0) 345/54334)
'345/5433^34 -> 0) 345/5433^34)
'345/(3+5) -> -0 345/3+5)
'243/(4*6) -> -0 243/4*6)
'345/(3+5)^4 -> 0) 345/(3+5)^4)
'354/\r(;23) -> 0) 354/\r(;23))
'354/\r(;23)^56 -> 0) 354/\r(;23)56^)
Verkürzung = 0
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = "-" Then
aktuellZeichen = aktuellZeichen + 1
Verkürzung = 1 'berücksichtigt nevatives Vorzeichen
End If
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = "(" Then
e = 1
ElseIf Tz = "\" Then 'geändert
e = 2 'e entscheidet, wo klammern gesetzt werden
Else
e = 0
End If 'aktuellzeichen = / oder -
If e <> 0 Then
If e = 2 Then
Endzeichen = aktuellZeichen + 3
Else
Endzeichen = aktuellZeichen + 1
End If
Klammersumme = 1
While Klammersumme <> 0
Endzeichen = Endzeichen + 1
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
Wend
c = 0
d = 0 'd= hochtiefstellung
If Endzeichen < Länge Then
While c = 0
Endzeichen = Endzeichen + 1
If Endzeichen > Länge Then
c = 1
ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then
c = 0
d = 1
ElseIf Selection.Characters(Endzeichen).Font.Subscript = True Then
c = 0
d = -1
ElseIf Selection.Characters(Endzeichen) = "²" Then
c = 0
d = 2
ElseIf Selection.Characters(Endzeichen) = "³" Then
c = 0
d = 2
Else
c = 1
End If
Wend
End If
Endzeichen = Endzeichen - 1
If d <> 0 Or e = 2 Then
Selection.Characters(Endzeichen - 1).InsertAfter ("))")
Selection.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2)
Selection.Characters(Endzeichen + 2) = ""
If d = 1 Then
Selection.Characters(Endzeichen).Font.Superscript = True
ElseIf d = -1 Then
Selection.Characters(Endzeichen).Font.Subscript = True
ElseIf d = 2 Then
Selection.Characters(Endzeichen).Font.Subscript = False
Selection.Characters(Endzeichen).Font.Superscript = False
End If
Selection.Characters(Endzeichen + 1).Font.Subscript = False
Selection.Characters(Endzeichen + 1).Font.Superscript = False
Else
Selection.Characters(aktuellZeichen + 1) = ""
End If
Else
Endzeichen = aktuellZeichen
c = 0
While c = 0
Endzeichen = Endzeichen + 1
If Endzeichen > Länge Then
c = 1
Else
Tz = Mid(Formel, Endzeichen, 1)
c = Steuerzeichen(Tz)
End If
Wend
If Endzeichen > Länge - 1 Then
Endzeichen = Endzeichen - 1
Else
If Selection.Characters(Endzeichen) = "(" And Selection.Characters(Endzeichen - 2) = "\" Then
Endzeichen = Endzeichen - 3
Else
Endzeichen = Endzeichen - 1
End If
End If
If Endzeichen = Länge Then
If Selection.Characters(Endzeichen).Font.Subscript = True Then
With Selection
.Characters(Endzeichen - 1).InsertAfter ("))")
.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2)
.Characters(Endzeichen).Font.Subscript = True
.Characters(Endzeichen + 1).Font.Subscript = False
.Characters(Endzeichen + 1).Font.Superscript = False
.Characters(Endzeichen + 2) = ""
End With
ElseIf Selection.Characters(Endzeichen).Font.Superscript = True Then
With Selection
.Characters(Endzeichen - 1).InsertAfter ("))")
.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2)
.Characters(Endzeichen).Font.Superscript = True
.Characters(Endzeichen + 1).Font.Superscript = False
.Characters(Endzeichen + 1).Font.Subscript = False
.Characters(Endzeichen + 2) = ""
End With
Else
With Selection
.Characters(Endzeichen - 1).InsertAfter ("))")
.Characters(Endzeichen) = Selection.Characters(Endzeichen + 2)
.Characters(Endzeichen + 2) = ""
.Characters(Endzeichen).Font.Superscript = False
.Characters(Endzeichen).Font.Subscript = False
.Characters(Endzeichen + 1).Font.Superscript = False
.Characters(Endzeichen + 1).Font.Subscript = False
End With
End If
Else
Selection.Characters(Endzeichen).InsertAfter (")")
Selection.Characters(Endzeichen + 1).Font.Subscript = False
Selection.Characters(Endzeichen + 1).Font.Superscript = False
End If
End If 'aktuellzeichen wird wieder /
aktuellZeichen = aktuellZeichen - Verkürzung
'bearbeitet die linke Seite und berücksichtigt folgende Fälle
'345/dfg (0 \F(345;dfg)
'2+354/wer (0 2+\F(354;wer)
'(2+345)/rzt 0- \F(2+345;rzt)
'3+(2+345)/rzt 0- 3+\F(2+345;rzt)
'24^3/46 (0 \F(24^3;46)
'(3+23)^54/234 (0 \F((3+23)^54;234)
'\r(;354)/234 (0 \F(\r(;354);234)
'\r(;354)^0,23/234 (0 \F(\r(;354)^0,23;234)
'\o(L;\s\up4(_))/4365 (0 \F(\o(L;\s\up4(_));4365)
'\o(L;\s\up4(_))_as/4365 (0 \F(\o(L;\s\up4(_))_as;4365)
'\s\up4(_)/4365 (0 \F(\s\up4(_);4365)
'4*6/45 (0 \F(4*6;45)
'2+(3+8)*5/123 (0 2+\F((3+8)*5;123)
'2+5*(3+8)/21 (0 2+\F(5*(3+8);21)
'(2+5)*(7+s)/afd (0 \F((2+5)*(7+s);afd) extra
'4*64/asd (0 \F(4*64;asd)
'\r(;354)*sfd/234 (0 \F(\r(;354)*sfd;234)
'3sd(345+sfd)/234 (0 \F(3sd(345+sfd);234) irreversibel für Reversetranskriptase
'4/34*465/vbn (0 \F(\F(4;34)*465;vbn)
'4+3*(4/(3+34)) (0 4+3*(\F(4;3+34)) extra
'(345/465)^(1/234) (0 \r(234;\F(345;465)) extra
Selection.Characters(aktuellZeichen) = ";"
Formel = Selection
c = 0
d = 0
e = 0
Azeichen = aktuellZeichen
Klammersumme = 0
While c = 0
Azeichen = Azeichen - 1
Tz = Mid(Formel, Azeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Klammer(Tz) <> 0 And Klammersumme = 0 Then
d = d + 1 'Prüft, ob zwischen den Klammern weitere Klammern enthalten sind
End If
If Azeichen = 1 Then
c = 1 'berücksichtigt selbstständig negative Vorzeichen am Anfang
If Klammersumme = 1 Then Azeichen = Azeichen + 1
Else
If Tz = "+" And Klammersumme = 0 Then
c = 1
Azeichen = Azeichen + 1
End If
If (Tz = ";" Or Tz = "=") And Klammersumme = 0 Then
c = 1 'Berücksichtigt, ob der Bruch sich z.B. in einer Wurzel befindet
Azeichen = Azeichen + 1
End If
If (Tz = "-" Or Tz = ChrW(8211)) And Klammersumme = 0 Then
c = 1
Azeichen = Azeichen + 1
End If
If Klammersumme = 1 Then
c = 1
Azeichen = Azeichen + 1
End If
End If 'Azeichen = beginn des Bruches
Wend
If Selection.Characters(Azeichen) = "(" And d < 2 And Selection.Characters(aktuellZeichen - 1) = ")" Then
Selection.Characters(aktuellZeichen - 1) = ""
If Azeichen = 1 Then
Länge = Len(Selection)
Selection.Characters(1).InsertBefore ("\F")
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
Else
Selection.Characters(Azeichen).InsertBefore ("\F")
End If
Else
If Azeichen = 1 Then
Länge = Len(Selection)
Selection.Characters(1).InsertBefore ("\F(")
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
Else
Selection.Characters(Azeichen).InsertBefore ("\F(")
End If
End If
Formel = Selection
Länge = Len(Formel)
End If ' gehört zu If Tz = "/" Then
Next
'erkennt große klammern
Länge = Len(Selection)
Formel = Selection
aktuellZeichen = Länge - 2
c = 0
d = 0
e = 0
For aktuellZeichen = Länge - 2 To 1 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "(" Then
Azeichen = aktuellZeichen - 2
If aktuellZeichen < 3 Then
d = 1
ElseIf Selection.Characters(Azeichen) = "\" Then
d = 0
Else
e = 0
While e = 0
If Steuerzeichen(Selection.Characters(Azeichen + 1)) = 1 Then
e = 1
d = 1
ElseIf Selection.Characters(Azeichen + 1) = "\" Then
e = 1
d = 0
End If
If Azeichen < 1 Then
e = 1
d = 1
End If
Azeichen = Azeichen - 1
Wend
End If
If d = 1 Then
d = 0
Endzeichen = aktuellZeichen + 1
Klammersumme = 1
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
Endzeichen = Endzeichen + 1
Wend
Endzeichen = Endzeichen - 1
e = aktuellZeichen
For e = aktuellZeichen To Endzeichen
Tz = Mid(Formel, e, 1)
If Tz = "\" Then
d = 1
End If
Next
End If
If d = 1 Then
If Azeichen < 0 Then
Länge = Len(Selection)
Selection.Characters(aktuellZeichen).InsertBefore ("\b")
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
Else
Selection.Characters(aktuellZeichen).InsertBefore ("\b")
End If
End If
End If
Next
Länge = Len(Selection) + 3
Selection.Characters(1).InsertBefore ("EQ ")
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
If Hemmung = 1 Then
Else
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Fields.Update
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
'Selection.MoveRight Unit:=wdCharacter, Count:=2
'Selection.EndKey Unit:=wdLine, Extend:=wdExtend
'Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Function
Function Reversetransskriptase() As Integer
'EQ zu Chick
Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer
Dim c, d, e, Endzeichen, Azeichen As Integer
Dim Zeichen, Formel, Tz As String
Reversetransskriptase = 1
c = Selection.Fields.Count
If c = 1 Then
Selection.Fields.ToggleShowCodes
Selection.Fields(1).Code.Select
Länge = Selection.Characters.Count
With Selection
.Cut
.MoveRight Unit:=wdCharacter, Count:=1
.TypeBackspace
.TypeBackspace
.Paste
.MoveLeft Unit:=wdCharacter, Count:=Länge - 2, Extend:=wdExtend
End With
Formel = Selection
Länge = Länge - 2
Tz = Mid(Formel, Länge, 1)
If Tz = " " Then
Selection.Characters(Länge) = ""
End If
Tz = Mid(Formel, 1, 1)
If Tz = "Q" Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
End If
'Selection.MoveRight Unit:=wdCharacter, Count:=2
'Selection.EndKey Unit:=wdLine, Extend:=wdExtend
'Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection.Characters(1) = " " Then
If Selection.Characters(2) = " " Then
Selection.Characters(2) = ""
End If
End If
Formel = Selection
'\B entfernen
Länge = Len(Formel)
For aktuellZeichen = Länge - 3 To 4 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "B" Or Tz = "b" Then
Tz = Mid(Formel, aktuellZeichen - 1, 1)
If Tz = "\" Then
Selection.Characters(aktuellZeichen) = ""
Selection.Characters(aktuellZeichen - 1) = ""
End If
End If
Next
'\F umwandeln
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 3 To 4 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "F" Or Tz = "f" Then
Tz = Mid(Formel, aktuellZeichen - 1, 1)
If Tz = "\" Then
Formel = Selection
Länge = Len(Formel)
Endzeichen = aktuellZeichen + 1
Klammersumme = 1
While Klammersumme <> 0 'aktuellzeichen = F
Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer)
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Selection.Characters(Endzeichen) = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen 'Azeichen = ;
End If
Wend
'entfernt Leerzeichen
If Selection.Characters(Azeichen + 1) = " " Then
Selection.Characters(Azeichen + 1) = ""
Endzeichen = Endzeichen - 1
Formel = Selection
End If
If Selection.Characters(Azeichen - 1) = " " Then
Selection.Characters(Azeichen - 1) = ""
Endzeichen = Endzeichen - 1
Azeichen = Azeichen - 1
Formel = Selection
End If
'bearbeitet die rechte Seite
e = 0
For c = Azeichen + 2 To Endzeichen
Tz = Mid(Formel, c, 1)
Select Case Tz 'Selection.Characters(c)
Case "+", "-", "*", "•", "/", ChrW(8729)
e = 0
Exit For
Case Else
e = 1
End Select
Next
If e = 1 Then
Selection.Characters(Endzeichen) = ""
Else
Selection.Characters(Azeichen).InsertAfter ("(")
End If
Selection.Characters(Azeichen) = "/"
'Bearbeitet die linke Seite
e = 0 '+3 berücksichtigt negative Vorzeichen
For c = aktuellZeichen + 3 To Azeichen - 1
Tz = Mid(Formel, c, 1)
Select Case Tz 'Selection.Characters(c)
Case "+", "-"
e = 1
Exit For
Case Else
e = 0 ' Klammer entfernen
End Select
Next
If e = 1 Then
If Selection.Characters(aktuellZeichen + 2) = "(" Then
e = 0
ElseIf Selection.Characters(aktuellZeichen + 2) = "-" And Selection.Characters(aktuellZeichen + 3) = "(" Then
e = 0
Else
e = 1 'Klammer hinzufügen
End If
End If
If e = 1 Then
With Selection.Characters(Azeichen)
.InsertBefore (")")
.Font.Superscript = False
.Font.Superscript = False
End With
Else
Selection.Characters(aktuellZeichen + 1) = ""
End If
Selection.Characters(aktuellZeichen) = ""
Selection.Characters(aktuellZeichen - 1) = ""
End If
End If
Next
'\R umwandeln
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 3 To 4 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "R" Or Tz = "r" Then
Tz = Mid(Formel, aktuellZeichen - 1, 1)
If Tz = "\" Then
Endzeichen = aktuellZeichen + 1
Klammersumme = 1
While Klammersumme <> 0 'aktuellzeichen = R
Endzeichen = Endzeichen + 1 'Endzeichen = letzte Klammer)
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen 'Azeichen = ;
End If
Wend
'entfernt Leerzeichen
If Selection.Characters(Azeichen + 1) = " " Then
Selection.Characters(Azeichen + 1) = ""
Endzeichen = Endzeichen - 1
Formel = Selection
End If
If Selection.Characters(Azeichen - 1) = " " Then
Selection.Characters(Azeichen - 1) = ""
Endzeichen = Endzeichen - 1
Azeichen = Azeichen - 1
Formel = Selection
End If
e = 0
Tausch = 0
For c = Azeichen + 1 To Endzeichen
Tz = Mid(Formel, c, 1)
Select Case Tz
Case "+", "-", "*", "•", "/", ChrW(8729), ChrW(8211)
e = 1 '1= Klammer hinzufügen
Exit For
Case Else
If Selection.Characters(c).Font.Superscript = True Or Selection.Characters(c).Font.Subscript = True Then
If Selection.Characters(aktuellZeichen).Font.Superscript = True Then
e = 0
Selection.Characters(Endzeichen).InsertBefore ("^")
Endzeichen = Endzeichen + 1
Else
e = 1
End If
Exit For
Else
e = 0
End If
End Select
Next
If aktuellZeichen = Azeichen - 2 Then
If e = 1 Then
' Berücksichtigt folgende Fälle
'EQ \r(;123) ->-- 123^0,5
'EQ \r(;123+4*(234)-123) ->00 (123+4*(234)-123)^0,5
'EQ \r(;\s\up1(4)) ->-- \s\up1(4)^0,5
'EQ \r(;-354) ->00 (-354)^0,5
'EQ \r(;(354-34)^0,4) ->00 ((354-34)^0,4)^0,5
'EQ \r(;(354-34)_0,4) ->00 ((354-34)_0,4)^0,5
With Selection
.Characters(Endzeichen).InsertBefore (")0,5")
.Characters(Endzeichen + 4) = ""
.Characters(Endzeichen).Font.Superscript = False
.Characters(Endzeichen).Font.Subscript = False
.Characters(Endzeichen + 1).Font.Superscript = True
.Characters(Endzeichen + 2).Font.Superscript = True
.Characters(Endzeichen + 3).Font.Superscript = True
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen + 1) = ""
.Characters(aktuellZeichen - 1) = ""
End With
Else
With Selection
.Characters(Endzeichen).InsertBefore ("0,5")
.Characters(Endzeichen + 3) = ""
.Characters(Endzeichen).Font.Superscript = True
.Characters(Endzeichen + 1).Font.Superscript = True
.Characters(Endzeichen + 2).Font.Superscript = True
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen - 1) = ""
End With
End If
Else
Tausch = Azeichen - aktuellZeichen - 2
c = 0
For d = 1 To Tausch
If Steuerzeichen(Selection.Characters(aktuellZeichen + 1 + d)) = 1 Then
If Klammer(Selection.Characters(aktuellZeichen + 1 + d)) = 0 Then
c = 1 'erzeugt eine Klammer; irreversibel für RNA-Polymerase
End If
End If
Next
If c = 1 Then
Selection.Characters(Azeichen).InsertBefore (")")
Selection.Characters(aktuellZeichen + 1).InsertAfter ("(")
Tausch = Tausch + 2
Endzeichen = Endzeichen + 2
Azeichen = Azeichen + 2
End If
For d = 1 To Tausch
With Selection
.Characters(Endzeichen).InsertBefore (Selection.Characters(aktuellZeichen + 2))
.Characters(Endzeichen).Font.Superscript = True
.Characters(aktuellZeichen + 2) = ""
End With
Next
Selection.Characters(Endzeichen) = ""
If e = 1 Then
With Selection
.Characters(Endzeichen - Tausch) = "1/" & Selection.Characters(Endzeichen - Tausch)
.Characters(Endzeichen - Tausch - 1).InsertAfter (")")
.Characters(Endzeichen - Tausch).Font.Superscript = False
.Characters(Endzeichen - Tausch).Font.Subscript = False
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen + 1) = ""
.Characters(aktuellZeichen - 1) = ""
End With
Else
With Selection
.Characters(Endzeichen - Tausch).InsertBefore "1/" '& Selection.Characters(Endzeichen - Tausch)
.Characters(Endzeichen - Tausch).Font.Superscript = True
.Characters(Endzeichen - Tausch + 1).Font.Superscript = True
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen) = ""
.Characters(aktuellZeichen - 1) = ""
End With
End If
End If
End If
End If
Next
For c = 1 To 3 'ganz zum schluss
If Selection.Characters(c) = "E" Or Selection.Characters(c) = "e" Then
If Selection.Characters(c + 1) = "Q" Or Selection.Characters(c + 1) = "q" Then
If Selection.Characters(c + 2) = " " Then
If c = 1 Then
Länge = Len(Selection) - 3
End If
Selection.Characters(c + 2).Delete
Selection.Characters(c + 1).Delete
Selection.Characters(c).Delete
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
Exit For
End If
End If
End If
Next
End Function
Function Ribosom() As Integer
'EQ zu Wikipedia
Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer
Dim c, d, e, Endzeichen, Azeichen As Integer
Dim Zeichen, Formel, Tz, Schriftart, Schriftart2 As String
Ribosom = 1
c = DNAse()
Formel = Selection
Länge = Len(Formel) '
Tz = Mid(Formel, Länge, 1) & "</math>" '
Selection.Characters(Länge).InsertBefore (Tz)
Selection.Characters(Länge + 8) = ""
Tz = Mid(Formel, 1, 1)
If Tz = " " Then '
Selection.Characters(1) = ":<math>"
d = 1
Tz = Mid(Formel, 2, 1)
Else
Selection.Characters(1).InsertBefore (":<math>")
d = 0 '
End If
Länge = Länge - d + 14
If Len(Selection) = 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
End If
If Tz = "e" Or Tz = "E" Then
Selection.Characters(8) = ""
Selection.Characters(8) = ""
Else
Tz = Mid(Formel, 3, 1)
If Tz = "e" Or Tz = "E" Then
Selection.Characters(9) = ""
Selection.Characters(9) = ""
End If
End If
'große Klammern
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\b(" Or Tz = "\B(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
Endzeichen = Endzeichen + 1
Wend
Selection.Characters(Endzeichen - 1).InsertBefore ("\right")
Selection.Characters(aktuellZeichen + 1) = "left"
Formel = Selection
End If
Next
'Brüche
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\f(" Or Tz = "\F(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen
End If
Endzeichen = Endzeichen + 1
Wend
'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =)
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(Azeichen) = "}{"
Selection.Characters(aktuellZeichen + 2) = "frac{"
Selection.Characters(aktuellZeichen + 1) = ""
Formel = Selection
End If
Next
'Wurzeln
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\r(" Or Tz = "\R(" Then
Klammersumme = 1
Endzeichen = aktuellZeichen + 3
While Klammersumme <> 0
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer(Tz)
If Tz = ";" And Klammersumme = 1 Then
Azeichen = Endzeichen
End If
Endzeichen = Endzeichen + 1
Wend
'aktuellZeichen= \ Azeichen= ; Endzeichen-1 =)
If Azeichen = aktuellZeichen + 3 Then
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(aktuellZeichen + 3) = ""
Selection.Characters(aktuellZeichen + 1) = "s"
Selection.Characters(aktuellZeichen + 2) = "qrt{"
Else
Selection.Characters(Endzeichen - 1) = "}"
Selection.Characters(Azeichen) = "]{"
Selection.Characters(aktuellZeichen + 1) = "s"
Selection.Characters(aktuellZeichen + 2) = "qrt["
End If
Formel = Selection
End If
Next
'Sonderzeichen Unicode
Länge = Len(Formel)
For aktuellZeichen = Länge - 7 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
Select Case AscW(Tz)
Case 42
Selection.Characters(aktuellZeichen) = "\cdot "
Case 44
Selection.Characters(aktuellZeichen) = "{,}"
Case 183
Selection.Characters(aktuellZeichen) = "\cdot "
Case 186
Selection.Characters(aktuellZeichen) = "^\circ "
Case 196
Selection.Characters(aktuellZeichen) = "\ddot{A}"
Case 214
Selection.Characters(aktuellZeichen) = "\ddot{O}"
Case 216
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 220
Selection.Characters(aktuellZeichen) = "\ddot{U}"
Case 228
Selection.Characters(aktuellZeichen) = "\ddot{a}"
Case 246
Selection.Characters(aktuellZeichen) = "\ddot{o}"
Case 248
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 252
Selection.Characters(aktuellZeichen) = "\ddot{u}"
Case 913
Selection.Characters(aktuellZeichen) = "\Alpha "
Case 914
Selection.Characters(aktuellZeichen) = "\Beta "
Case 915
Selection.Characters(aktuellZeichen) = "\Gamma "
Case 916
Selection.Characters(aktuellZeichen) = "\Delta "
Case 917
Selection.Characters(aktuellZeichen) = "\Epsilon "
Case 918
Selection.Characters(aktuellZeichen) = "\Zeta "
Case 919
Selection.Characters(aktuellZeichen) = "\Eta "
Case 920
Selection.Characters(aktuellZeichen) = "\Theta "
Case 921
Selection.Characters(aktuellZeichen) = "\Iota "
Case 922
Selection.Characters(aktuellZeichen) = "\Kappa "
Case 923
Selection.Characters(aktuellZeichen) = "\Lambda "
Case 924
Selection.Characters(aktuellZeichen) = "\Mu "
Case 925
Selection.Characters(aktuellZeichen) = "\Nu "
Case 926
Selection.Characters(aktuellZeichen) = "\Omicron "
Case 927
Selection.Characters(aktuellZeichen) = "\Xi "
Case 928
Selection.Characters(aktuellZeichen) = "\Pi "
Case 929
Selection.Characters(aktuellZeichen) = "\Rho "
Case 931
Selection.Characters(aktuellZeichen) = "\Sigma "
Case 932
Selection.Characters(aktuellZeichen) = "\Tau "
Case 933
Selection.Characters(aktuellZeichen) = "\Upsilon "
Case 934
Selection.Characters(aktuellZeichen) = "\Phi "
Case 935
Selection.Characters(aktuellZeichen) = "\Chi "
Case 936
Selection.Characters(aktuellZeichen) = "\Psi "
Case 937
Selection.Characters(aktuellZeichen) = "\Omega "
Case 945
Selection.Characters(aktuellZeichen) = "\alpha "
Case 946
Selection.Characters(aktuellZeichen) = "\beta "
Case 947
Selection.Characters(aktuellZeichen) = "\gamma "
Case 948
Selection.Characters(aktuellZeichen) = "\delta "
Case 949
Selection.Characters(aktuellZeichen) = "\epsilon "
Case 950
Selection.Characters(aktuellZeichen) = "\zeta "
Case 951
Selection.Characters(aktuellZeichen) = "\eta "
Case 952
Selection.Characters(aktuellZeichen) = "\theta "
Case 953
Selection.Characters(aktuellZeichen) = "\iota "
Case 954
Selection.Characters(aktuellZeichen) = "\kappa "
Case 955
Selection.Characters(aktuellZeichen) = "\lambda "
Case 956
Selection.Characters(aktuellZeichen) = "\mu "
Case 957
Selection.Characters(aktuellZeichen) = "\nu "
Case 958
Selection.Characters(aktuellZeichen) = "\xi "
Case 959
Selection.Characters(aktuellZeichen) = "\omicron "
Case 960
Selection.Characters(aktuellZeichen) = "\pi "
Case 961
Selection.Characters(aktuellZeichen) = "\rho "
Case 962
Selection.Characters(aktuellZeichen) = "\varsigma "
Case 963
Selection.Characters(aktuellZeichen) = "\sigma "
Case 964
Selection.Characters(aktuellZeichen) = "\tau "
Case 965
Selection.Characters(aktuellZeichen) = "\upsilon "
Case 966
Selection.Characters(aktuellZeichen) = "\phi "
Case 967
Selection.Characters(aktuellZeichen) = "\chi "
Case 968
Selection.Characters(aktuellZeichen) = "\Psi "
Case 969
Selection.Characters(aktuellZeichen) = "\omega "
Case 8729
Selection.Characters(aktuellZeichen) = "\cdot "
Case 8734
Selection.Characters(aktuellZeichen) = "\infty "
Case 8776
Selection.Characters(aktuellZeichen) = "\approx "
'Case 8800
'Selection.Characters(aktuellZeichen) = "\ungleich "
Case 8804
Selection.Characters(aktuellZeichen) = "\le "
Case 8805
Selection.Characters(aktuellZeichen) = "\ge "
End Select
Next
'Schriftart Symbol
Schriftart = Selection.Font.Name
Formel = Selection
Länge = Len(Formel)
d = 0
If Schriftart = "" Then
d = 1
Schriftart = Selection.Characters(Länge).Font.Name
If Schriftart = "Symbol" Then
Schriftart = Selection.Characters(1).Font.Name
If Schriftart = "Symbol" Then
For c = 2 To Länge - 1
Schriftart = Selection.Characters(c).Font.Name
If Schriftart <> "Symbol" Then Exit For
Next
End If
End If
End If
If d = 1 Or Schriftart = "Symbol" Then 'verhindert Bremse
For aktuellZeichen = Länge To 1 Step -1
If Selection.Characters(aktuellZeichen).Font.Name = "Symbol" Then
Tz = Mid(Formel, aktuellZeichen, 1)
e = AscW(Tz)
e = e Mod 256
If e < 0 Then e = e + 256
If e < 64 Then
Selection.Characters(aktuellZeichen) = Chr(e)
End If
Selection.Characters(aktuellZeichen).Font.Name = Schriftart
Select Case e
Case 65
Selection.Characters(aktuellZeichen) = "\Alpha "
Case 66
Selection.Characters(aktuellZeichen) = "\Beta "
Case 67
Selection.Characters(aktuellZeichen) = "\Chi "
Case 68
Selection.Characters(aktuellZeichen) = "\Delta "
Case 69
Selection.Characters(aktuellZeichen) = "\Epsilon "
Case 70
Selection.Characters(aktuellZeichen) = "\Phi "
Case 71
Selection.Characters(aktuellZeichen) = "\Gamma "
Case 72
Selection.Characters(aktuellZeichen) = "\Eta "
Case 73
Selection.Characters(aktuellZeichen) = "\Iota "
Case 74
Selection.Characters(aktuellZeichen) = "\vartheta "
Case 75
Selection.Characters(aktuellZeichen) = "\Kappa "
Case 76
Selection.Characters(aktuellZeichen) = "\Lambda "
Case 77
Selection.Characters(aktuellZeichen) = "\Mu "
Case 78
Selection.Characters(aktuellZeichen) = "\Nu "
Case 79
Selection.Characters(aktuellZeichen) = "\Omicron "
Case 80
Selection.Characters(aktuellZeichen) = "\Pi "
Case 81
Selection.Characters(aktuellZeichen) = "\Theta "
Case 82
Selection.Characters(aktuellZeichen) = "\Rho "
Case 83
Selection.Characters(aktuellZeichen) = "\Sigma "
Case 84
Selection.Characters(aktuellZeichen) = "\Tau "
Case 85
Selection.Characters(aktuellZeichen) = "\Upsilon "
Case 86
Selection.Characters(aktuellZeichen) = "\varsigma "
Case 87
Selection.Characters(aktuellZeichen) = "\Omega "
Case 88
Selection.Characters(aktuellZeichen) = "\Xi "
Case 89
Selection.Characters(aktuellZeichen) = "\Psi "
Case 90
Selection.Characters(aktuellZeichen) = "\Zeta "
Case 97
Selection.Characters(aktuellZeichen) = "\alpha "
Case 98
Selection.Characters(aktuellZeichen) = "\beta "
Case 99
Selection.Characters(aktuellZeichen) = "\chi "
Case 100
Selection.Characters(aktuellZeichen) = "\delta "
Case 101
Selection.Characters(aktuellZeichen) = "\epsilon "
Case 102
Selection.Characters(aktuellZeichen) = "\phi "
Case 103
Selection.Characters(aktuellZeichen) = "\gamma "
Case 104
Selection.Characters(aktuellZeichen) = "\eta "
Case 105
Selection.Characters(aktuellZeichen) = "\iota "
Case 106
Selection.Characters(aktuellZeichen) = "\kappa "
Case 107
Selection.Characters(aktuellZeichen) = "\lambda "
Case 108
Selection.Characters(aktuellZeichen) = "\mu "
Case 109
Selection.Characters(aktuellZeichen) = "\nu "
Case 110
Selection.Characters(aktuellZeichen) = "\omicron "
Case 111
Selection.Characters(aktuellZeichen) = "\pi "
Case 112
Selection.Characters(aktuellZeichen) = "\theta "
Case 113
Selection.Characters(aktuellZeichen) = "\rho "
Case 114
Selection.Characters(aktuellZeichen) = "\sigma "
Case 115
Selection.Characters(aktuellZeichen) = "\tau "
Case 116
Selection.Characters(aktuellZeichen) = "\upsilon "
Case 117
Selection.Characters(aktuellZeichen) = "\varpi "
Case 118
Selection.Characters(aktuellZeichen) = "\omega "
Case 119
Selection.Characters(aktuellZeichen) = "\xi "
Case 120
Selection.Characters(aktuellZeichen) = "\psi "
Case 121
Selection.Characters(aktuellZeichen) = "\zeta "
Case 163
Selection.Characters(aktuellZeichen) = "\le "
Case 165
Selection.Characters(aktuellZeichen) = "\infty "
Case 176
Selection.Characters(aktuellZeichen) = "^\circ "
Case 177
Selection.Characters(aktuellZeichen) = "\pm "
Case 179
Selection.Characters(aktuellZeichen) = "\ge "
'Case 185
'Selection.Characters(aktuellZeichen) = "ungleich "
Case 187
Selection.Characters(aktuellZeichen) = "\approx "
Case 198
Selection.Characters(aktuellZeichen) = "\varnothing "
Case 213
Selection.Characters(aktuellZeichen) = "\Pi "
Case 229
Selection.Characters(aktuellZeichen) = "\Sigma "
End Select
End If
Next
End If
'bearbeitet Lambdaquer
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 20 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "\o(" Then
c = 0
Tz = Mid(Formel, aktuellZeichen + 3, 11)
If Tz = "\lambda ;¯)" Or Tz = "¯;\lambda )" Then c = 1: d = 0
Tz = Mid(Formel, aktuellZeichen + 3, 19)
If Tz = "\lambda ;\s\up1(¯))" Or Tz = "\s\up1(¯);\lambda )" Then c = 1: d = 1
If c = 1 Then
With Selection
.Characters(aktuellZeichen + 2) = "v"
.Characters(aktuellZeichen + 3) = "e"
.Characters(aktuellZeichen + 4) = "r"
.Characters(aktuellZeichen + 5) = "l"
.Characters(aktuellZeichen + 6) = "i"
.Characters(aktuellZeichen + 7) = "n"
.Characters(aktuellZeichen + 8) = "e"
.Characters(aktuellZeichen + 9) = "{"
.Characters(aktuellZeichen + 10) = "\"
.Characters(aktuellZeichen + 11) = "l"
.Characters(aktuellZeichen + 12) = "a"
End With
If d = 0 Then
Selection.Characters(aktuellZeichen + 13) = "mbda }"
Else
With Selection
.Characters(aktuellZeichen + 13) = "m"
.Characters(aktuellZeichen + 14) = "b"
.Characters(aktuellZeichen + 15) = "d"
.Characters(aktuellZeichen + 16) = "a"
.Characters(aktuellZeichen + 17) = " "
.Characters(aktuellZeichen + 18) = "}"
.Characters(aktuellZeichen + 19) = ""
.Characters(aktuellZeichen + 19) = ""
.Characters(aktuellZeichen + 19) = ""
End With
End If
End If
End If
Next
End Function
Function Reversetranslatase(ByVal Hemmung As Integer) As Integer
'Wikipedia zu EQ
Dim Länge, aktuellZeichen, Klammersumme, Tausch As Integer
Dim c, d, e, Endzeichen, Verkürzung, Azeichen As Integer
Dim Zeichen, Formel, Tz, Tt, Symbol, Schriftart, Schriftart2 As String
Reversetranslatase = 1
Formel = Selection
Länge = Len(Formel)
For aktuellZeichen = Länge - 9 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "\" Then
c = 1
Endzeichen = 1
While c = 1
Tt = Mid(Formel, aktuellZeichen + Endzeichen, 1)
If Tt <> "" Then
d = Asc(Tt)
Else
d = 63
End If
If (d > 64 And d < 91) Or (d > 96 And d < 123) Then
c = 1
Endzeichen = Endzeichen + 1
ElseIf d = 123 Then
Endzeichen = Endzeichen + 3
c = 0
Else
c = 0
End If
Wend
Tt = Mid(Formel, aktuellZeichen + 1, Endzeichen - 1)
e = 1
Select Case Tt
Case "cdot"
Symbol = ChrW(183)
Case "circ"
Symbol = ChrW(186)
aktuellZeichen = aktuellZeichen - 1
Case "ddot{A}"
Symbol = ChrW(196)
Case "ddot{O}"
Symbol = ChrW(214)
Case "ddot{U}"
Symbol = ChrW(220)
Case "ddot{a}"
Symbol = ChrW(228)
Case "ddot{o}"
Symbol = ChrW(246)
Case "varnothing"
Symbol = ChrW(248)
Case "ddot{u}"
Symbol = ChrW(252)
Case "Alpha"
Symbol = ChrW(913)
Case "Beta"
Symbol = ChrW(914)
Case "Gamma"
Symbol = ChrW(915)
Case "Delta"
Symbol = ChrW(916)
Case "Epsilon"
Symbol = ChrW(917)
Case "Zeta"
Symbol = ChrW(918)
Case "Eta"
Symbol = ChrW(919)
Case "Theta"
Symbol = ChrW(920)
Case "Iota"
Symbol = ChrW(921)
Case "Kappa"
Symbol = ChrW(922)
Case "Lambda"
Symbol = ChrW(923)
Case "Mu"
Symbol = ChrW(924)
Case "Nu"
Symbol = ChrW(925)
Case "Omicron"
Symbol = ChrW(926)
Case "Xi"
Symbol = ChrW(927)
Case "Pi"
Symbol = ChrW(928)
Case "Rho"
Symbol = ChrW(929)
Case "Sigma"
Symbol = ChrW(931)
Case "Tau"
Symbol = ChrW(932)
Case "Upsilon"
Symbol = ChrW(933)
Case "Phi"
Symbol = ChrW(934)
Case "Chi"
Symbol = ChrW(935)
Case "Psi"
Symbol = ChrW(936)
Case "Omega"
Symbol = ChrW(937)
Case "alpha"
Symbol = ChrW(945)
Case "beta"
Symbol = ChrW(946)
Case "gamma"
Symbol = ChrW(947)
Case "delta"
Symbol = ChrW(948)
Case "epsilon"
Symbol = ChrW(949)
Case "zeta"
Symbol = ChrW(950)
Case "eta"
Symbol = ChrW(951)
Case "theta"
Symbol = ChrW(952)
Case "iota"
Symbol = ChrW(953)
Case "kappa"
Symbol = ChrW(954)
Case "lambda"
Symbol = ChrW(955)
Case "mu"
Symbol = ChrW(956)
Case "nu"
Symbol = ChrW(957)
Case "xi"
Symbol = ChrW(958)
Case "omicron"
Symbol = ChrW(959)
Case "pi"
Symbol = ChrW(960)
Case "rho"
Symbol = ChrW(961)
Case "varsigma"
Symbol = ChrW(962)
Case "sigma"
Symbol = ChrW(963)
Case "tau"
Symbol = ChrW(964)
Case "upsilon"
Symbol = ChrW(965)
Case "phi"
Symbol = ChrW(966)
Case "chi"
Symbol = ChrW(967)
Case "Psi"
Symbol = ChrW(968)
Case "omega"
Symbol = ChrW(969)
Case "infty"
Symbol = ChrW(8734)
Case "approx"
Symbol = ChrW(8776)
Case "ungleich"
Symbol = ChrW(8800)
Case "le"
Symbol = ChrW(8804)
Case "ge"
Symbol = ChrW(8805)
Case Else
e = 0
End Select
If e = 1 Then
If d = 32 Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen + 1)
Else
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Symbol & Mid(Formel, aktuellZeichen + Endzeichen)
End If
End If
End If
Next
'Komma
Länge = Len(Formel)
For aktuellZeichen = Länge - 9 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 3)
If Tz = "{,}" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "," & Mid(Formel, aktuellZeichen + 3)
End If
Next
'overline
Länge = Len(Formel)
For aktuellZeichen = Länge - 17 To 7 Step -1 '77
Tz = Mid(Formel, aktuellZeichen, 10)
If Tz = "\overline{" Then
Tt = Mid(Formel, aktuellZeichen + 11, 1)
If Tt = "}" Then
Mid(Formel, aktuellZeichen + 2, 8) = "(\s\up1("
Mid(Formel, aktuellZeichen + 11, 1) = ")"
Formel = Mid(Formel, 1, aktuellZeichen + 9) & "¯);" & Mid(Formel, aktuellZeichen + 10)
End If
End If
Next
'bearbeitet Wurzeln
Länge = Len(Formel)
For aktuellZeichen = Länge - 14 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 5)
If Tz = "\sqrt" Then
Formel = Mid(Formel, 1, aktuellZeichen) & "r(" & Mid(Formel, aktuellZeichen + 5)
Endzeichen = aktuellZeichen + 3
Tz = Mid(Formel, Endzeichen, 1)
If Tz = "[" Then
Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1)
While Tz <> "]"
Endzeichen = Endzeichen + 1
Tz = Mid(Formel, Endzeichen, 1)
If Tz = "" Then Tz = "]"
Wend
Formel = Mid(Formel, 1, Endzeichen - 1) & Mid(Formel, Endzeichen + 1)
Tz = Mid(Formel, Endzeichen, 1)
End If
If Tz = "{" Then
Mid(Formel, Endzeichen, 1) = ";"
Klammersumme = 1
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Tz = Mid(Formel, Endzeichen, 1)
Klammersumme = Klammersumme + Klammer2(Tz)
Wend
Mid(Formel, Endzeichen, 1) = ")"
End If
End If
Next
'Brüche
Länge = Len(Formel)
For aktuellZeichen = Länge - 17 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 5)
If Tz = "\frac" Then
Mid(Formel, aktuellZeichen + 5, 1) = "("
Formel = Mid(Formel, 1, aktuellZeichen + 1) & Mid(Formel, aktuellZeichen + 5)
Klammersumme = 1
Endzeichen = aktuellZeichen + 2
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1))
Wend
Formel = Mid(Formel, 1, Endzeichen - 1) & ";" & Mid(Formel, Endzeichen + 2)
Klammersumme = 1
While Klammersumme > 0
Endzeichen = Endzeichen + 1
Klammersumme = Klammersumme + Klammer2(Mid(Formel, Endzeichen, 1))
Wend
Mid(Formel, Endzeichen, 1) = ")"
End If
Next
'große Klammern
Länge = Len(Formel)
For aktuellZeichen = Länge - 13 To 7 Step -1
Tz = Mid(Formel, aktuellZeichen, 6)
If Tz = "\right" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & Mid(Formel, aktuellZeichen + 6)
End If
If Tz = "\left(" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "\b" & Mid(Formel, aktuellZeichen + 5)
End If
Next
'^2 ^3
Länge = Len(Formel)
For aktuellZeichen = Länge - 8 To 8 Step -1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = "2" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "²" & Mid(Formel, aktuellZeichen + 2)
ElseIf Tz = "3" Then
Formel = Mid(Formel, 1, aktuellZeichen - 1) & "³" & Mid(Formel, aktuellZeichen + 2)
End If
End If
Next
Länge = Len(Formel)
Formel = "EQ " & Mid(Formel, 9, Länge - 15)
Länge = Länge - 12
Selection.TypeText Formel
Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'stellt hochtief von DNApolymerase mit {} statt ()
aktuellZeichen = 1
For aktuellZeichen = Länge To 5 Step -1
Verkürzung = 0
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "^" Then
d = 1
ElseIf Tz = "_" Then
d = -1
Else
d = 0
End If
If d <> 0 Then
Tz = Mid(Formel, aktuellZeichen + 1, 1)
If Tz = " " Then
Selection.Characters(aktuellZeichen + 1) = ""
Formel = Selection
Tz = Mid(Formel, aktuellZeichen + 1, 1)
End If
Selection.Characters(aktuellZeichen) = "" '+1 im string
If Tz = "{" Then
Klammersumme = 1
Selection.Characters(aktuellZeichen) = ""
While Klammersumme > 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
ElseIf d = -1 Then
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 2, 1)
Klammersumme = Klammersumme + Klammer2(Tz)
If Tz = "^" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
ElseIf Tz = "_" Then
Selection.Characters(aktuellZeichen).InsertBefore Tz
d = 0
End If
Wend
Selection.Characters(aktuellZeichen) = ""
aktuellZeichen = aktuellZeichen - Verkürzung
Else 'Tz <> "{"
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
While c = 0
If d = 1 Then
Selection.Characters(aktuellZeichen).Font.Superscript = True
Else
Selection.Characters(aktuellZeichen).Font.Subscript = True
End If
aktuellZeichen = aktuellZeichen + 1
Verkürzung = Verkürzung + 1
Tz = Mid(Formel, aktuellZeichen + 1, 1)
c = Steuerzeichen(Tz)
If Tz = "" Or Tz = ";" Then
c = 1
End If
Wend
aktuellZeichen = aktuellZeichen - Verkürzung
End If
End If
Next
If Hemmung = 1 Then
Else
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Fields.Update
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
End Function
Sub Formelwürfel()
Dim a, b, c, d, e, durch, Steuer As Integer
Dim Klammersumme, Zusatzlänge, Länge, aktuellZeichen As Integer
Dim X, Y, Formel, Tz As String
Dim Ort(3), Position(255) As Integer
Application.ScreenUpdating = False
For d = 1 To 20 'Anzahl der Formeln
Selection.TypeText ("2")
Zusatzlänge = 0
durch = 0
c = 200 'Komplexitzität der Formel
Klammersumme = 0
For b = 1 To c
a = Int((122 - 32 + 1) * Rnd + 32)
X = Chr(a)
If Steuer = 0 Then
For e = 1 To 4
If Steuerzeichen(X) = 0 Then
a = Int((122 - 32 + 1) * Rnd + 32)
X = Chr(a)
End If
If X = "!" Or X = "§" Or X = "%" Then
Exit For
End If
If X = "+" Or X = "j" Or X = "#" Or X = "&" Or X = "$" Then
X = "/"
Exit For
End If
Next
Else
If a < 60 Then
a = a + 20
X = Chr(a)
Steuer = 0
End If
End If
If a = 41 And Klammersumme = 0 Then
a = 40
End If
If a > 65 And a < 122 Then
If Int(4 * Rnd) = 3 Then
a = a + 848
End If
End If
X = ChrW(a)
If b = 1 And (X = "^" Or X = "_") Then
X = "1"
End If
If X = "(" Then
Klammersumme = Klammersumme + 1
ElseIf X = ")" Then
Klammersumme = Klammersumme - 1
End If
If X = "!" Or X = "§" Or X = "%" Or X = "." Or X = "@" Then
If Klammersumme > 0 Then
X = Chr(Int((122 - 98) * Rnd + 97)) & ")^0,5+"
Zusatzlänge = Zusatzlänge + 6
Klammersumme = Klammersumme - 1
Else
X = "^0,5-"
Zusatzlänge = Zusatzlänge + 4
End If
ElseIf X = ":" Or X = ";" Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1
If Steuerzeichen(Selection.Characters(1)) = 0 Then
X = "^(1/" & Chr(Int((122 - 98) * Rnd + 97)) & ")"
Zusatzlänge = Zusatzlänge + 5
Else
X = "*"
End If
Selection.MoveRight Unit:=wdCharacter, Count:=1
ElseIf X = "\" Then
X = "+"
ElseIf X = "j" Or X = "#" Or X = "&" Or X = "$" Then
X = "/"
ElseIf X = "=" Then
If Klammersumme = 0 Then
X = "("
Klammersumme = Klammersumme + 1
Else
X = ")"
Klammersumme = Klammersumme - 1
End If
End If
If X = "/" Or X = "*" Then
If durch = 1 Then
X = "-"
End If
If X = "/" And durch = 0 Then
durch = 1
End If
End If
If X = "+" Or X = "-" Then
durch = 0
End If
If b = c Then
If X = "^" Or X = "_" Then
X = "j"
End If
End If
If X = "/" Then
X = Chr(Int((122 - 98) * Rnd + 97)) & X & Chr(Int((122 - 98) * Rnd + 97))
Zusatzlänge = Zusatzlänge + 2
End If
Selection.TypeText (X)
X = Left(X, 1)
Steuer = Steuerzeichen(X)
Next
If Klammersumme > 0 Then
For b = 1 To Klammersumme
Selection.TypeText (")")
Next
End If
Selection.MoveLeft Unit:=wdCharacter, Count:=c + Zusatzlänge + Klammersumme + 1, Extend:=wdExtend
'Selection.Copy
'Länge = Len(Selection)
'Selection.MoveDown Unit:=wdLine, Count:=1
'Selection.Paste
'Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
a = DNApolymerase()
a = RNApolymerase(1)
'Selection.Copy
'Länge = Len(Selection)
'Selection.MoveDown Unit:=wdLine, Count:=1
'Selection.Paste
'Selection.MoveLeft Unit:=wdCharacter, Count:=Länge, Extend:=wdExtend
'baut große Objekte herum
For c = 1 To 5 'Anzahl der großen Objekte
Formel = Selection
Länge = Len(Formel)
X = ""
Klammersumme = 0
aktuellZeichen = 3
e = 0
While aktuellZeichen < Länge
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "\" Then
aktuellZeichen = aktuellZeichen + 2
Tz = Mid(Formel, aktuellZeichen, 1)
End If
If Tz = "(" Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
While Klammersumme > 0
Klammersumme = Klammersumme + Klammer(Tz)
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
If Tz = "(" And Klammersumme = 0 Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 1
Tz = Mid(Formel, aktuellZeichen, 1)
'e = e + 1
'Position(e) = aktuellZeichen
'X = X & Tz
End If
If Tz = "\" And Klammersumme = 0 Then
Klammersumme = 1
aktuellZeichen = aktuellZeichen + 3
Tz = Mid(Formel, aktuellZeichen, 1)
'e = e + 1
'Position(e) = aktuellZeichen
'X = X & Tz
End If
Wend
End If
e = e + 1
Position(e) = aktuellZeichen
X = X & Tz
Wend
e = Len(X)
a = Int(Rnd() * 4 + 1)
If c = 1 Then a = 4
Ort(1) = Int(Rnd() * (e + 1) + 1)
Ort(2) = Int(Rnd() * (e + 1) + 1)
If Ort(1) = Ort(2) Then Ort(2) = Ort(1) + 1
If Ort(2) < Ort(1) Then
Ort(0) = Ort(1) ' Ort 1 ist kleiner
Ort(1) = Ort(2)
Ort(2) = Ort(0)
End If
If Ort(2) > e Then
Position(Ort(2)) = Länge
Ort(1) = Ort(1) - 1
If Ort(1) = 0 Then Ort(1) = 1
End If
If Ort(2) - Ort(1) = 1 Then
If Position(Ort(2)) - Position(Ort(1)) = 1 Then
If Ort(1) > 2 Then Ort(1) = Ort(1) \ 2 + 1
End If
End If
If a = 3 Or a = 4 Then
Ort(3) = (Ort(2) + Ort(1)) \ 2
If Ort(3) = Ort(1) Then a = 2
If Ort(2) = Ort(3) Then a = 1
If Ort(2) - e = 2 Then
a = 1
End If
End If
X = X
If a = 1 Then 'Ort 2 = Ende, Ort 1 = Anfang und Ort 3 = Mitte
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
Selection.Characters(Position(Ort(1))).InsertAfter ("\B(") 'a
Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue
End If
If a = 2 Then
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
Selection.Characters(Position(Ort(1))).InsertAfter ("\r(;") 'a
Selection.Characters(Position(Ort(1))).Font.Color = wdColorSkyBlue
End If
If a = 3 Or a = 4 Then
Selection.Characters(Position(Ort(2))).InsertBefore (")")
Selection.Characters(Position(Ort(2))).Font.Color = wdColorSkyBlue
If Selection.Characters(Position(Ort(3))) = "+" Then
Selection.Characters(Position(Ort(3))) = ";"
Selection.Characters(Position(Ort(3))).Font.Color = wdColorSkyBlue
Else
Selection.Characters(Position(Ort(3))).InsertAfter (";") 'a
Selection.Characters(Position(Ort(3)) + 1).Font.Color = wdColorSkyBlue
End If
Selection.Characters(Position(Ort(1))).InsertAfter ("\F(") 'a
Selection.Characters(Position(Ort(1)) + 1).Font.Color = wdColorSkyBlue
End If
Next
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.Fields.Update
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
If Selection = "Fehler" Then
d = d + 1
End If
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.TypeParagraph
Selection.MoveUp Unit:=wdLine, Count:=1
Next
Application.ScreenUpdating = True
End Sub
Sub Zeicheneinkreisen()
Dim Zeichenwert, Länge, c, d, e As Integer
Dim Zeichen As String
'c = 11 Or c = 13
Zeichen = Selection
d = Asc(Zeichen)
If d = 11 Or d = 13 Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
Zeichen = Selection
d = Asc(Zeichen)
If d = 11 Or d = 13 Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End If
Zeichen = Selection
Länge = Len(Zeichen)
Zeichenwert = Asc(Zeichen)
c = 0
If (Zeichenwert > 48 And Zeichenwert < 58) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9263
c = 1
End If
If (Zeichenwert > 64 And Zeichenwert < 91) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9333
c = 1
End If
If (Zeichenwert > 96 And Zeichenwert < 123) And Länge = 1 Then
Zeichenwert = Zeichenwert + 9327
c = 1
End If
If Länge = 2 Then
Select Case Zeichen
Case "10"
Zeichenwert = 9321
c = 1
Case "11"
Zeichenwert = 9322
c = 1
Case "12"
Zeichenwert = 9323
c = 1
Case "13"
Zeichenwert = 9324
c = 1
Case "14"
Zeichenwert = 9325
c = 1
Case "15"
Zeichenwert = 9326
c = 1
Case "16"
Zeichenwert = 9327
c = 1
Case "17"
Zeichenwert = 9328
c = 1
Case "18"
Zeichenwert = 9329
c = 1
Case "19"
Zeichenwert = 9330
c = 1
Case "20"
Zeichenwert = 9331
c = 1
End Select
End If
If c = 1 Then
Selection.TypeText ChrW(Zeichenwert)
End If
End Sub