Darstellung von TeX-Formeln in HTML-Seiten

Copyright: Das Javascript-Programm 'TeX2HTML.js' ist freie Software, es kann nach Belieben kopiert und weitergegeben werden. Bei Änderungen im Code muß der Autorname erhalten bleiben Der Autor schließt jede Garantie für das Funktionieren oder sonstige Gewährleistung aus.

Funktionsweise

"TeX2HTML" basiert auf einem anderen Prinzip als viele andere TeX → HTML Konverter: Die TeX-Formeln werden hier nicht in Bilder umgewandelt, sondern erst beim Laden im Browser des Nutzers als HTML-<canvas>-tag gerendert. Das hat einige Vorteile: Für fortgeschrittene Autoren sind folgende Optionen möglich: Ein kleiner Nachteil ist, daß die Formeln auf verschiedenen Browsern leicht unterschiedlich gerendert werden, da die Browser-Fonts nicht identisch sind.

Einbinden von TeX-Code

Das Javascript-File "TeX2HTML.js" muß im HTML-body eingebunden werden, mit <script src="TeX2HTML.js"></script> Es wird dann bei "body.onload" ausgewertet.
Folgende Möglichkeiten zum Einbinden von TeX-Code gibt es damit: Außerdem git es für den Emacs einen inverse search, dh beim Anklicken einer Gliederungszeile [sub[sub]]section, einer Formel oder einer Fußnote wird mittels dem CGI-Prog emacsclient.bin der Emacs-Editor auf die entpr. TeX-Source-Zeile positioniert (erfordert 'server-start' im Emacs). Damit das funzt, muß außerdem der Apache-Server als user=wolfk gestartet werden:
1. '/etc/apache2/apache2.conf' anpassen: user wolfk, group users, 2. apache2ctl stop && apache2ctl start
Grundsätzlich wird versucht, soviel wie möglich von der LaTeX-Syntax zu bewahren, und gleichzeitig die interaktiven Optionen und Formatierungen von HTML-Tags zu benutzen.

TeX-Formeln

Außerdem sind folgende Syntax-Regeln implementiert (im Text)

Implementierte TeX-Syntax innerhalb von Formeln

Test des Formel-Layouts: Layout-Test.html
Großgeschriebene Symbole wie '\DEF', '\QEQ' sind eigene Ergänzungen Weitere impl. Symbole
Font optionen

1. File deklarativ laden (asynchron) in div mit Attribut <div tex-include="Test-tex.tex">

2. inline mode: Tag mit leerem Attribut <span tex-include>Inlined Text mit TeX-Formeln </span>

\section{Eine 'Section'-Gliederung (h2)} Eine inline-Formel mit Rahmen $\fbox \hat x = ¼ \frac 1{\dot \alpha + \tilde \beta + \frac 12} + \sqrt 2 \overline{\dot a \choose \tilde b}^2 \zeta \cos \phi$ und ohne: $\tilde f(k) \sim - \int_0^\infty \frac{k^2}{2b} e^{-\frac 12 (\frac {k-k_0}{\Delta k })^2}e^{- \frac {k^2}{2b}} $. mit großen Klammern: $\left( p_m s^{mi}_k \right)^2$. + $ = \sum_{k_1k_2}^{100} \left(\phi^{a_1 a_2}_{k_1 k_2} (\phi^{\bar a_1 a_2}_{k_1 k_2})^\ast - cc \right) +im_2 (...) $\\ Die Größe $\fbox D$ aligned $D$ \subsection{Eine Subsection (h3)} Mit HTML-Zeilenumbruch hier:
Ein TeX-Kommentar (hier unsichtbar)% alles wird ignoriert bis zu diesem NL\n
\newcommand{\BE}{\begin{equation}} \newcommand{\EE}{\end{equation}} % ohne Argumente \newcommand{\PD}[2] { \frac {\partial #1} {\partial #2}} % mit 2 Argumenten $ x = y^2 + \PD {(x+y)} {(z+t)}$ ergibt % ein TeX-Kommentar mit "newcommand BE..." \BE y = \pm \sqrt{x} \label{eq-xy}\EE Das ist Formel \ref{eq-xy} (Im Text referenziert mit ref{eq-xy}). Griech. Symbole $\psi_1 = \phi_2 + \bar\partial \chi^2 $ und eine abgesetzte Formel (mit Rahmen): \footnote{Eine Fußnote mit Formel $ z = \int dk e^{- {k}} $ } \[\vec x^\ast = \underbrace{\bar \alpha +{\bf \bar \beta}^*_{1+\alpha}}_{\alpha = \beta} - e^{i\omega t} \,\,\partial_1\!\Psi_1^\dagger \frac {\psi_{12}' -\phi'_{12}}{\mu_2 + 2\delta^2} {a b \atop b} \fbox \equiv \sqrt{ \hbar \Re(x)} \;\mbox{und}\; \langle \Im(z), u\rangle + \sqrt{\frac 1 {1+2\pi}} \sum_1^n {a,b\,c \choose b c d } {a_1 \choose b_1} \DEF \prod^n e \to \underline{\bf q \QEQ p \Psi_{\uparrow\downarrow}\] und eine Formel mit Numerierung und Rahmen\footnote{noch eine Fußnote} \begin{equation} \fbox \sigma_0 \DEF {1\, 0 \choose 0\, 1},\quad \sigma_1 \DEF {0\, 1 \choose 1\, 0},\quad \sigma_2 \DEF {0\, -i \choose i\; 0},\quad \sigma_3 \DEF {1\; 0 \choose 0\, -1} \end{equation} und eine mehrzeilige, abgesetzte Formel mit '[...]'-Umgebung (ohne Nummer) \[ x_1 = a_{11} y_1 + a_{12} y_2 \\ x_2 = \frac 12 a_{21} y_1 + a_{22} y_2\] und mit {eqnarray}-Umgebung (mit Nummer und label 'eq-2') und '&'-Ausrichtung \begin{eqnarray} \label{eq-2} x_1 & = & \underbrace{a_{11} y_1}_{a=b} + a_{12} y_2 \\ &=& a_{21} y_1 + \underbrace{a_{22} y_2}_{=z} \end{eqnarray} und Bezugnahme auf diese Gl \ref{eq-2}\\ Probleme mit höheren char-codes: $ 0x26a4=⚤ $ ok $0x1d74d = 𝝍 0x1d592=𝖒=𝔪 𝔪 $ falsch!

Tests

Höhere Zeichencodes 'c ≥ 0x1d400' funzen nicht: zB #x1d74d = 𝝍 in einem <canvas>:
wird nicht parsiert, warum??? $ x= y^2 0x1d74d = 𝝍 0x26a4=⚤ 0x1d592=𝖒=𝖒 𝔪 $

Laufzeit-Tests

Anzeige des navigator.useragent
Zeitfresser sind die Zuweisungen gc.font = "20px sans-serif";. Sie brauchen auf dem neuen FF 37.0 ~1.2msec, das sind ~120x so viel wie das akt. rendering!! (Auf dem alten FF 26.0 ist es ca. 4x schneller!)
(55)
Ein zentriertes div-tag (mit CSS "margin-left = margin-right = auto"). Der canvas ist darin eingebettet (width sollte gleich sein).
Auch die Formelnr. (55) wird dynamisch positioniert

    W. Köhler     wolfk.wk@gmail.com