2012-11-26 15 views
5

Robię system prezentacji w QML (z backendem C++) podobny do this one.Możliwość osadzania Latex w QML

Chcę mieć możliwość dołączenia kodu Latex, aby wyświetlić trochę matematyki (wymagane są tylko minimalne możliwości Latex, takie jak sumy, ułamki, super-i zamiany i czcionki matematyczne).

widzę następujące możliwości, aby to zrobić:

  • Korzystanie LaTeX2e:
    1. kompilacji kodu LaTeX dokumentu DVI (z latex)
    2. przekonwertować DVI do SVG (z dvisvgm)
    3. Wyświetl to przy użyciu Image w QML (który obsługuje także SVG)
  • Korzystanie mathjax:
    1. zawinąć kod Latex w małym pliku HTML + obejmują bibliotekę mathjax JS
    2. wyświetlić ten korzystając WebKit dla QML
  • Niestandardowe rozwiązanie (C++):
    1. zapis lub zawierać istniejący minimalny Latex matematyki parser
    2. Napisz do QDeclarativeItem z niestandardowego malowania

Czy istnieje inne rozwiązanie nie widzę ? Wolę pierwsze rozwiązanie, ponieważ drugie brzmi zbyt ciężko, a trzecie zbyt mocno.

Widzę następujący problem z baseline wzoru matematycznego: Chcę móc zawierać formuły śródliniowe (w ramach akapitu). Obecnie akapity tekstowe renderowane są przy użyciu elementu QML Text. Czy istnieje możliwość umieszczenia obrazu w elemencie Tekst (przy użyciu elementu HTML img) z podaną linią bazową ? W jaki sposób mogę określić linię bazową renderowanego dokumentu Latex?

Uwaga: Czas na wykonanie renderingu kodu Latex nie jest problematyczny. Mam zamiar buforować już renderowane formuły, więc nie powinno być problemu z wywoływaniem latex + dvisvgm dla każdej formuły zawartej w dokumencie prezentacji.

Należy również pamiętać, że używam preprocesora (nie pisz ręcznie kodu QML, ale generuję go). Tak więc nie potrzebuję elementu QML dla kodu Latex, ale mogę po prostu wygenerować fragment kodu QML z elementem Image (dla pierwszego rozwiązania). To powinno uprościć osadzanie renderowanego obrazu.

Nie potrzebuję również wspierać zawijania formuły podczas używania lateksu inline.(Latex robi to podczas pisania formuł wbudowanych, ale używam tylko małych formuł, których nie chcę zapakować).

+0

Chciałbym usłyszeć, w którą stronę poszłaś i czy zadziałało to dla twoich celów, jako że trafiamy również w tę kwestię. – gremwell

+0

Zastosowałem podejście 1. Aby osadzić renderowane obrazy w akapitach (w tekście), podzieliłem tekst każdego akapitu na pojedyncze słowa i umieściłem je ręcznie za pomocą niestandardowego algorytmu układu przepływu. Obrazy można następnie ręcznie ustawić. Jeśli znajdę czas, napiszę to jako odpowiedź z wystarczającą ilością szczegółów. Nawiasem mówiąc, SVG nie działa zbyt dobrze, użyłem do tego zrasteryzowanego formatu PNG. Moja aplikacja może zmienić rozdzielczość renderowaną (czyli ponownie przekonwertować obraz), gdy obraz jest skalowany, więc prawie nie zauważysz, że jest to zrasteryzowany obraz. – leemes

Odpowiedz

2

Myślę, że są to trzy dobre opcje i nie mogę wymyślić innego sposobu to.

Wygląda na to, że masz wymóg, aby formuły były zgodne z niektórymi akapitami tekstowymi, dlatego uważam, że opcja 2 to dobry sposób na zrobienie tego.

Nie jest trudno korzystać z komponentu WebKit. Nie jestem pewien, co masz na myśli, mówiąc "zbyt ciężki".

Pozdrawiam!

0

Inną opcją jest użycie komponentu QML z tekstem bogatym, który obsługuje również obrazy (np. TextEdit), a nie obraz - wtedy można umieścić je w linii z normalnym tekstem.

+0

Próbowałem tego podejścia, ale problem polega na tym, że obrazy są zawsze wyrównane w pionie na linii bazowej. Kiedy obraz jest formułą lateksową z literą podzbioru lub czymś podobnym, które powinno zejść poniżej linii bazowej, to nie działa. – leemes