Sourcecode für latex2png und den Plotter

Neue Frage »

MatheBlaster Auf diesen Beitrag antworten »
Sourcecode für latex2png und den Plotter
Was lange währt, wird endlich gut. Hier gibt es nun die Sourcecodes für latex2png und den Plotter.

Falls es Fragen gibt oder Probleme bei der Integration, immer her damit.

18.05.: kleine Änderung am plotter, damit die Achsenbeschriftungen nicht mehr abgeschnitten werden.

27.05.: die Sourcecodes sind nun auch als .php.txt verfügbar, damit man sie direkt runterladen kann.

29.05.: Version 1.1 online und im Einsatz (siehe unten)

21.06.: Temporäres Verzeichnis wird bei Bedarf automatisch erstellt

21.08.: Version 1.2, Umstellung auf dvipng, explizite Überprüfung, ob latex- und dvipng-binaries existieren, debug modus, \newcommands

06.09.: Sicherheitsfix: \input{} mit einer beliebigen Datei auf dem Hostsystem funktioniert nun nicht mehr

28.08.: nun auch ein Sicherheitsfix für den Plotter. Weiterhin werden nun auch temporäre Dateien und Caching unterstützt.
jama Auf diesen Beitrag antworten »

Juhu, LaTex für alle Rock

Gruß,

Jama
iammrvip Auf diesen Beitrag antworten »

JUHUUUUU!!!

Super danke schön Augenzwinkern .

Danke Gott .

Bin schon am runterladen Big Laugh
Mathespezialschüler Auf diesen Beitrag antworten »

Hi,

kann mir jmd. sagen, was ich damit anfangen kann??

Ihr wisst doch, wie es um mein Wissen bei solchen Dingen bestimmt ist! Big Laugh
iammrvip Auf diesen Beitrag antworten »

Wenn du eine Homepage erstellen, willst und dort ein paar Matheformel im Quellcode erzeugen möchtest (ohne Bilder vorher einzelnen zu erstellen), kannst du diese wunderschöne PHP-Datei nutzen Augenzwinkern .

Du kannst also einen mathematischen Text auf der HP schreiben und die ganz leicht mathematische Formel einfügen Augenzwinkern .
sqrt(2) Auf diesen Beitrag antworten »

Cool. smile Könntest du vielleicht noch die php-Files als solches zum Download anbieten, dein Webserver jagt alle phps-Files durch php_source(), sodass der Seitenquelltext mit ziemlich vielen HTML-Tags versehen ist. Wenn man den Text einfach nur aus dem Browser kopiert, muss man auch nacharbeiten, weil die ganzen schönen Tabs zu Spaces werden. Wenn du die Dateien einfach zum Download anbietest, dann kann man auch einfacher diffs erstellen, weil man eine eindeutige Referenzversion hat.

Zitat:
Original von Mathespezialschüler
kann mir jmd. sagen, was ich damit anfangen kann??


Wenn du die entsprechende Umgebung auf deinem Webserver erstellt hast, werden alle <img>-Tags, in denen du das src-Attribut wie folgt setzst, ein Bild anzeigen, das aus der geTeXten Formel besteht.

Zitat:
Aus dem Quelltext:
/latex2png.php?x?mode=y

where x is a valid latex expression. If the last ? is followed my mode=inline,
the latex expression will be set as an inline expression, ie. $x$ instead
of \begin{align*}x\end{align*}
 
 
sqrt(2) Auf diesen Beitrag antworten »

Ich habe dann doch gleich mal ein paar Änderungen am Code von latex2png gemacht (hier angehängt). Würde mich freuen, wenn die in die offizielle Version übernommen würden.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Changelog:

    Version 1.0
        * [NEW] (Georg Sorst)
            first version published with source code
    Version 1.1
        * [NEW] (Benedikt Gollatz)
            added 'eqnarray*' environments
        * [CHG] (Benedikt Gollatz)
            translated all comments to English
        * [CHG] (Benedikt Gollatz)
            minor error reporting cleanup (register_error())
        * [FIX] (Benedikt Gollatz)
            The documentation said that modes have to be separated by '?mode=' from
            the LaTeX expression, but the code wanted '&mode='. Although '?mode=' is
            better because '&' is more common in mathematical LaTeX expressions, I
            chose to change the documentation and not the code to preserve backward
            compatibility.


