MathML / Latex in UIView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • einheitswurzel schrieb:

    Hehe, also ich hab den gesamte Thread jetzt nicht gelesen, aber für latex ist mal klar, dass du die Distribution brauchst. Die wird nicht ohne grund annähernd gigabyte-größe haben.

    Eleganter gehts bestimmt, aber wenn du eh das webview benutzt und davon ausgehst, dass deine user internetzugang haben, dann könntest als Workaround das matheboard mißbrauchen:

    darin wird dann der LaTeX Ausruck "f(x)=\cos x \int_\pi^x t \cos t dt"

    zu

    http://www.matheboard.de/latex2png/latex2png.php?f(x)=\cosx \int_\pi^x t \cos t dt



    Grüße,

    einheitswurzel
    Deine Hilfsbereitschaft ehrt dich sehr, aber (zum Glück) sind wir bzw. ich schon über die Idee mit LaTex hinweg und mittlerweile bei MathML in einem UIWebView angelangt. Darstellung und so klappt ja auch schon super, das einzige was noch nicht klappt, ist, dass die Interaktivität durch ein JavaScript erhöht werden soll, um per Fingertip Zahlen oder ähnliches Verändern zu können. Du kannst ja mal die letzten paar Posts angucken wo ich grade festhänge, vielleicht fängt dir ja eine Lösung ein!
  • scriptedSheep schrieb:

    Hier der entsprechende Eintrag, also ja, ich habs gemacht!

    Quellcode

    1. CFBundleURLTypes
    2. CFBundleURLSchemes grapher CFBundleURLName


    EDIT: Ich kann nichts dafür, dass das Bord den Quelltext irgendwie interpretieren will, auch wenn das in

    Quellcode

    1. -Tags steht! Keiner eine Lösung? Wäre echt wichtig![/quote]
    2. Der Eintrag sollte ungefähr so aussehen, wenn Du Dir die Info.plist als Quelltext anzeigen lässt: [code] <key>CFBundleURLTypes</key>
    3. <array>
    4. <dict>
    5. <key>CFBundleURLName</key>
    6. <string>Grapher App</string>
    7. <key>CFBundleURLSchemes</key>
    8. <array>
    9. <string>grapher</string>
    10. </array>
    11. </dict>
    12. </array>
    Alles anzeigen

    BTW: Es gibt bereits eine MacOS X Applikation namens Grapher von Apple. Zu finden bei den Dienstprogrammen. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Jaja, ich weiß, ich kenne und liebe die Grapher-Applikation :D
    Also ich habe noch mal nachgeguckt, das mit dem Scheme bringt glaube ich nichts beziehungsweise nur sehr wenig. Ich habe auch versucht nach der Dokumentation von Apple die ins WebKit integrierte JavaScript-Bridge zu nehmen, aber ich kriege es auf WebKit-Mobile nicht zum laufen. Wäre vielleicht noch eine Idee, das ganze über

    Quellcode

    1. window.location = "/event/"+event.target.id;
    2. window.location.reload();
    zu machen?

    Oder liegt es doch dadran, dass ich versuche HTML-Code direkt in mein UIWebView zu laden mittels

    Quellcode

    1. [displayView loadHTMLString:mathString baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
  • scriptedSheep schrieb:

    Jaja, ich weiß, ich kenne und liebe die Grapher-Applikation

    Du weißt, dass auch der App-Name ein Ablehungsgrund sein kann?

    scriptedSheep schrieb:

    Also ich habe noch mal nachgeguckt, das mit dem Scheme bringt glaube ich nichts beziehungsweise nur sehr wenig.

    Ich habe schon einige Apps mit eigenem Schema implementiert. Das funktioniert, wie es soll.

    Bau doch mal einen normalen Link à la <a href="grapher://...">Testlink</a> in Dein HTML ein und schau mal, ob der aufgerufen wird.

    scriptedSheep schrieb:

    Wäre vielleicht noch eine Idee, das ganze über

    Quellcode

    1. window.location = "/event/"+event.target.id;
    2. window.location.reload();

    zu machen?

    Ich glaube nicht, dass das einen Unterschied macht. Die zweite Zeile kannst Du Dir übrigens sparen und die erste wird aus zwei Gründen nicht funktionieren:
    1. Die linke Seite muss window.location.href lauten.
    2. Auf der rechten Seite gibst Du eine URI an, die ist relativ zur aktuellen URL. Große Preisfrage, was ist denn die aktuelle URL Deines WebViews?


    scriptedSheep schrieb:

    Oder liegt es doch dadran, dass ich versuche HTML-Code direkt in mein UIWebView zu laden mittels

    Nein, das sollte keinen Unterschied machen.
    „Meine Komplikation hatte eine Komplikation.“
  • Na die aktuelle URL meines WebViews kann ich doch einfach rausbekommen, ist ja von meinem filePath...
    Wie wäre es damit?

    Quellcode

    1. window.location.href = window.location.href+"/event/"+event.target.id;



    Das mit dem Namen ist mir klar, der ist nur als Platzhalter gedacht, wenn die App überhaupt irgendwann mal fertig wird^^
    Ich schreibe noch mal, wenn ich das mit dem Link nachher ausprobiert habe
  • Also,

    Quellcode

    1. <a href='...'></a>
    geht, geht sogar wenn ich eine beliebige URL nehme, also nicht
    sondern
    grapher://example
    Was mache ich also beim JavaScript dann bitte falsch....was man auch machen könnte wäre, dass man einfach anstatt onclick handlern links verwendet, man müsste die mittels CSS so stylen, dass die nicht blau und nicht unterstrichen sind....müsste doch funktionieren, oder? Wäre wahrscheinlich sogar echt einfacher :D
  • scriptedSheep schrieb:

    Was mache ich also beim JavaScript dann bitte falsch....was man auch machen könnte wäre, dass man einfach anstatt onclick handlern links verwendet, man müsste die mittels CSS so stylen, dass die nicht blau und nicht unterstrichen sind....müsste doch funktionieren, oder? Wäre wahrscheinlich sogar echt einfacher

    Genau deshalb solltest Du ja den Link ausprobieren ;)
    „Meine Komplikation hatte eine Komplikation.“
  • scriptedSheep schrieb:

    Okay, ich habe das ausprobiert, funktioniert super...Muss nur mal meinen Code dran anpassen, wegen anderen Sachen die ich noch nebenbei machen muss kann das also durchaus etwas dauern...Ich melde mich, wenn es etwas neues gibt...

    Es geht auch mit JavaScript und Onclick-Handlern an den einzelnen Elementen:

    Quellcode

    1. <script type="text/javascript" language="JavaScript">
    2. function openURL(inURL) {
    3. window.location.href = inURL;
    4. return false;
    5. }
    6. function getPosition(inElement) {
    7. var thePosition = new Object();
    8. var theElement = inElement;
    9. thePosition.x = 0;
    10. thePosition.y = 0;
    11. while(theElement) {
    12. thePosition.x += theElement.offsetLeft;
    13. thePosition.y += theElement.offsetTop;
    14. theElement = theElement.offsetParent;
    15. }
    16. return thePosition;
    17. }
    18. function openElement(inElement) {
    19. var thePosition = getPosition(inElement);
    20. var theURL = "schema://mathml:" + inElement.id + "/" +
    21. thePosition.x + "/" + thePosition.y + "/" +
    22. inElement.offsetWidth + "/" + inElement.offsetHeight;
    23. return openURL(theURL);
    24. }
    25. </script>
    Alles anzeigen

    Die Funktion openElement(inElement) bastelt Dir eine URL mit der absoluten Position und der Größe des übergebenen Elements zusammen. Die Element-Id - muss natürlich ein passender Integer sein - verwende ich als Post. Dann kann sie in der App mit [inURL port] leicht ermittelt werden. Das MathML kann dann so aussehen:

    Quellcode

    1. <math xmlns="http://www.w3.org/1998/Math/MathML">
    2. <mrow>
    3. <mi id="1" onclick="openElement(this);">a</mi>
    4. <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
    5. <msup>
    6. <mi>x</mi>
    7. <mn>2</mn>
    8. </msup>
    9. <mo>+</mo>
    10. <mi>b</mi>
    11. <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
    12. <mi id="22" onclick="openElement(this);">x</mi>
    13. <mo>+</mo>
    14. <mi>c</mi>
    15. </mrow>
    16. </math>
    Alles anzeigen
    , wobei das a und das zweite x dann klickbar sind.
    „Meine Komplikation hatte eine Komplikation.“