Redigerare och formler

Så testar du en anteckningsapp för LaTeX med åtta formler

Du har en sida ekvationer att skriva rent i kväll, och anteckningsappen i telefonen säger att den har stöd för LaTeX. Det kan betyda fyra olika lösningar, och skillnaden mellan dem syns redan vid den tredje formeln.

Läs guiden
Formelblock

x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}

Bråkstrecket står mellan delarna, inte bredvid dem.
Vad en renderare måste klara, och vad testet kontrollerar
Det korta svaret

Klistra in åtta testformler i appen och titta på vad som kommer tillbaka. Nästlade bråk, en summa med gränserna över och under, en pmatrix, växande parenteser, ett align-block, en uppdelning med cases, ett \def-makro och en kemisträng med \ce skiljer en riktig anteckningsapp med LaTeX från en som ritar några bråk i löptext. Platt text eller en bild som inte går att redigera är underkänt.

01

Klistra in de här åtta formlerna och se vad som kommer tillbaka

Testet tar under en minut och kräver inget konto. Kopiera blocket nedan till en ny anteckning i appen du vill bedöma, ett kodstycke i taget eller alla på en gång, och jämför resultatet med raden som följer efter varje kodstycke. Alla kodstycken här är giltig LaTeX som KaTeX renderar, så ett fel beror på appen och inte på det du matade in.

Självtest för LaTeX med åtta formler
SJÄLVTEST FÖR LATEX I EN ANTECKNINGSAPP
Klistra in ett block i taget. Jämför med raden KORREKT.

1. NÄSTLADE BRÅK
\frac{1}{1 + \frac{1}{1 + \frac{1}{x}}}
KORREKT: tre bråkstreck ovanför varandra, där varje inre streck är kortare
och satt i mindre storlek än strecket utanför.

2. OPERATOR MED GRÄNSER
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}
KORREKT: i displayläge står n=1 och oändlighetstecknet direkt under och
över sigmatecknet, inte till höger om det, och sigmatecknet är högre än
texten runt omkring.

3. MATRISMILJÖ
\begin{pmatrix} a & b \\ c & d \end{pmatrix}^{-1} =
\frac{1}{ad - bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}
KORREKT: två rader, runda parenteser som växer till matrisens hela
höjd, och -1 upphöjt uppe till höger om den avslutande parentesen.

4. VÄXANDE PARENTESER
\left( \sum_{i=1}^{n} a_i b_i \right)^2 \le
\left( \sum_{i=1}^{n} a_i^2 \right) \left( \sum_{i=1}^{n} b_i^2 \right)
KORREKT: varje parentes växer till höjden av summan den omsluter, och
båda parenteserna i ett par ritas lika höga.

5. JUSTERING
\begin{align}
(a+b)^2 &= a^2 + 2ab + b^2 \\
(a-b)^2 &= a^2 - 2ab + b^2
\end{align}
KORREKT: ett block med två rader där likhetstecknen står i samma
kolumn.

6. FALLUPPDELNING
f(x) = \begin{cases}
  x^2 & \text{if } x \ge 0 \\
  -x^2 & \text{if } x < 0
\end{cases}
KORREKT: en enda klammer över båda raderna, upprätt text i de två
villkoren och villkoren i en egen kolumn.

7. MAKRODEFINITION
\def\dd#1{\mathrm{d}#1}
\int_0^1 x^2 \dd{x} = \frac{1}{3}
KORREKT: makrot expanderas, så ett upprätt d står före x, med 0
och 1 vid integraltecknet.

8. KEMI
\ce{H2SO4 + 2NaOH -> Na2SO4 + 2H2O}
KORREKT: nedsänkta siffror, upprätta grundämnessymboler i stället för
kursiva variabler och en hel reaktionspil.

EFTER DE ÅTTA
- Sätt textmarkören i en renderad formel och markera ett tecken. Om
  det inte går är formeln en bild.
- Byt systemet till mörkt läge. En formel som förblir svart har en ljus
  bakgrund inbakad.
- Ställ in anteckningen på största textstorlek. En bild blir suddig. En
  typsatt formel förblir skarp.
Ladda ner textfil

Titta på det som misslyckas, inte på det som lyckas. Kodstycke 1 visar om appen gör riktig typsättning eller bara byter ut textsträngar. Kodstycke 3 och 6 är där en renderare som bygger på en kort ersättningstabell tar stopp. Kodstycke 7 skiljer en LaTeX-parser från en visning som bara ser ut som LaTeX, eftersom en app som ignorerar \def skriver ut texten bokstavligt eller ger ett parsningsfel. Kodstycke 8 kräver mhchem, ett paket som ligger ovanpå den grundläggande matematikgrammatiken, så en app kan klara de sju första och ändå misslyckas med det sista.

02

Fyra saker en app kan mena med stöd för LaTeX