Zu den eqnarray*-Environments ist noch anzumerken:

Zitat:
If mode is set to eqnarray the expression will be set in an eqnarray* environment, i.e. \begin{eqnarray*}x\end{eqnarray*}.
Note that eqnarray* does basically the same as align* with slightly different syntax but produces somewhat clearer output. Additionally, it's also available if you don't have the amsmath package, which is needed for align*.
MatheBlaster Auf diesen Beitrag antworten »

Wow Benedikt, danke für dein Engagement. Ich werde mir die Sachen im Laufe der Woche mal in Ruhe anschauen, hoffentlich genügen sie meinen hohen Quick'n'Dirty-Hack-Standards smile
MatheBlaster Auf diesen Beitrag antworten »

So, habe mir das ganze nun mal angeschaut und werde wohl die Änderungen übernehmen. Spricht irgendwas dagegen, align* einfach durch eqnarray* zu ersetzen und nicht nur zu benutzen, falls mode=eqnarray?
MatheBlaster Auf diesen Beitrag antworten »

Kann mal jemand bitte die angehängte .tex Datei im --interaction=nonstopmode durchlaufen lassen und mir mitteilen, ob sich TeX dabei aufhängt?
AD Auf diesen Beitrag antworten »

Du meinst sicher LaTeX statt TeX. Leider kein selbständiger Durchlauf, ich musste per Hand abbrechen. Unten ist die Log-Datei.

War so ein Konstrukt der Grund für den "Hänger" gestern? verwirrt
sqrt(2) Auf diesen Beitrag antworten »

Auf Anraten von MatheBlaster soll ich hier was zu eqnarray* schreiben... Abgesehen davon, dass ich die PN nicht gesehen habe (sorry), wusste ich auch nicht wirklich, was damit gemeint war. Augenzwinkern Aber ich habe mir jetzt mal den LaTeX-Hänger angesehen. Das folgende TeX-File terminiert im nonstopmode normal mit Fehlermeldung und bleibt nicht hängen:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
\documentclass[12pt]{amsart}
\usepackage[latin1]{inputenc}
\usepackage{amsmath,amssymb,latexsym}
\setlength{\footskip}{0pt}
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
\boldmath\begin{eqnarray*}
[\vec{x}-\begin{pmatrix} 10 \\ 0 \\ 0 \end]*\begin{pmatrix} 5 \\ 3 \\ 22 \end{pmatrix}
\end{eqnarray*}
\end{document}

Der einzige Unterschied ist, dass hier statt des align*-Environments ein eqnarray*-Environment verwendet wird, und damit tritt das Hängenbleiben wie gesagt nicht auftritt (auch wenn ich nicht sagen kann, ob der Fehler bei latex oder beim amsmath-Package, also bei align*, liegt; auch wenn das Log letzteres vermuten lässt, bin ich nicht TeX-Insider genug).

Wie auch immer, wenn man die eqnarray-Funktion der Version 1.1 von latex2png hier im Matheboard verwendet, dürfte es zumindest wegen eines solchen Konstrukts keine Hänger mehr geben. Das Schöne an align* ist, dass dessen Syntax auch von eqnarray* ohne Fehler geschluckt werden sollte, man also keine Probleme mit den alten Formeln bekommt, wenn man umstellt.

BTW: Georg, könntest du im Boardquelltext noch ein str_replace('<br />', '\\', $formel) einfügen, bevor du den Inhalt zwischen [latex ] und [/latex] latex2png übergibst? Dann haben wir auch keine Probleme mehr mit den Zeilenumbrüchen bei mehrzeiligen Formeln (wofür align* und eqnarray* ja gedacht sind).

[edit] Äh, Moment, den Beitrag hatte ich jetzt ja ganz übersehen:

Zitat:
Original von MatheBlaster
Spricht irgendwas dagegen, align* einfach durch eqnarray* zu ersetzen und nicht nur zu benutzen, falls mode=eqnarray?

