Stöd för formler

Kort om att lägga till LaTeX

25 juni 2019 - -

Vad ska jag ha det till?

Jag vill ha stöd för formler för att skriva färdigt om Peter Lundgren och klimatet. Här är några formler, på egen rad och i text:

\[ \begin{aligned} \sum_{i=0}^n i^2 &= \frac{(n^2+n)(2n+1)}{6} \\ y &= mx+c \end{aligned} \]

Det fungerar också att ha formler i text utan radbrott: \(\sum_{i=0}^n i^2\), \(\iint x\cos y dx dy\). Text kan komma efter matten.

Jag läste om olika tekniker och försökte få några stycken att fungera. Hela webbsidan bygger på markdown-filer. De konverteras till statiska HTML-filer, laddas upp till webservern och servas statiskt. Stöd för formler behöver alltså passa in i webbsidans arkitektur. Det ska också helst ladda snabbt och se snyggt ut.

Passa in i arkitekturen

Jag vill fortsätta med att primärt skriva texten i Markdown. För att lägga till ett inlägg behöver jag nu skriva en Markdown-fil, och lägga till dessa rader i python-filen:

 posts = [
   # ...
   Post(title="Stöd för formler",
     description="Kort om att lägga till LaTeX",
     date="?? ?? 2019",
     content_markdown_file="posts/test_math.md"),
   # ...
 ]
 

Jag vill ha något ungefär lika enkelt som att skriva matten mellan $-tecken i Markdown-filen. Huvudsteget i att bygga HTML-filen är att köra Markdown genom programmet Pandoc. Pandocs version av Markdown ska stödja redan stödja TeX-matte inom dollartecken. Jag behövde inte ens ändra några argument. Problemet var att det inte fungerade:

[WARNING] Could not convert TeX math '\sum_{i=0}^n i^2', rendering as TeX

Jag sökte på det, men kunde inte förstå varför. \iint x\cos y dx dy blev renderad korrekt, men inte summan. Jag försökte installera mer LaTeX-paket med texlive-full, men det hjälpte inte.

Snyggt och snabbt

Nuförtiden har Wikipedia formler i SVG-bilder. De verkar ha vissa brister, men det ser för det mesta snyggt ut, zoom ändrar i både formler och text, och det blir inte pixlat av inzoomning. Tidigare var det PNG-bilder.

Att bygga SVG-bilder på serversidan verkar alldeles för krångligt. Istället finns MathJax och KaTeX. Man skickar hela TeX-koden till klienten som ritar ut det genom ett JS-bibliotek:

Jag lade till MathJax. Folk på internet säger att det finns prestanda-problem och att olika fonter stöds dåligt. Men det verkar bra med de webbläsare som jag har testat med. Ska köra med det tillsvidare.