2011-01-07 22 views
4

Was wäre der beste Ansatz, um Mathe Formel Rendering in einer Cocoa-Anwendung zu implementieren?Rendering Mathe Formeln

Es gibt eine Dienstprogramm-App mit MacOS X genannt Grapher, die es genau so macht, wie ich es brauchen würde (/Applications/Utilities/Grapher.app).

Antwort

4

Wie ich in my answer-this similar question beschreiben, baute ich ein System für die in my iPhone application tun (was auch auf dem Mac funktioniert, aber ich habe einfach nicht, dass die Version der Anwendung noch nicht abgeschlossen).

Ich habe Core-Animation-Layer verwendet, um die Hierarchie der Gleichung darzustellen, mit Quartz-gezeichneten Elementen für die verschiedenen Operationstypen. Dadurch kann ich den Satz relativ leicht animieren, was sogar auf der iPhone-Hardware der ersten Generation flüssig ist.

Wie bei der Bewertung beliebiger Gleichungen macht das Aufteilen des Layouts in hierarchische Ebenen die Layoutberechnungen recht einfach und flexibel. Es hat jedoch noch Monate gedauert, bis ich alles richtig gemacht habe.

Wenn Sie eine bestehende Lösung verwenden möchten, können Sie Projekt ausgezeichnete Open-Source-Matt Gallagher aussehen Magic Number Machine, die at least one developer als Grundlage für einen kommerziellen Mac-Rechner mit Gleichung Satz verwendet wurde.

+0

Danke, ich habe deine Antwort schon gefunden. Ich habe bereits angefangen, an meiner eigenen Implementierung mit Hilfe von Ausdrucksbäumen zu arbeiten.Ursprünglich wollte ich die * mimetex * lib verwenden, ist aber leider unter (Krebs) GPL lizenziert. –

+1

@Erik - Matts Zeug ist lizenziert BSD-Stil, so dass Sie vielleicht sehen, was er zuerst getan hat. Vertrauen Sie mir, das hört sich einfach an, aber es ist zeitaufwendig, wenn Sie Ihre eigenen Rollen haben. –

+0

Ja. Die Sache ist, ich brauche LaTeX-ähnliches Rendering (vorzugsweise fast pixelgenau). Live Editierbarkeit ist ein großes Plus. –

6

Wenn Sie nur Gleichungen setzen und keinen interaktiven Formeleditor erstellen müssen, können Sie sich das Beispiel troff ansehen. Es hat eine relativ einfache Syntax für Gleichungen, gibt PostScript aus und ist Teil von OS X. Der einfachste Weg, es zu benutzen, würde auch ghostscript erfordern.

Als Beispiel (auf der man-Seite basiert):

die Datei Datei fib.tr erstellen:

$ eqn fib.tr | groff -P-b16 > fib.ps 

berechnen und Extrakt:

.EQ 
x sub i = x sub {i-1} + x sub {i-2} 
.EN 

Convert mit eqn und groff zu Postscript die Bounding Box mit Ghostscript:

In
$ gs -dNOPAUSE -sDEVICE=bbox -- fib.ps 2> fib.bbox 

den Begrenzungsrahmen Informationen an die PS-Datei eine EPS-Datei zu generieren:

$ cat fib.ps | sed -e '/%%Orientation/rfib.bbox' > fib.eps 

Konvertieren Sie die EPS-Datei in ein PDF ein Perl-Skript wird mit den meisten TeX-Distributionen (und erhältlich bei http://tug.org/epstopdf/)

$ epstopdf fib.eps 

Jetzt haben Sie ein PDF-Bild, das nur die gerenderte Gleichung mit minimaler Auffüllung enthält.

Alternativ, wenn Ihre Benutzer TeX installiert haben (oder Sie den Aufwand der Bündelung a minimal TeX distribution mit Ihrer App gehen möchten), bietet LaTeXiT einen Dienst zum Setzen von Gleichungen und zurückgeben sie als PDF-Bilder. Sie könnten es unter NSPerformService anrufen.

+0

Ich wusste nicht über 'troff', klingt aber vielversprechend. Ich werde es versuchen. –

+0

Interessanter Vorschlag. –

+0

Wenn ich versuche, die in Schritt 2 ausgegebenen PS (mit Preview.app unter OSX oder Photoshop) zu rendern, wird ein leeres Bild angezeigt. Stimmt irgendetwas nicht? –