Sowohl align* als auch eqnarray* erstellen implizit eine Tabelle mit drei Spalten, die Syntax entspricht folglich der einer tabular-Umgebung in LaTeX und ist gleich (& für neue Spalte und \\ für neue Zeile). Allerdings sind die Spalten anders angeordnet: Während eqnarray* eine eigene Spalte (die zweite) für das (Un-)Gleichheitszeichen hat (eine rcl-Tabelle also), erstellt align* eine Spalte für die linke Seite, eine für die rechte und eine mit größerem Abstand rechts auf der Seite gesetzte für Kommentare.

Diese dritte Spalte wird selten benutzt und daher wird man kaum Rückwärtskompatibilitätsprobleme haben, wenn man align* einfach durch eqnarray* ersetzt. Theoretisch könnte es aber kleinere Probleme geben (die Folge wären nicht so schön formatierte Gleichungen, nichts schreckliches) und daher würde ich beide Features drinlassen.

Welches man zum Standard erhebt, ist dann im Endeffekt egal, würde ich sagen. Es wird niemandem ein Zacken aus der Krone brechen, weil er den mode-Parameter noch mitliefern muss.
MatheBlaster Auf diesen Beitrag antworten »

So, mit eqnarray* läuft die .tex Datei tatsächlich den Umständen entsprechend sauber durch, daher habe ich eqnarray* auch zum neuen Standard erhoben smile

Modes werden nun per ?mode übergeben. Wie Benedikt schon sagte sauberer, macht aber die Rückwärtskompatibilität kaputt. Falls die Verbreitung von latex2png überraschenderweise noch keine epidemischen Ausmaße angenommen haben sollte, stellt das hoffentlich kein größeres Problem dar.

Danke noch mal an Benedikt und auch an Arthur.
sqrt(2) Auf diesen Beitrag antworten »

Ich hab da einen Vorschlag für eine neue Version, die Abkürzungen für wichtige, aber lange Befehle definiert (vor allem für die Pfeile).

Zum Patchen sollte
code:
1:
$ patch -p1 < latex2png.diff.txt

es tun.

Auszug aus dem Changelog:
code:
1:
2:
3:
4:
5:
6:
7:
8:
        Version 1.2
                * [NEW] (Benedikt Gollatz)
                        added some useful \newcommands to make typing maths more
                        comfortable
                * [FIX] (Benedikt Gollatz)
                        translated solely remaining German comment to English
Sebastian Auf diesen Beitrag antworten »

Bei mir läuft das nicht!
Ich habe Mktex!

Es findet anscheinend die convert.exe nicht!
sqrt(2) Auf diesen Beitrag antworten »

Du brauchst auch ImageMagick (kein Rechtschreibfehler). Das gibt's eigentlich nur für UNIXe, aber wenn es denn unbedingt auch unter Windows laufen soll, schau dir mal Cygwin an.
MatheBlaster Auf diesen Beitrag antworten »

Laut der ImageMagick Homepage gibt es selbiges auch für Windows.

Wenn Du es installiert hast, versuch mal auf Zeile 182 die kompletten Pfade von `dvips` und `convert` einzufügen, das könnte es tun.
Sebastian Auf diesen Beitrag antworten »

Aber irgendwie bekomm ich das nicht ganz hin. Kann mir mal bitte jemand alle Download-Links zu den Programmen sagen, damit die latex2png.php unter Windows läuft. (Ich benutze xampp = Apache, MySQL, ...)

Danke!
sqrt(2) Auf diesen Beitrag antworten »

So einfach ist das nun nicht... Was du brauchst, sind
  • einen funktionierenden LaTeX-Interpreter/Compiler ("latex") und den mitgelieferten Konverter nach Postscript ("dvips"), sowie
  • das Programm "convert" aus ImageMagick.

Wichtig ist, dass alle diese Programme über die Kommandozeile gestartet werden können müssen. Unter Windows gibt es ja die komische Eigenart, dann irgendwie alles noch in eine GUI zu verpacken...

