LaTeX Schriftzeichen in Tkinter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Hallöchen zusammen,

ich arbeite seit ein paar Wochen an einem Programm welches im wesentlichen mathematische Inhalte darstellen soll.

Nun wollte ich den ganzen Spaß zuerst als Webanwendung schreiben - dachte PHP sei da eine gute Idee.
Ich bin jedoch jetzt auf eine Desktop-Anwendung umgestiegen. Python wurde mir ans Herz gelegt.

Ich habe ein wenig in der Konsole gearbeitet und versuche jetzt noch die letzten Probleme mit dem GUI rauszuhauen.
(auf Ubuntu läuft der Spaß, auf meinem Mac noch nicht)

Ich brauche vorerst keine Eingabefunktion. Sachen wie x^2 sollen also nicht eingegeben werden.
Ich möchte im weitesten Sinne ein Lexikon schreiben. x^2 soll also vordefiniert ausgegeben werden.

In PHP war das mit dem LaTeX Code Browserübergreifend schön einfach.
Bei Python bin ich da noch nicht ganz hinter gestiegen.

Die Frage: Gibt es eine (einfache) Möglichkeit mittels Text-Befehl eine LaTeX Ausgabe zu erzeugen?

z.B. irgendwie sowas:

Code: Alles auswählen

import tkinter as tk

Fenster = tk.Tk()

w = Label(Fenster, text=$x^2$)
w.pack()

Fenster.mainloop()
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Moin,

mein erster Ansatz wäre, das LaTeX mit `matplotlib` zu rendern und dann mit dem `TkAgg`-Backend in die `Tk`-Anwendung einzubauen. Das wird zum Beispiel hier gezeigt. Das wird aber nicht sehr performant sein, insbesondere wenn man `matplotlib` so einstellt, dass es LaTeX aufruft und das ganze nicht selber rendert.

Wenn das LaTeX immer gleich ist, könnte man es auch in ein Bild (PNG oder SVG) kompilieren und dann das Bild anzeigen.

Je nach dem, was du machst, könnte auch eine Webanwendung Sinn machen. Mittels MathJax ist es quasi trivial, LaTeX in HTML einzubauen. Python eignet sich übrigens auch für Webanwendungen – meiner Meinung nach viel besser als PHP.

Um etwas konkreteres sagen zu können, müsstest du ein wenig genauer beschreiben, was du erreichen möchtest. Für ein Lexikon könnte ich mir zum Beispiel auch vorstellen, ein Wiki zu benutzen.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Einfache Moeglichkeit gibt's nicht. Ich weiss jetzt nicht so genau wie du das mit PHP gemacht hast, aber vermute mal eher MathML im Browser - das ist schlussendlich eine Uebersetzung von Latex nach MathML, und letzteres rendert der Browser.

So etwas geht mit tkinter nicht. Qt koennte da ggf. Abhilfe schaffen, aber letztlich auch "nur" dadurch, das man einen QWebView benutzt, und letztlich das gleiche macht. So ganz geil scheint das aber auch nicht: https://ibb.co/cwx5hw

Insofern ist narpfels Vorschlag im Zweifel der gangbarste, wenn auch natuerlich ziemlich aetzend weil du ein komplettes Latex laufen lassen musst.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

`matplotlib` kann LaTeX auch selbst rendern, ohne dass man LaTeX installiert haben muss. Nachteil daran ist, dass es teilweise schlechter aussieht als „richtiges“ LaTeX, allerdings ist es ein wenig schneller.

MathML würde ich persönlich nicht benutzen. MathJax sieht da schon deutlich besser aus.
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

narpfel hat geschrieben: Um etwas konkreteres sagen zu können, müsstest du ein wenig genauer beschreiben, was du erreichen möchtest. Für ein Lexikon könnte ich mir zum Beispiel auch vorstellen, ein Wiki zu benutzen.
Nicht direkt ein Lexikon.
Es handelt sich eher um eine Aufgabensammlung inklusive Lösungswege.
Alles soll flexibel sein und die Aufgaben sollen nach bestimmten Anforderungen generiert werden.

