Latex->PNG mit PHP (mimetex Ersatz?)

Neue Frage »

MatheBlaster Auf diesen Beitrag antworten »
Latex->PNG mit PHP (mimetex Ersatz?)
Hallo,

wie bereits erwähnt, arbeite ich gerade an einem PHP Skript, welches Latex erzeugt und daraus schöne PNG Bilder erzeugt, und vielleicht mal als mimetex Ersatz dienen kann.

http://217.160.92.215/~burn/math2png/math2png.php?f=\cos^2%20x%20%2B%20\sin^2%20x%20=%201\intertext{Eine%20schoene%20Ueberleitung}\cosh^2%20x%20-%20\sinh^2%20x%20=%201

Hier könnt ihr es schon mal ausprobieren:
http://217.160.92.215/~burn/math2png/math2png.php?f=


Wie man sieht, werden die gewünschten Anweisungen einfach als Parameter f= an den PHP Skript übergeben. Da der Ausdruck einfach nur in eine
code:
1:
2:
3:
\begin{align*}
...
\end{align*}
Umgebung eingefügt wird, sind auch Zeilenumbrüche möglich. Daraus folgt für die Insider Augenzwinkern auch, dass amsmath komplett unterstützt wird.
Das '+' Zeichen muss leider noch als %2B in der URL übersetzt werden (danke an Jürgen), ansonsten sind mir keine Bugs bekannt. Die Übergabe in der URL wird aber sicherlich noch weitere Einschränkungen haben.

Also, happy testing und über alle Anregungen bin ich dankbar.
m00xi Auf diesen Beitrag antworten »

Hmm, ja das mit der Übergabe ist natürlich nicht so einfach, da da ja einige Sonderzeichen Probleme machen. Einen großen Gefallen würdest du jedem tuen, wenn du ein kleines Skript programmierst, welches in einer Textarea eingegebenen LaTeX Code so formatiert, dass er als Parameter deiner PHP-Skripts aufgerufen werden kann. Da reicht ja auch ein einfacherer Converter der alle Zeichen in ihre Hexadezimalschreibweise überführt.

Noch ne anregung: warum align-env? warum nimmst du nicht Array? Damit gibt es für mathematische Ausdrücke viel schönere Möglichkeiten, oder nicht?

Ansonsten, schöne Sache.
Mit ein wenig "In-Ascii-Tabelle-Guggn" habe ich auch was Schönes hinbekommen:
http://217.160.92.215/~burn/math2png/math2png.php?f=(a%2Bb)^n=\sum_{i=0}^{n}{{n\choose%20i}a^{n-i}b^i}

Gruß
Hanno
m00xi Auf diesen Beitrag antworten »

Yeah, das ist spaßig!

http://217.160.92.215/~burn/math2png/math2png.php?f=f(x)%26=%26%20x^n\\f'(x)%26=%26\lim_{x\to%200}\frac{dy}{dx}\\%26=%26\lim_{x\to%200}\frac{f(x%2Bdx)-f(x)}{dx}\\%26=%26\lim_{x\to%200}\frac{(x%2Bdx)^n-x^n}{dx}\\%26=%26\lim_{x\to%200}\frac{\sum^{n}_{i=0}{{n\choose%20i}x^{n-i}dx^i}-x^n}{dx}\\%26=%26\lim_{x\to%200}\frac{\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^i}}{dx}\\%26=%26\lim_{x\to%200}\frac{dx\left(\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^{i-1}}\right)}{dx}\\%26=%26\lim_{x\to%200}\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^{i-1}}\\%26=%26\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}0^{i-1}}\\%26=%26nx^{n-1}\\%26%26q.e.d

Und gleich noch einen Drauf!!

http://217.160.92.215/~burn/math2png/math2png.php?f=f(x)%26=%26%20x^n\\f'(x)%26=%26\lim_{x\to%200}\frac{dy}{dx}\\%26=%26\lim_{x\to%200}\frac{f(x%2Bdx)-f(x)}{dx}\\%26=%26\lim_{x\to%200}\frac{(x%2Bdx)^n-x^n}{dx}\\%26=%26\lim_{x\to%200}\frac{\sum^{n}_{i=0}{{n\choose%20i}x^{n-i}dx^i}-x^n}{dx}\\%26=%26\lim_{x\to%200}\frac{\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^i}}{dx}\\%26=%26\lim_{x\to%200}\frac{dx\left(\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^{i-1}}\right)}{dx}\\%26=%26\lim_{x\to%200}\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}dx^{i-1}}\\%26=%26\sum^{n}_{i=1}{{n\choose%20i}x^{n-i}0^{i-1}}\\%26=%26nx^{n-1}\\%26%26q.e.d\\\\\sum_{i=1}^{k}{{k%20\choose%20i}(-1)^{i%2B1}}%20%26%20=%20%26%20-\left(%20\sum_{i=1}^{k}{{k%20\choose%20i}(-1)^i}\right)%20\\%20%26%20=%20%26%20-\left(%20\sum_{i=0}^{k}{{k%20\choose%20i}(-1)^i}-1\right)%20\\%26%20=%20%26%20-\left(%20\sum_{i=0}^{k}{{k%20\choose%20i}{1}^{k-i}(-1)^i}-1\right)%20\\%26%20=%20%26%20-\left(%20(1-1)^{n}-1\right)%20\\%26%20=%20%26%201%20\\%26%20%26%20q.e.d