Damit das mit Sicherheit gewährleistet ist, würde ich Cygwin nehmen und darüber TeTeX sowie ImageMagick installieren, dann bekommst du das alles auch in einer sauberen UNIX-Verzeichnisstruktur.
Sebastian Auf diesen Beitrag antworten »

Vielen Dank!
Ich lade mir gerade ImageMagick für Winodws herunter. Die anderen Tools (latex.exe, dvips.exe) laufen schon auf Windows!

Ich hoffe es wird jetzt funktionieren! Danke!
Sebastian Auf diesen Beitrag antworten »

Ich habe mir das heruntergeladen und die convert.exe konvertiert auch, aber leider kein dvi in ein anderes Format.

Nach dem Befehl "latex test.tex" kommt ein dvi-File heraus.
Wenn ich diesen File dann mit "convert test.dvi test.png" umwandeln, will, zeigt er komische Codes und als letzte Zeile:

"convert: no decode delegate for this image format: ...."

Was kann ich da jetzt machen?
sqrt(2) Auf diesen Beitrag antworten »

Genau dafür liegt ja auch zwischen latex und convert ein dvips-Lauf, der das DVI in PostScript umwandelt.
Sebastian Auf diesen Beitrag antworten »

Ja, aber ich habe auch schon mal eine ps-Datei in convert eingegeben ("convert test.ps test.png") und es geht trotzdem nicht (selber Fehler).
sqrt(2) Auf diesen Beitrag antworten »

Ich hab's gerade an der Windows-Kiste, an der ich sitze, ausprobiert. PostScript-Support scheint in der normalen Win32-Version nicht dabei zu sein.

Ich rate dir immer noch zu Cygwin.
Sebastian Auf diesen Beitrag antworten »

Ich habe mir jetzt noch GhostScript heruntergeladen, und es funktioniert tatsächlich! Rock

Tortzdem habe ich noch Probleme: Den GIF/PNG-File den es erzeugt, ist viel zu groß, denn unten wird noch eine Seitenzahl eingeblendet (brauch ich nicht, denn ist ja nur eine Formel) und an der Seite wird neben der Formel "(0.001)" angezeigt. Ich benutze MikTeX.

Wie kann ich das ausblenden lassen?
(Gebt mir bitte mal einen TeX-Beispielcode aus einer.tex-Datei)

Danke!
sqrt(2) Auf diesen Beitrag antworten »

Das kannst du auch im Quellcode von latex2png nachschauen, das kocht auch nur mit Wasser. smile

code:
1:
2:
\pagestyle{empty}
\thispagestyle{empty}
Sebastian Auf diesen Beitrag antworten »

Jetzt klappt alles, vielen dank euch allen!

Aber die Bilder die es macht sind sehr klein. Wie kann ich die Formel größer anzeigen lassen?
sqrt(2) Auf diesen Beitrag antworten »

Schau dir mal den Quelltext von latex2png an. Verwendest du genau die gleichen Header? Wenn ja, dann dürften \fontsize und \selectfont deine Freunde sein.
Sebastian Auf diesen Beitrag antworten »

Danke, ich probier es mal aus!
Sebastian Auf diesen Beitrag antworten »

Habe es herausgefunden:

Die Funktion heißt \LARGE!
Egal Auf diesen Beitrag antworten »

Die Ergänzung des Ersetzungs Arrays zu
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
$trans_tbl = array(
        //replacing the <br/ >
        '\\\\%3Cbr%20/%3E' => '\\'.'\\',
        '%3Cbr%20/%3E' => '\\'.'\\',
        //Char replacement
        '%B'    => '^',
        '%20'    => ' ',
        '%3E'    => '>',
        '%3C'    => '<',
        '%E4'    => 'ä',
        '%F6'    => 'ö',
        '%FC'    => 'ü',
        '%C4'    => 'Ä',
        '%D6'    => 'Ö',
        '%DC'    => 'Ü',
        '%DF'    => 'ß',

        // additIonal translations for Opera (is this UTF8?)
        '%C3%A4'        => 'ä',
        '%C3%B6'        => 'ö',
        '%C3%BC'        => 'ü',
        '%C3%9F'        => 'ß',
        '%C3%84'        => 'Ä',
        '%C3%96'        => 'Ö',
        '%C3%9C'        => 'Ü',
        '%C2%B'         => '^',
        '%27'           => '\'',
);