Einfaches Beispiel: Zum PQ-Formel üben gibt es nur einfache Nullstellen die zudem noch ganze Zahlen sind.
Natürlich könnte ich ein Lexikon an Aufgaben erstellen und die nach dem Zufallsprinzip aufrufen, will ich aber nicht 8)

__deets__ hat geschrieben:Ich weiss jetzt nicht so genau wie du das mit PHP gemacht hast, aber vermute mal eher MathML im Browser - das ist schlussendlich eine Uebersetzung von Latex nach MathML, und letzteres rendert der Browser.
Genauso!
Leider ist der Code in MathML für mich zu unübersichtlich.
Im Idealfall habe ich am Ende eine Offline Anwendung ...
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Freumel: Du möchtest Aufgaben und die Lösungswege dazu generieren? Also quasi einmal eine Aufgabe vom Typ „pq-Formel“ mit den Nullstellen `a` und `b` schreiben und dann programmatisch `a` und `b` durch zwei echt verschiedene ganze Zahlen ersetzen?

Du könntest mal bei IPython gucken, die haben ein Modul zum Rendern von LaTeX nach PNG.

Eventuell ist auch Sympy einen Blick wert, um die Aufgaben und/oder das LaTeX zu generieren.

Anmerkung zur pq-Formel: Ich würde für die pq-Formel nicht vorrangig ganzzahlige Nullstellen benutzen, weil man die oft einfacher durch Faktorisieren des Polynoms findet. Stichwort Satz von Vieta. Je nach Übung ist das dann Lösung durch Hinschauen. :wink:
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

narpfel hat geschrieben:@Freumel: Du möchtest Aufgaben und die Lösungswege dazu generieren? Also quasi einmal eine Aufgabe vom Typ „pq-Formel“ mit den Nullstellen `a` und `b` schreiben und dann programmatisch `a` und `b` durch zwei echt verschiedene ganze Zahlen ersetzen?

[...]

Anmerkung zur pq-Formel: Ich würde für die pq-Formel nicht vorrangig ganzzahlige Nullstellen benutzen, weil man die oft einfacher durch Faktorisieren des Polynoms findet. Stichwort Satz von Vieta. Je nach Übung ist das dann Lösung durch Hinschauen. :wink:
So in etwa.
Ich gebe regelmäßig Nachhilfe und bin Tutor für Mathematik für Ingenieure in der Uni.
Habe seit einem Jahr Aufgaben gesammelt und möchte die jetzt flexibler gestalten ohne mich ständig an den gleichen PDF's zu bedienen, oder ewig suchen zu müssen um "gute" Aufgaben zu finden.

Ich habe die Erfahrung gemacht, dass es "schlechten" Schülern leichter fällt, wenn sie ersteinmal nur ganze Zahlen sehen und dabei eventuell sogar kopfrechnen lernen (soll es ja auch noch geben :K ) - und am Anfang ist es besonders gut wenn man erstmal einen Mechanismus lernt. Das sehen lernen kommt nach meiner Erfahrung erst wenn man fundamentale Sachen (wie Punkt vor Strich ... ) versteht.
Natürlich gibt es neben der PQ-Formel noch Alternativen. Daher möchte ich auch alternative Lösungswege integrieren und den wählen der im Unterricht behandelt wird.

