2012-11-26 7 views
5

Ich mache ein Präsentationssystem in QML (mit C++ - Backend) ähnlich this one.Möglichkeiten zum Einbetten von Latex in QML

Ich möchte in der Lage sein, einige Latex-Code enthalten, um einige Mathe anzuzeigen (nur minimale Latex-Funktionen benötigt, wie Summen, Brüche, Super-und Substript und Math-Schriften).

Ich sehe folgende Möglichkeiten, dies zu tun:

  • Mit latex2e:
    1. Kompilieren Sie den Latex-Code zu einem DVI-Dokument (mit latex)
    2. umrechnen DVI zu SVG (mit dvisvgm)
    3. Zeigen Sie dies mit einer Image in QML (die auch SVG unterstützt)
  • Mit Mathjax:
    1. Wickeln Sie den Latex-Code in einer kleinen HTML-Datei + gehören die Mathjax JS Bibliothek
    2. Letzte mit WebKit für QML
  • kundenspezifische Lösung (C++):
    1. schreiben oder beinhaltet einen vorhandenen minimale Latex Mathe-Parser
    2. ein QDeclarativeItem schreiben mit Custom Painting

Gibt es eine andere Lösung, die ich nicht sehen, ? Ich bevorzuge die erste Lösung, da der zweite zu schwer und der dritte zu hart klingt.

Ich sehe das folgende Problem mit der Basislinie der mathematischen Formel: Ich möchte Inline-Formeln (innerhalb eines Absatzes) enthalten können. Derzeit werden Textabschnitte mit einem QML Text-Element wiedergegeben. Gibt es eine Möglichkeit, ein Bild in ein Text-Element (unter Verwendung von HTML-img-Element vielleicht) mit einer angegebenen Basislinie? Wie kann ich die Grundlinie eines gerenderten Latexdokuments bestimmen?

Hinweis: Die Zeit zum Vor-Rendering von Latex-Code ist nicht problematisch. Ich werde bereits gerenderte Formeln zwischenspeichern, daher sollte es kein Problem sein, latex + dvisvgm für jede einzelne Formel im Präsentationsdokument aufzurufen.

Beachten Sie auch, dass ich einen Präprozessor verwende (ich schreibe den QML-Code nicht von Hand, sondern erzeuge ihn). Ich brauche also kein QML-Element für den Latex-Code, aber ich kann nur ein QML-Code-Snippet mit einem Image-Element generieren (für die erste Lösung). Dies sollte das Einbetten des gerenderten Bildes vereinfachen.

Ich brauche auch nicht das Umwickeln einer Formel bei der Verwendung von Inline-Latex.(Latex tut dies, wenn ich Inline-Formeln schreibe, aber ich benutze nur kleine Formeln, die ich sowieso nicht verpacken möchte.)

+0

Ich wäre interessiert zu hören, auf welche Art und Weise Sie gingen und ob es für Ihre Zwecke funktioniert hat, da wir auch dieses Problem treffen. – gremwell

+0

Ich verwendete Ansatz 1. Um die gerenderten Bilder in Absätze (Inline) einzubetten, habe ich den Text jedes Absatzes in einzelne Wörter aufgeteilt und sie manuell mit einem benutzerdefinierten Flow-Layout-Algorithmus platziert. Bilder können dann manuell positioniert werden. Wenn ich Zeit finde, schreibe ich das als Antwort mit genügend Details. Übrigens, SVG funktioniert nicht sehr gut, dafür habe ich das gerasterte PNG-Format benutzt. Meine App kann die gerenderte Auflösung anpassen (d. H. Das Bild rückkonvertieren), wenn das Bild skaliert wird, sodass Sie fast nicht bemerken, dass es sich um ein gerastertes Bild handelt. – leemes

Antwort

2

Ich denke, das sind drei gute Optionen, und mir fällt keine andere Möglichkeit ein es.

Es klingt wie Sie eine Anforderung haben, die Formeln in-line mit einigen Textabsätzen zu haben, deshalb denke ich, dass Option 2 ein guter Weg ist, es zu tun.

Es ist nicht schwer, die WebKit-Komponente zu verwenden. Ich bin nicht sicher, was Sie mit "zu schwer" meinen.

Prost!

0

Eine andere Option ist die Verwendung einer Rich-Text-QML-Komponente, die auch Bilder (z. B. TextEdit) anstelle von Image unterstützt - dann können Sie sie inline mit normalem Text platzieren.

+0

Ich habe diesen Ansatz versucht, aber das Problem ist, dass die Bilder immer vertikal an der Basislinie ausgerichtet sind. Wenn das Bild eine Latexformel mit einem Teilsatz oder etwas Ähnlichem ist, was unterhalb der Grundlinie liegen sollte, funktioniert das nicht. – leemes