entfernt die bekannten <br/ > aus dem Code und ersetzt sie durch latex konforme Umbrüche.

Ausserdem würde mich mal interessieren ob man nicht durch umstellung auf dvipng (produziert direkt pngs) das sehr gute php skript noch etwas perfomanter gestalten kann. Immerhin spart man sich einen Funktionsaufruf und bei meinem Test hat der converter relativ viel Prozessorlast erzeugt.
Dafür wäre aber interessant zu wissen ob dvipng mittlerweile zum Standard gehört oder ob dies eine tetex spezifische Sache ist.

Edit: Ich muss leider nochmal editieren.
Bei weiteren Tests hat sich gezeigt das entweder das Skript bei mir anders arbeitet oder hier etwas da ist was mir fehlt. Und zwar muss ich damit ich korrekte Outputs bekomme auch das Escape Zeichen nochmal escapen. Ob da bei anderen auch der Fall ist oder hier im Board etwas zum Einsatz kommt das ich zuhause nicht habe kann ich leider nicht sagen.
sqrt(2) Auf diesen Beitrag antworten »

Ich fand die Idee des Ersetzens von "<br/>" durch "\\" ganz gut, nur so gefällt mir die Umsetzung nicht. Man muss bedenken, dass der ganze Text in einer eqnarray*-Umgebung gesetzt wird. In dieser Umgebung hat "\\" aber die Bedeutung eines Zeilenumbruchs. Was passiert, wenn meine Spalten sehr lang sind und ich der Übersichtlichkeit halber im Editor dort einen Umbruch setzte? Bestenfalls falsche Darstellung, möglicherweise auch Syntaxfehler.

Man müsste den Text vorher parsen, damit das verhindert wird. Wenn ich heute Abend die Zeit finde, setze ich mich da einmal dran.
Egal Auf diesen Beitrag antworten »

Die Idee da einen Umbruch draus zu machen resultiert wesentlich davon das die meisten falschen <br/ > daraus resultieren, dass mit latex nicht so bewanderte dies in der Absicht einsetzen einen Zeilenumbruch zu machen.
Mitten in einer Formel bzw einer {} Umgebung wird wohl keiner auf die Idee kommen einen manuellen Umbruch einzubauen. Du solltest bei aller Textparserei auch bedenken wofür das ganze eingesetzt wird und das wir hier nicht mit Gewalt zusätzliche Last produzieren müssen bei einem Problem das wohl eher rein theoretischer Natur ist.

Im Übrigen vertehe ich immernoch nicht warum beim latex2png Einsatz hier ein escapen von \ nicht erforderlich ist bei mir aber sehr wohl.

Dafür hab ich noch ein weiteres Argument für das Umsetzen der dvipng Idee. Ich hab leider feststellen müssen das ich für dvips und imagemagick sowohl x11 als auch cups installieren muss was ich im Grunde genommen für sonst nichts brauche.

Edit: Ich hab nochmal drüber nachgedacht wegen Übersichtlichkeit etc pp
Ich wüsste wirklich keinen guten Grund warum Umbrechen mitten in einer Formel die Übersichtlichkeit fördert will aber auch nicht sagen das es möglicherweise nicht doch Sinn machen könnte.
Dann müsste man sich konsequenter Weise entscheiden das ganze absolut Latex konform zu gestalten und statt einem \\ aus den <br/ > ein Leerzeichen machen.
Allerdings will ich hier auch nicht eine Innovative Idee zu einem Formelparsing im Wege stehen allein ich hab keine Ahnung wie du dir das mit einem vernünftigen Aufwand an Rechenarbeit vorstellst.
DeGT Auf diesen Beitrag antworten »

Zitat:
Original von Egal
Im Übrigen vertehe ich immernoch nicht warum beim latex2png Einsatz hier ein escapen von \ nicht erforderlich ist bei mir aber sehr wohl.