Två appar kan båda skriva LaTeX på sin funktionssida och ändå bete sig helt olika. Var och en av de fyra lösningarna nedan misslyckas på ett sätt som syns utifrån, utan att du behöver läsa någons källkod.

NivåSå fungerar detSå känner du igen denDär det skaver
Delmängd i löptextEn kort ersättningstabell täcker bråk, exponenter och grekiska bokstäver mellan dollarteckenKodstycke 3 kommer tillbaka med ordet pmatrix fortfarande synligt, eller som en enda lång radDen första matrisen, integralen eller falluppdelningen du skriver
Renderad bildLaTeX-koden skickas till en konverterare och kommer tillbaka som en bitmapp eller en SVG i anteckningenDu kan inte sätta textmarkören i formeln, och bilden blir suddig i större textstorlekI mörkt läge blir det svarta tecken på en mörk sida, och en ändring betyder att du skriver om källkoden
WebbläsarmotorEn dold WebView kör KaTeX eller MathJax i JavaScriptDen första formeln i en session visas ett ögonblick efter resten av anteckningen50–150 MB RAM för WebView och en startfördröjning före den första formeln
Inbyggd motorTeX:s regler för boxar och lim körs i appens egen kod, utan någon webbläsare inblandadFormlerna ritas när raden rullar in i bild och byter färg med systemets utseendeDå är det täckningen som är den öppna frågan i stället för hastigheten, så kör de åtta kodstyckena ändå

Siffrorna i tredje raden kommer från README-filen för SwaTex, som beskriver den vanliga plattformsoberoende lösningen som en dold WebView som äter 50–150 MB RAM, en startfördröjning före den första formeln och ingen garanti för att formlerna visas utan anslutning. Det är priset för att återanvända ett JavaScript-bibliotek som appen inte har skrivit själv. Den fjärde nivån kostar mycket mer att bygga och tar bort webbläsaren från sidan.

03

Det här gör en inbyggd typsättningsmotor annorlunda

Phrase renderar matematik med SwaTex, en KaTeX-kompatibel motor för matematik skriven helt i Swift, utan JavaScript, utan WebView och utan DOM. Den har MIT-licens, finns öppet på github.com/PhraseHQ/SwaTex och är en Swift-portning av RaTeX, den KaTeX-kompatibla matematikrenderaren i Rust, skriven från grunden. SwaTex renderar varje formel i AI-anteckningarna i Phrase. Layoutmotorn styr TeX:s regler för boxar och lim utifrån de medföljande typsnittsmåtten från KaTeX, inte utifrån plattformens text-API:er, så resultatet stämmer med KaTeX och RaTeX tecken för tecken.

En färdig mötesanteckning i Phrase: sammanfattningen, öppningsplanen som flödesschema, break even-formeln och åtgärdspunkterna.
En break even-formel satt av SwaTex, bredvid ett flödesschema, i en Phrase-anteckning på iPhone.

Täckningen är 1007 av 1008 poster i den officiella stödtabellen för KaTeX. Där ingår miljöerna pmatrix, align, cases och CD, liksom växande parenteser, accenter och makron som \def, \newcommand och \expandafter. Kemi har fullt stöd för mhchem via \ce och \pu, från en portning av tillståndsmaskinen som har verifierats som byte för byte identisk med RaTeX på en korpus med 253 fall. Bevisträd använder prooftree i bussproofs-stil för slutledningsregler och sekventkalkyler. Kodstycke 3, 5, 6, 7 och 8 ovan ingår alla i den mängden.

Hastighetssiffrorna nedan mättes mot referensmotorn i Rust på identiska korpusar, på samma dator och som median av 3 körningar, med alla 2 541 referensformler bitexakta mellan motorerna. Varje siffra går att återskapa med kommandona i BENCHMARKS.md i repot.

ArbetslastRaTeX (Rust)SwaTex
Tolkning till layout till visningslista41,4 µs/formel12,5 µs/formel (3,3×)
PNG-batch, 100 formler @40px 2×~200 µs/formel34 µs effektivt (parallellt, 5,9×)
Upprepad formel, träff i redigerarens cache41,4 µs105 ns (~390×)
Rullning i redigerarenIngen motsvarande siffra0 rastreringar av tecken (updateLayer)

Likvärdigheten kontrolleras, den påstås inte bara. Repot innehåller scripts/diff_layout.py, som jämför verktyget LayoutDump med layoutprogrammet i RaTeX över referenskorpusen med fler än 1000 formler, och testsviten portar RaTeX:s egna tester för lexer, parser, miljöer, mhchem och layout till Swift. Att rita en formel är halva problemet i en redigerare. Blocket behöver fortfarande en exakt höjd och måste klara att vyer återanvänds, och det är ämnet för texterna om hur ett formelblock får sin höjd och om att ha uträkningen bredvid förklaringen.

