NVDA Math Formula Editing: The Complete 2026 Guide
How blind and low-vision students can read, navigate, and edit equations with NVDA β including the new voice-command approach that makes editing possible without retyping the whole formula.
1. Why math is uniquely hard for screen reader users
Text on a web page is easy for a screen reader. It's linear, it has semantic meaning, and NVDA can read it character-by-character, word-by-word, or sentence-by-sentence. Mathematical formulas are different. A fraction like -b/2a is two-dimensional β the numerator sits above the denominator. A power like xΒ² has its exponent floating in the upper right. A radical wraps across its radicand. None of this has a natural linear reading order.
For decades, the common workaround was LaTeX source code. NVDA would read \frac{-b}{2a} as a string of characters β including every backslash and brace. This is tolerable for short expressions, but by the time you reach \frac{-b \pm \sqrt{b^{2} - 4ac}}{2a}, even a fluent LaTeX reader loses track of the structure.
The modern solution is MathML β a semantic XML vocabulary that describes the structure of a formula, not its rendering.
2. How MathML makes formulas accessible
MathML represents the quadratic formula as a nested tree: a fraction (mfrac) containing a numerator (mrow) with a sum (mrow, mo, msqrt) and a denominator (mrow). NVDA can walk this tree β announcing "start fraction", reading the numerator, saying "over", reading the denominator, then "end fraction" β rather than reading a flat string.
The key requirement is that the formula must be rendered as MathML that the screen reader can access. There are two main ways this happens on the web today:
- KaTeX with
htmlAndMathmloutput β renders both a visual HTML element (for sighted users) and a hidden<math>element (for screen readers). The visual element hasaria-hidden="true". - MathJax with accessibility extension β similar approach, slightly more configuration.
MathVoice uses KaTeX with htmlAndMathml mode. Every formula renders both visually and semantically in a single call.
3. Setting up NVDA for math: MathPlayer vs MathCAT
NVDA cannot read MathML by default. You need a math provider β an add-on that intercepts the <math> element and converts it to speech and Braille.
Option A: NVDA + MathCAT (Recommended in 2026)
MathCAT (Math Capable Assistive Technology) is a free, actively maintained NVDA add-on developed by Neil Soiffer. As of 2026 it is the recommended choice:
- Download the latest MathCAT add-on from the NVDA Community Add-ons Store (Tools β Add-ons Store β search "MathCAT").
- Install and restart NVDA.
- Navigate to any page with a KaTeX or MathJax formula. Press Enter on the formula to enter math navigation mode.
Enter math navigation: Enter
Move to next element: β
Move deeper (into fraction): β
Move to parent: β
Describe current node: Shift+β
Exit math navigation: Escape
Option B: NVDA + MathPlayer
MathPlayer (Design Science) was the original NVDA math provider. It remains functional for NVDA on Windows 10/11 with Firefox. However, MathPlayer development has slowed and MathCAT is preferred for new setups.
Braille math
MathCAT supports Nemeth Code and UEB Math output on refreshable Braille displays. Go to NVDA Preferences β MathCAT Settings β Braille to select your preferred code.
4. Navigating a formula with NVDA
Once you enter math navigation mode (press Enter on a formula), NVDA reads the formula in MathSpeak β a standardised spoken-math vocabulary developed by the MathSpeak Initiative:
"start fraction negative b plus or minus start square root b squared minus 4 a c end square root over 2a end fraction"
You can then drill into sub-expressions:
- Press β to move deeper. On the quadratic formula, this takes you inside the fraction: "numerator: negative b plus or minus square rootβ¦"
- Press β to move to the next sibling. On the numerator, this takes you to the denominator: "denominator: 2a"
- Press β to go back to the parent: "fraction"
- Press Escape to exit math navigation and return to normal document reading.
This interactive navigation is exactly what makes MathML + MathCAT powerful for blind STEM students. A long expression can be explored structurally rather than read as a flat string.
5. The editing problem: why reading β editing
NVDA with MathCAT solves the reading problem well. The editing problem is different, and it's where most existing tools break down.
Consider a student working through an algebra problem. They've typed the quadratic formula and now need to change the 4ac term to 4bc. Their options with existing tools:
- Edit the LaTeX source directly β navigate to the correct position in a string like
b^{2} - 4ac, delete "a", type "b". Works, but requires fluent LaTeX knowledge and careful character-level navigation. - Use a GUI math editor β navigate with the mouse or arrow keys to the correct node and modify it. Difficult or impossible without vision.
- Retype the whole expression β delete the formula and dictate it again from scratch. This is what most students actually do, and it erases all previous work.
None of these approaches are good. The root cause is that all existing tools treat the formula as a string β either LaTeX source or a linear dictation buffer. Editing a string means navigating characters. The formula's structure is discarded.
6. The AST approach: surgical voice edits
MathVoice solves the editing problem by storing formulas as Abstract Syntax Trees β the same data structure compilers use to represent code. The quadratic formula becomes a tree:
FRACTION
numerator: SUM
- NEG(b)
- OP(Β±)
- SQRT
radicand: SUM
- POWER(b, 2)
- OP(-)
- PRODUCT(4, a, c)
denominator: PRODUCT(2, a)
When a student says "change the denominator to 2b", MathVoice parses that command, identifies the denominator node, and replaces only that node. The rest of the tree is unchanged. The LaTeX output is regenerated from the modified tree.
This means:
- No character-level navigation
- No LaTeX knowledge required
- No risk of accidentally corrupting other parts of the formula
- Every edit is logged as a structured diff:
{op:"REPLACE_VALUE", role:"denominator", before:"2a", after:"2b"} - Undo is per-node, not per-keystroke
The NLU pipeline uses a three-tier approach: fast regex for common commands (under 1ms), LLM for complex edge cases (~500ms), and UNKNOWN for graceful failure. The regex tier handles over 85% of real-world commands with no API call at all.
"change the denominator to n+1" β REPLACE_VALUE on denominator node
"delete the exponent" β DELETE_NODE on exponent node
"negate the numerator" β NEGATE_NODE β adds/removes leading minus
"wrap the radicand in a fraction" β WRAP_NODE with FRACTION wrapper
"subtract 2x from both sides" β APPLY_INVERSE (ALGEBRA mode)
"move the 2a term to the other side" β TRANSPOSE_TERM (ALGEBRA mode)
7. Practical workflow: NVDA + MathVoice
Here's a recommended workflow for a blind student working on an algebra assignment using NVDA and MathVoice:
- Open MathVoice Studio at mathvoice.app/studio in Chrome or Edge (full Web Speech API support).
- Dictate or type the initial formula. Type the LaTeX in the source panel or dictate it using the microphone button.
- Read the formula aloud using the Read button. NVDA's MathCAT will provide interactive navigation. Press Enter on the formula to explore it structurally.
- Make edits by voice. Press Spacebar to activate the microphone and say your command. The formula updates immediately. An
aria-live="polite"region announces the change: "Formula updated: start fraction x over n plus 1 end fraction." - Review the diff log β every mutation is listed with before/after values. Use the Undo button to reverse any step.
- Copy the LaTeX or export the MathML for submission.
8. Browser and platform notes
| Browser / Platform | ASR | MathML rendering | NVDA + MathCAT |
|---|---|---|---|
| Chrome (Windows) | β Web Speech | β KaTeX htmlAndMathml | β Full support |
| Edge (Windows) | β Web Speech | β | β Full support |
| Firefox (Windows) | β οΈ No Web Speech | β | β Full support |
| Safari (macOS 15+) | β οΈ Partial (~60s) | β | N/A (use VoiceOver) |
| Safari iOS | β No Web Speech | β | N/A (use VoiceOver) |
Firefox and Safari users: set ASR Provider to "Whisper" in the sidebar panel. This requires the /api/transcribe proxy to be deployed on your institution's server.
Try MathVoice Studio β Free
No account required. Works in Chrome and Edge on Windows. Full NVDA + MathCAT support.
Open Studio βFor institutional deployment, disability services setup, or a signed VPAT and DPA, contact [email protected].