:P :P
jama Auf diesen Beitrag antworten »

Das sieht seeeeehr gut aus! Danke Dir Georg Prost

Wenn das mal nicht leserlicher geworden ist Big Laugh

Zitat:
da da ja einige Sonderzeichen Probleme machen

Hm, welche wären das denn zum Beispiel?

Gruß,

Jama
MatheBlaster Auf diesen Beitrag antworten »

Wow, fettes Teil m00xi. Hast Du irgendwas spezielles gemacht, damit die '=' Zeichen untereinander ausgerichtet wurden? Das aus der URL rauszufischen ist doch nicht so ganz einfach smile

Was kann ich denn mit array schönes machen? Irgendwie benutze ich das nie, und war mit align immer sehr zufrieden. Ich lasse mich aber gerne eines besseren belehren.

@jama: relevante Sonderzeichen sind bisher '+' und '&', welches man zum anordnen braucht.
Thomas Auf diesen Beitrag antworten »

Hi,

das ist ja ein super Teil :] 8) Tanzen

Gruß,
Thomas
 
 
juergen Auf diesen Beitrag antworten »

Auch Fehlermeldungen funktionieren :]

http://217.160.92.215/~burn/math2png/math2png.php?f=1\4

Zitat:
Original von MatheBlaster
Wow, fettes Teil m00xi. Hast Du irgendwas spezielles gemacht, damit die '=' Zeichen untereinander ausgerichtet wurden?


%26 entspricht dem & Zeichen

http://217.160.92.215/~burn/math2png/math2png.php?f=4/8%26=%262/4\\%26=%261/2

code:
1:
...f=4/8%26=%262/4\\%26=%261/2
m00xi Auf diesen Beitrag antworten »

Ich programmier grad ein kleines Skript, vielleicht hilft das was :-? ich hoffe ich kriegs gleich mal hin.

EDIT:
So, mit den paar Zeilen, die ihr in den Forum code einfügen müsstet:
code:
1:
2:
3:
4:
5:
6:
7:
8:
<?
$code=stripslashes($_POST["code"]);
for ($i=0;$i<strlen($code);$i++)
    $ende.="%".bin2hex(substr($code,$i,1));
echo "<textarea rows=\"10\" cols=\"50\">[URL]http://217.160.92.215/~burn/math2png/math2png.php?f=[/URL]".$ende."</textarea>";
?>


Sollte das wunderbar gehen. Natürlich müsst ihr die Quelle für $code anpassen und die Zeile am Ende weglassen, aber $ende enthält nach der Schleife gut anwendbaren Code ( sollte es :P :P )
Ich habe das mal getestet auf http://www.Hanno-Becker.de/Converter. Da hab ich einfach meinen LaTeX Code reingepackt und das fertige lief gut.

Gruß
Hanno
juergen Auf diesen Beitrag antworten »

Zitat:
Original von m00xi
Ich programmier grad ein kleines Skript, vielleicht hilft das was :-? ich hoffe ich kriegs gleich mal hin.

EDIT:
So, mit den paar Zeilen, die ihr in den Forum code einfügen müsstet:
code:
1:
2:
3:
4:
5:
6:
7:
8:
<?
$code=stripslashes($_POST["code"]);
for ($i=0;$i<strlen($code);$i++)
    $ende.="%".bin2hex(substr($code,$i,1));
echo "<textarea rows=\"10\" cols=\"50\">[URL]http://217.160.92.215/~burn/math2png/math2png.php?f=[/URL]".$ende."</textarea>";
?>

Ähm, ja.

Warum nicht einfach mit einer Zeile z.B. das Pluszeichen umwandeln
php:
1:
$neuerstring str_replace("+""%2B"$alterstring);
m00xi Auf diesen Beitrag antworten »

Was weiß ich welche Zeichen noch falsch übertragen werden :-)
sommer87 Auf diesen Beitrag antworten »