Ich habe mich zwar nicht so sehr mit latex2png beschäftigt, aber dein Problem könnte doch an den unterschiedlichen Zuständen von magicquotes liegen, oder?
Egal Auf diesen Beitrag antworten »

ja das hab ich heute mittag dann irgendwann auch bemerkt.
Ein entfernen von stripslashes hat das Problem behoben dafür muss ich wohl den zu ersetzend code nochmals leicht modifizieren.
Vorsicht für alle die versuchen latex2png.php auf dem eigenen System zum laufen zu bringen. Wenn ihr selber nicht magicquotes (böses Teufelszeug) verwendet müsst ihr auch den kompletten latex header anpassen.

Unerfreulicherweise zeigt die Einstellung auch Wirkung auf das was man im trans_tbl einsetzen muss. Nachdem ich das strapslashes weg und alles nochmal getestet habe muss ich das oben nochmals korrigieren jetzt aber in eine Form bei er es bei mir ohne Probleme tut.
MatheBlaster Auf diesen Beitrag antworten »

Verflixt, die Idee mit dvipng klang zuerst sehr schön. Bis mir einfiel, wieso latex2png absurderweise keine .png sondern .gif produziert: der Internet Explorer, falls ich nichts verpasst habe, kann keine Transparenz in .png darstellen.

Wer mir zuerst dvigif findet, bekommt einen Eintrag in der changelog smile

PS: Wieso sind denn magicquotes Teufelszeug?
sqrt(2) Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
der Internet Explorer, falls ich nichts verpasst habe, kann keine Transparenz in .png darstellen.


Nicht ganz. Soweit ich weiß, kann er keine Alphatransparenz darstellen, normale Transparenz aber doch. Selbst die Alphatransparenz kriegt er hin, für den Fall, dass die Hintergrundfarbe solide ist und man sie im PNG mitspeichert. Ich würde vorschlagen, PNGs zu erstellen, die einfache Transparenz (und für den Fall des Falles, damit der Hintergrund nicht grau wird, weiß als Hintergrundfarbe gespeichert haben). Ich hab allerdings keine Ahnung, wie man imagepng() dazu bringt.
MatheBlaster Auf diesen Beitrag antworten »

Und nun ein erster Test, der latex2png wieder zu dem machen könnte, was es schon immer sein wollte: ein .png-generiendes Programme:



Cool, funktioniert. dvipng kann auch .gif erstellen, allerdings scheinen die Bilder tatsächlich auch im Internet Explorer transparent zu sein. Bitte um Kommentare!

@sqrt(2) zur Info: Wo liegt denn der Unterschied zwischen Alphatransparenz und normaler Transparenz?
Mathespezialschüler Auf diesen Beitrag antworten »

Der weiße Hintergrund bleibt aber jetzt nicht oder? verwirrt Hab mich grad gewundert, als ich ihn wieder gesehen habe, nachdem ich meinen Beitrag fertig stellte.

Gruß MSS

edit: Jetzt ist er schon wieder weg und LaTeX hat wieder die alte Performance, obwohl du ja gesagt hattest, dass es zu schwierig wäre, das wieder hinzubekommen. Deswegen bin ich umso mehr überrascht und erfreut, auch wenn man sich erstmal wieder dran gewöhnen muss.
Vielen Dank Georg!! smile Freude Mit Zunge
DeGT Auf diesen Beitrag antworten »

Zitat:
Original von MatheBlaster
@sqrt(2) zur Info: Wo liegt denn der Unterschied zwischen Alphatransparenz und normaler Transparenz?

Alphatranzparenz ist ein zusätzlicher Kanal (->Tranzparenz wird wie Farbe gehandhabt, inkl. Verläufe etc.), "normale" Transparenz wird durch das Benutzen einer im Bild nicht vorhandenen Farbe erzielt. Diese ist dann die Transparenz-Farbe (also digital, transparent oder nicht, keine Zwischenstufen)

Und damit habe ich sogar recht, hätte ich nicht gedacht so spätHammer
http://de.wikipedia.org/wiki/Portable_Network_Graphics
2. Absatz, glaube ich.
Neue Frage »
Antworten »



Verwandte Themen

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