När anteckningen finns kan du be assistenten skapa något av den. Med Pro gör Phrase om en anteckning till presentationer, sidor, dashboards, flashcards, quiz och mindmaps, och en sida med genomräknade härledningar passar bra som underlag för ett quiz eller en uppsättning flashcards. Samma sak gäller anteckningar från en föreläsning med ekvationer.

04

Den enda posten som SwaTex inte renderar

Posten som saknas är \includegraphics, det enda undantaget bland de 1008, och KaTeX själv låser det kommandot bakom trust. Kommandot hämtar in en extern bild i en formel, så originalprojektet behandlar det som en fråga om behörighet och inte om typsättning. Fyra \html*-kommandon renderar sitt innehåll och hoppar över attribut som bara finns i DOM, eftersom en inbyggd renderare inte har någon DOM som attributen kan beskriva.

1007 av 1008 poster i stödtabellen för KaTeX

  • Renderade1003
  • Renderade utan attribut som bara finns i DOM (de fyra \html*-kommandona)4
  • Inte renderad: \includegraphics, som även KaTeX låser bakom trust1
SwaTex renderar 1007 av de 1008 posterna i stödtabellen för KaTeX. Det enda som saknas är \includegraphics, som KaTeX själv låser bakom trust.
  • Lägsta systemversion är iOS 18, macOS 15, tvOS 18, watchOS 11 och visionOS 2, styrt av Synchronization.Mutex. Appar som riktar sig till äldre systemversioner kan inte använda SwaTex än.
  • Bara Apples egna plattformar. Det finns inga omslag för React Native, Flutter eller webben.
  • Några beteenden skiljer sig medvetet från RaTeX, och vart och ett är låst med ett regressionstest. En \verb som inte avslutas och x\limits^2 ger parsningsfel i stället för att tyst godtas.
  • Djupt nästlad indata skyddas av en rekursionsräknare och marginal på stacken, vilket ger ett parsningsfel och aldrig en krasch. Fientlig indata bör ändå längdbegränsas av appen som använder motorn.

Den här sidan lämnar två saker utanför. Handskriven matematik är ett annat problem, eftersom Phrase tar emot skrivet, inspelat och importerat material, inte handskrift. Diagram och kodblock är en annan fråga än formler, och de två tekniska texterna som länkas ovan beskriver hur båda ryms i samma redigerare.

Håll isär ytterligare två fakta. SwaTex byggs för macOS 15, medan Mac-appen Phrase kräver macOS 26 eller senare. Att en motor går att kompilera för en plattform säger ingenting om vilka system en app har stöd för. Phrase fungerar på iPhone, iPad och Mac, med en app för Apple Watch för inspelning, och renderar formler med SwaTex på varje enhet.

Phrase för Mac: anteckningsbiblioteket bredvid en plan för att öppna ett kafé, med foto, sammanfattning, flödesschema och break even-formel.
Samma sorts anteckning i Phrase för Mac, som kräver macOS 26 eller senare.
05

Frågor om LaTeX i en anteckningsapp

Kan man skriva matematik i appen Anteckningar? Kör självtestet i appen du redan har i stället för att lita på ett påstående som skrevs för ett år sedan. Apple beskriver vad Anteckningar kan på sina egna supportsidor, och svaret ändras mellan versionerna av iOS. Kodstycke 1 och 3 avgör saken på ungefär tio sekunder.

Kan jag skriva LaTeX-ekvationer i appen Anteckningar? Att skriva LaTeX och att rendera LaTeX är två olika frågor. Alla appar kan spara tecknen \frac{a}{b} som text. Det som räknas är om ett vågrätt streck visas med a ovanför och b under, och det är vad kodstycke 1 kontrollerar.

Vad ska en anteckningsapp med stöd för LaTeX klara? Använd stödtabellen för KaTeX som gemensam måttstock, eftersom den är offentlig och har 1008 poster. En app som klarar miljöer, växande parenteser, makron och mhchem utgår från samma grammatik som referensimplementationerna. En app som klarar bråk i löptext gör något mycket mindre.

Behöver en anteckningsapp för matematik en nätverksanslutning för att rita en formel? Det beror på nivån. En konverterare som skickar tillbaka en bild behöver en tur fram och tillbaka över nätet, och en WebView-motor har en startkostnad före den första formeln. SwaTex tolkar och gör layouten i appens egen kod, utan någon webbläsare inblandad.

Källor och redaktionella anmärkningar

Källorna kontrollerades den 25 september 2026. Steg för Apples funktioner följer Apples aktuella dokumentation, som länkas nedan. Villkoren ändras med varje ny version av iOS.

Publicerat av Eversight, som gör Phrase. Så arbetar vi redaktionellt · Föreslå en rättelse