http://217.160.92.215/~burn/math2png/math2png.php?f=Spitze\%20sieht\%20das\%20aus!

:]

genial!! Gott

smile
juergen Auf diesen Beitrag antworten »

http://217.160.92.215/~burn/math2png/math2png.php?f=%26ic\int\int\int\int\frac{\partial T_{1n}}{\partial x_{n}}dV\,dt\\=%26ic\int\int\int\int\left(\frac{\partial T_{1x}}{\partial x}%2B\frac{\partial T_{1y}}{\partial y}%2B\frac{\partial T_{1z}}{\partial z}%2B\frac{\partial T_{14}}{ic\,dt}\right)dV\,dt\\=%26ic\int dt \oint T_{1N}\,d\sigma - \frac{i}{c} \int S_x\,\,dV\\=%26ic\int dt \oint T_{1N} \,d\sigma - icG_x^{(f)}

Ich will ja nicht mecken......

Aber vielleicht könnte man an dem Zeilenabstand noch arbeiten, bei großen Konstrukten hängen die Zeilen doch etwas eng beieinander.


(Es möge mich übrigens keiner Fragen, wozu die Formel gut ist - keine Ahnung!!) :P
m00xi Auf diesen Beitrag antworten »

Sieht aber hübsch aus deine Formel :-) Ich werde mal im #latex auf freenode fragen ob man in einer align* env. die Zeilenabstände regulieren kann.

Gruß
Hanno
juergen Auf diesen Beitrag antworten »

Zitat:
Original von m00xi
Sieht aber hübsch aus deine Formel :-) Ich werde mal im #latex auf freenode fragen ob man in einer align* env. die Zeilenabstände regulieren kann.

Notfalls so:

\usepackage{setspace}

...

\begin{spacing}{3} %oder welche Abstand sonst gewünscht wird
\begin{align*}
...
\end{align*}
\end{spacing}
MatheBlaster Auf diesen Beitrag antworten »

Also das übersetzen der Zeichen lässt sich simplerweise mit der PHP Funktion urlencode realisieren, und entsprechend mit urldecode wieder zurückübersetzen. Ich werde da mal schnell was zusammenhacken...

Das mit den Zeilenabständen scheint echt Sinn zu machen. Mal schauen, was die amsmath Doku dazu zu sagen hat.

Sonst noch irgendwelche Ideen für weitere Pakete / Befehle, die eingebaut werden sollten?

Edit: So, unter http://217.160.92.215/~burn/math2png/form.php kann man jetzt tollen Latex Code eingeben, Zeilenumbrüche \\ und Alignments & sollten einwanfrei funktionieren.
DeGT Auf diesen Beitrag antworten »

Wieso funktionieren die Formeln im Moment nicht? verwirrt
WebFritzi Auf diesen Beitrag antworten »

http://217.160.92.215/~burn/math2png/math2png.php?f=2x+%26%3D+y%5C%5C%0D%0Ax+%2B+y+%26%3D+2

Aha. Jetzt hab ich's auch kapiert. Wäre natürlich noch schöner, wenn man LaTeX-Tags dazu machen könnte. Ist das schwer?

Ich fänd es auch ehrlich gesagt besser, wenn man Umgebungen selber einfügen könnte, so dass man auch mathematische Zeichen mitten im Text haben kann. Das geht ja so nicht.
juergen Auf diesen Beitrag antworten »

Zitat:
Original von WebFritzi
Ich fänd es auch ehrlich gesagt besser, wenn man Umgebungen selber einfügen könnte, so dass man auch mathematische Zeichen mitten im Text haben kann. Das geht ja so nicht.

Wieso geht das nicht. Mal probieren: http://217.160.92.215/~burn/math2png/math2png.php?f=y=x^2 - hm, geht doch. verwirrt

Da könnte man natürlich noch etwas dran rumfummeln, daß es besser in die Zeile paßt (ist einwenig nach oben verschoben); ggf auch an der Hintergrundfarbe (da die aber hier von Beitrag zu Beitrag wechselt, ist das wohl nicht ganz einfach -- oder doch, gibt es bei PNG nicht auch transparente Hintergrundfarben)

(Hm, das war jetzt mehr in Klammern gesprochen denn richtig. Das nur mal nebenbei in Klammern gesagt. :P)
MatheBlaster Auf diesen Beitrag antworten »

Wie man sieht, oder, da sie transparent ist, nicht sieht, ist die Hintergrundfarbe transparent smile

@WebFritzi: was genau meinst du mit Latex Tags? Also \cos etc. funktioniert natürlich.