Oft ist es ja so, dass man irgendwie vom Lehrer oder Prof 4 Aufgaben kriegt und sobald man die durchrechnet soll man es können.
Darüber hinaus muss man dann selbst suchen oder eben immer die gleichen lösen.
Die Schüler oder Studenten suchen sich ein Thema aus und stellen es soweit wie möglich ein - z.B. Extrempunkte -> Welche Funktionen sollen diskutiert werden (Polynomfunktionen/e-Funktionen .... - mehrere gleichzeitig möglich)? -> notwendige Bedingung (übergreifend gleich) -> hinreichende Bedingung mit zweiter Ableitung oder alternativ hinreichende Bedingung mit Vorzeichen-Wechsel-Kriterium -> falls im Unterricht behandelt: entscheiden über global/lokal
Die Funktionen werden unter bestimmten Bedingungen und Übungsgrad neu generiert (am Anfang sind zumindest die x-Werte der Extrempunkte ganze Zahlen, hinterher auch rational usw.). Sodass man nicht immer die gleiche Aufgabe lösen muss, sondern auch merkt, dass man eigentlich die ganze Zeit das gleiche mit unterschiedlichen Zahlen macht ...
Ausserdem guckt man nicht immer vor eine Wand von Aufgaben und kann selbst entscheiden wann man stoppt.

Das soll auch nicht direkt übermorgen fertig werden... ich möchte immer den Teil programmieren den ich gerade brauche. Dann entwickelt sich das von selbst.
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

Und eine (ansprechende) grafische Oberfläche mit korrekter mathematischer Darstellung soll das ganze Dingen auch noch haben :roll:
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde dir zu einer webapp raten. Kannst du ja in Python im backend machen. Aber was visualisierung und einfache Programmierbarkeit angeht, ist ein Webbrowser unschlagbar.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich würde dir zu einer webapp raten.
+1

Plus du bist portable. In so fern, als dass du von jedem System, was eine Internetverbindung und einen Browser hast, darauf zugreifen kann. Vorausgesetzt, das Server Backend liegt auf einem im Intetnet erreichbaren Server.

Gruß, noisefloor
Freumel
User
Beiträge: 69
Registriert: Donnerstag 25. Januar 2018, 13:47

__deets__ hat geschrieben:Ich würde dir zu einer webapp raten. Kannst du ja in Python im backend machen. Aber was visualisierung und einfache Programmierbarkeit angeht, ist ein Webbrowser unschlagbar.
Das passt so ungefähr auch.
Ich habe mit PHP angefangen und bin da sogar schon recht weit.
Weil ich keine Lust auf MathMl hatte habe ich mir einfach die LaTeX Zeilen ausspucken lassen und anschließend in LaTeX kopiert.
Graphen habe ich keine integriert.

Die Darstellung ist cool und LaTeX (bzw. MathML) im Browser sehr leicht anzuwenden.

Allerdings wollte ich zusätzlich noch "PowerPoint" Präsentationen generieren die an einfache Flash oder CSS-Animationen erinnern.
Natürlich mit direktem Bezug zur Aufgabe - also generiert. (Als i-Tüpfelchen)

Der mathematische Teil ist ja gar nicht so schwer. Der grafische frisst die Zeit absolut auf.

Da stelle ich mir die Frage ob das im Web realisierbar ist. (Oder überhaupt ... )
Alles Browserübergreifend Responsive zu gestalten ist so komplett Ahnungslos auch nicht so einfach. :K
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Präsentationen im Browser sind einfach, wenn man reveal.js benutzt. Dazu hatte ich vor ~3,5 Jahren auch mal was für freiesMagazin geschrieben: http://www.freiesmagazin.de/mobil/freie ... _reveal_js
Ob das heute alles noch 1:1 so funktioniert weiß ich nicht, habe reveal.js lange nicht mehr benutzt.

BTW: wenn du schneller für's Web entwickeln willst, dann nimm' Python *SCNR* Du bist zumindest beim Entwickeln und beim Deployment wesentlich flexibler als mit PHP.

Gruß, noisefloor
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Nahtrag: und bzgl. des Layouts für's Web empfiehlt sich ein CSS-Framework, sofern man keine fortgeschrittenen Kenntnisse in CSS hat. Nicht falsch machen kannst du mit Bootstrap.

Gruß, noisefloor
Antworten