Ich werde nochmal probieren, die Formeln auf Zeilenhöhe zu verschieben. Oder ich bastle einfach zwei verschiedene Skripts, eins in der align Umgebung, eins in der normalen $...$ Umgebung, das passt dann wahrscheinlich besser.

Das Problem mit dem völlig wahlfreien Zugriff der Umgebungen sehe ich darin, dass sich so sehr leicht, absichtlich oder auch nicht, das Format des Boards sprengen lässt.
Weiterhin meine ich irgendwo gelesen zu haben, dass sich an Latex auch Shell Befehle übergeben lassen. Weiß jemand darüber genaueres?
juergen Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
Wie man sieht, oder, da sie transparent ist, nicht sieht, ist die Hintergrundfarbe nicht transparent smile

Oja.
Man siehts :] oder man siehts nicht unglücklich

Wenn man es transparent sieht, nutzt man Mozille et.al.
Wenn man es nicht transparent sieht, nutzt man MS-IE
Ich habe nicht d'ran gedacht, daß ME-IE ja den Alpha-Kanal bei PNG nicht richtig verarbeitet/darstellt. :P

Mal was probieren
http://217.160.92.215/~burn/math2png/math2png.php?f=a^2\end{align*}\Huge bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla \normalsize $$x^2$$\begin{align*}
Ah-ho! Augenzwinkern
Womit die {align*}-Umgebung ausgehebelt wäre.
MatheBlaster Auf diesen Beitrag antworten »

Oh, echt nicht transparent? Da ich sowohl unter Linux als auch Windows Mozilla Firefox benutze, kam ich nicht mal auf den Gedanken, dass irgendwelche Browser damit nicht zurecht kommen. Welches Grafikformat bietet denn entsprechende Möglichkeiten? GIF?

Oh, und weiterhin sollte sich jetzt der normale $...$ Mathe Modus benutzen lassen, wenn an die URL einfach noch &mode=inline angehängt wird, also ungefähr so:

gegeben ist http://217.160.92.215/~burn/math2png/math2png.php?f=y%2Bx&mode=inline. woraus folgt, dass http://217.160.92.215/~burn/math2png/math2png.php?f=x%2By&mode=inline

Hm, funktioniert überhaupt nicht smile

Jürgen, Du Lümmel! Dein Name kommt gleich auf die Liste :P
juergen Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
Welches Grafikformat bietet denn entsprechende Möglichkeiten? GIF?

Ja,
mit GIF geht es natürlich.

Aber da gibt es möglicherweise ein klitzekleines Problemchen in Bezug auf PHP und GIF:
Ab Version 1.6 wurde das GIF aus der GD-Bibliothek entfernt (wenn ich recht informiert bin aus urheberrechtlichen Gründen; das Format ist ja geschützt).
WebFritzi Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
@WebFritzi: was genau meinst du mit Latex Tags?

Ich meinte, dass man sowas schreiben kann wie:

.

Damit wäre ich vollkommen zufrieden. Und den Modus könnte man dann ändern durch

[latex="inline"]x = 2y - z[/latex]

oder so...
MatheBlaster Auf diesen Beitrag antworten »

Achso, das kommt natürlich noch. Zurzeit ist das Skript aber in keinster Weise mit dem Matheboard assoziiert und distanziert sich entschieden von jeglicher mathematischer Benutzung, daher gibts (noch) keine Tags fürs Board.

So, nun werden transparente GIFs erstellt. Das scheint mit dem Internet Explorer ebensowenig zu funktionieren. Funktioniert da eigentlich irgendwas?
Ben Sisko Auf diesen Beitrag antworten »

Das matheboard zur IE-freien Zone zu machen, ist wohl nicht praktikabel, was? Big Laugh

Edit: Damit navigieren die User im matheboard:


Zitat:

Browser
1. Internet Explorer 6.x 65.2 %
2. Mozilla 1.x 32.1 %
3. Opera 7.x 1.8 %
4. Internet Explorer 5.x 0.9 %
Gesamt 100.0 %
juergen Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
So, nun werden transparente GIFs erstellt. Das scheint mit dem Internet Explorer ebensowenig zu funktionieren. Funktioniert da eigentlich irgendwas?

Ach. Das sollen also GIF sein? verwirrt
Sind es wohl nicht!
Wenn ich mir so ein Bildchen (mit der Endung .gif) in IrfanView angucke, dann meckert er: "Die Datei ... ist eine PNG Datei mit falscher Dateiendung".
MatheBlaster Auf diesen Beitrag antworten »

So, nach einen kräftigen Schlag auf den Hinterkopf :rolleyes: könnten es nun tatsächlich GIF Bilder sein.
jama Auf diesen Beitrag antworten »

Jetzt funktioniert´s sowohl mit IE als auch mit Mozilla.

Gruß,

Jama
Thomas Auf diesen Beitrag antworten »

Ja bei mir funktionierts nun auch, gut gemacht :]

Gruß,
Thomas
juergen Auf diesen Beitrag antworten »

:] :] :]
m00xi Auf diesen Beitrag antworten »

Und wie geht es jetzt damit weiter? Wird mimetex jetzt dadurch ersetzt?
MatheBlaster Auf diesen Beitrag antworten »

Genau so wäre mein Plan, aber Matheboard- technisch ist da noch nichts offiziell.

Weiß denn nun jemand, ob und wie man '+' Zeichen in der URL übergeben kann? Mimetex schafft es irgendwie, dazwischen zu unterscheiden.
WebFritzi Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
Genau so wäre mein Plan, aber Matheboard- technisch ist da noch nichts offiziell.

Ich würde vorschlagen, beides nebeneinander laufen zu lassen. Dann gibt's auch keine Kompatibilitätsprobleme.
juergen Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
Weiß denn nun jemand, ob und wie man '+' Zeichen in der URL übergeben kann? Mimetex schafft es irgendwie, dazwischen zu unterscheiden.

Eigentlich sollte es nicht gehen, da ein Pluszeichen, wenn die Variable in PHP ausgelesen wird ($_GET['f']) als Leerzeichen interpretiert wird.

Kann Mimetex denn das wirklich?
Vor übergabe an Mimetex werden doch vermutlich die Daten vom Script des Boards ausgewertet und was zwischen den [ mimetex ] und [ /mimetex ] Tags steht, wird dann übergeben. Hier kann man natürlich alle möglichen Anpassungen zwischenschalten.

Wenn man hier ein Tag [ latex ] und [ /latex ] Tag einführen würde, dann könnte man natürlich auch alles was dazwischen steht entsprechend mit urlencode() codieren - eben auch das Pluszeichen.
Thomas Auf diesen Beitrag antworten »



Was sagt ihr dazu? smile

Der [ latex ]-Tag ist nun ins Board implementiert, und ich denke wir können die Eingabe und den Formeleditor bald auf den [ latex ]-Tag ummünzen. Der [ mimetex ]-Tag bleibt aus Gründen der Abwärtskompatibilität natürlich weiterhin Bestandteil des Boards Augenzwinkern

Der Code für oben lautet übrigens:

[ latex ]5+5=10[/ latex ]

Hab das mit dem + hinbekommen Augenzwinkern

Gruß,
Thomas
jama Auf diesen Beitrag antworten »

Ausgezeichnet! Tanzen

Vielen Dank Ihr beiden!


Gruß,

Jama
juergen Auf diesen Beitrag antworten »

Ich nehme alles zurück und behaupte nun das Gegenteil.

Es geht doch! :P

übergibt man etwa folgendes: http://www.domain.de&f=a+b c
dann kann man die Daten im PHP auslesen mit
$uebergabe = $_GET['f'];
-> Als Ergebnis erhält man: a b c

Aber es gibt noch einen anderen Weg:
Man kann die Daten auch auslesen mit:
$uebergabe = $_SERVER['QUERY_STRING'];
->Als Ergebnis erhält man: f=a+b%20c
Thomas Auf diesen Beitrag antworten »

Danke für den Hinweis. Mittlerweile hab ich das ganze aber per Javascript gelöst, funktioniert doch, oder?

Gruß,
Thomas
MatheBlaster Auf diesen Beitrag antworten »

Jürgen, komm in meine Arme, lass Dir die Hand drücken oder was auch immer dir zusagt. Wunderbar, danke!
Danke auch an Thomas

So, nun brauche ich mal ein paar fachmännische Ratschläge.
Sollten die User ihre Umgebung selber auswählen dürfen?
Zur Zeit werden alle Ausdrücke, außer irgendein ganz Gewiefter startet einen Ausbruchsversuch Augenzwinkern , in eine align* Umgebung gezwungen. Macht das Sinn? Was für Einschränkungen hat align*?
Was für Bedenken hättet ihr gegen eine freie Auswahl der Umgebung? Mit \end{document} ließe sich das TeX Dokument in diesem Fall beenden. Können irgendwelche bösen Befehle angehängt werden? etc. pp...

Ich bitte um zielgerichtetes Brainstorming Prost
juergen Auf diesen Beitrag antworten »

Ich würde sagen: erstmal so lassen. Falls es Probleme gibt, dann zeigen sich dieser eh' erst in der Anwendung.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »