How to standardize math delimiters in markdown
- Step 1Paste or drop your Markdown — Paste the manuscript into the input box, or switch to Upload and drop a
.md,.mdx,.markdown, or.txtfile. The character counter shows your size against the 500,000-character free limit. - Step 2Decide which renderer you are feeding — If your site uses KaTeX, remark-math, or GitHub-style math, choose the
$target. If you publish through classic MathJax configured for TeX delimiters, choose the\( \)target. The renderer's config, not personal taste, decides this. - Step 3Set the Target style dropdown — Open the options row and pick
$ inline / $$ block (KaTeX)(default) or\( \) inline / \[ \] block (MathJax). There is exactly one option for this tool — there are no separate inline/block toggles. - Step 4Run the normalize pass — Click to process. The tool walks the document, skips fenced code blocks, and rewrites only the delimiter family that is not already in the target form.
- Step 5Spot-check currency and prose dollars — If you targeted
tex, scan any sentence containing two or more literal$(prices, shell variables). The pass pairs consecutive dollars, so$5 ... $10can be mis-wrapped — see the edge cases below. - Step 6Copy or download the result — Copy the normalized Markdown to the clipboard, or download it as a
.mdfile. The output keeps the original filename when you uploaded a file.
Target style options (the only control)
md-math-normalizer exposes a single enum option, target, rendered as the 'Target style' dropdown. There are no inline/block sub-toggles, no whitespace settings, and no presets.
| Option value | Dropdown label | Inline result | Display result | Default |
|---|---|---|---|---|
dollar | $ inline / $$ block (KaTeX) | \(x\) → $x$ | \[x\] → blank line + $$x$$ + blank line | Yes |
tex | \( \) inline / \[ \] block (MathJax) | $x$ → \(x\) | $$x$$ → \[x\] | No |
Exact delimiter transforms per target
What each pass rewrites and what it deliberately leaves alone. Each run converts one direction only — delimiters already in the chosen target style are never re-touched.
| Input form | Target `dollar` | Target `tex` |
|---|---|---|
\( ... \) (inline) | → $ ... $ | Left unchanged (already TeX) |
\[ ... \] (display) | → $$ ... $$ with surrounding blank lines | Left unchanged (already TeX) |
$ ... $ (inline) | Left unchanged (already $) | → \( ... \) |
$$ ... $$ (display) | Left unchanged (already $$) | → \[ ... \] |
Inside ``` ``` fenced block | Preserved verbatim | Preserved verbatim |
Tier limits for the markdown family
Per-file size and character limits, plus how many files you can queue. The character limit (charLimit) is enforced independently of byte size.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Before/after fragments from real research drafts. The tool rewrites one delimiter direction per run, so the target you pick determines exactly which markers move.
Mixed MathJax + dollar draft → KaTeX-ready
A note that accumulated both \(...\) and \[...\] from pasted MathJax plus some native $. Target dollar converts the TeX delimiters and leaves the existing $ math alone.
INPUT:
The identity \( e^{i\pi} + 1 = 0 \) follows from
\[ e^{i\theta} = \cos\theta + i\sin\theta \]
which you can also write $a^2 + b^2 = c^2$.
TARGET: dollar
OUTPUT:
The identity $ e^{i\pi} + 1 = 0 $ follows from
$$ e^{i\theta} = \cos\theta + i\sin\theta $$
which you can also write $a^2 + b^2 = c^2$.KaTeX draft → classic MathJax site
Moving a $/$$ manuscript to a page whose MathJax is configured for TeX delimiters. Target tex rewrites both inline and display dollars.
INPUT:
Let $f(x) = x^2$ so that:
$$ \int_0^1 f(x)\,dx = \tfrac{1}{3} $$
TARGET: tex
OUTPUT:
Let \(f(x) = x^2\) so that:
\[ \int_0^1 f(x)\,dx = \tfrac{1}{3} \]Display block gets its own blank-line-surrounded block
Targeting dollar not only changes \[...\] to $$...$$ but injects a blank line before and after, so the display equation is a standalone block — which remark-math and KaTeX require.
INPUT:
The sum is \[ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} \] for all n.
TARGET: dollar
OUTPUT:
The sum is
$$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $$
for all n.Re-running is safe (idempotent)
Because each pass only touches the non-target family, feeding already-normalized output back in changes nothing. Useful when you are unsure whether a draft was processed.
INPUT (already dollar-style): Given $g(t)$ and $$ h(t) = g'(t) $$ we proceed. TARGET: dollar OUTPUT (unchanged): Given $g(t)$ and $$ h(t) = g'(t) $$ we proceed.
LaTeX shown as a code sample is preserved
A methods section that documents delimiter syntax inside a fenced block. The fenced content is skipped; only the prose example is converted.
INPUT:
Write inline math as \(x\) in prose, e.g.:
```latex
The Euler form \(e^{ix}\) renders inline.
```
TARGET: dollar
OUTPUT:
Write inline math as $x$ in prose, e.g.:
```latex
The Euler form \(e^{ix}\) renders inline.
```Edge cases and what actually happens
Currency dollars collide when targeting tex
Invalid pairingWith target tex, the inline rule pairs consecutive $ signs. A sentence like costs $5 and $10 becomes costs \(5 and \)10 because the parser reads the two literal dollars as one inline-math pair. Avoid the tex target on documents with prose currency, or convert to dollar instead (which only touches \(...\) / \[...\] and never your literal $).
Escaped dollar `\$` is not respected
Invalid pairingThe tool does not treat \$ as a literal. With target tex, Price \$5 then $a$ mis-pairs the escaped dollar with the next real one. If your prose uses \$ for currency, prefer the dollar target so dollar signs are never scanned.
Math inside inline backtick code is converted
EditedOnly triple-backtick fenced blocks are protected. An inline span like ` \(x\) IS rewritten to $x$ because the splitter does not recognize inline code. If you are documenting raw delimiter syntax, put the example in a fenced ``` block, not inline backticks.
Tilde `~~~` code fences are not protected
EditedThe fence detector matches only ``` fences. Math inside a ~~~ ... ~~~` block will be converted like ordinary prose. Use triple-backtick fences for any code that must keep its delimiters verbatim.
Inline math spanning a line break is skipped
PreservedThe inline $...$ → \(...\) rule rejects content containing a newline, so $a\nb$ across two lines is left as-is. Display math ($$...$$) does span lines and is converted normally.
Inner whitespace and padding are kept
PreservedThe tool moves delimiters but does not trim or normalize the math inside them. \( E = mc^2 \) becomes $ E = mc^2 $ with the surrounding spaces intact. If you need tidy spacing, edit manually — this tool only converts delimiter style.
`\begin{equation}` environments are not converted
PreservedOnly the four delimiter forms (\(, \[, $, $$) are recognized. A \begin{equation} ... \end{equation} AMS environment passes through untouched. Wrap it in your target delimiters by hand if your renderer needs them.
Already-target delimiters are never re-spaced
By designTargeting dollar does not add blank lines around an existing $$...$$ block — only around \[...\] it converts. If a pre-existing $$ block lacks blank-line surrounds, this tool won't add them; do that edit manually or run a prettify pass with md-prettifier.
Document exceeds the free character limit
RejectedInputs over 500,000 characters (Free) are blocked before processing. A full thesis with appendices can hit this; upgrade to Pro for 5,000,000 characters or split the file first with md-splitter.
Frequently asked questions
Which target should I pick for KaTeX?
Choose $ inline / $$ block (KaTeX), i.e. the dollar target. KaTeX integrations such as remark-math, rehype-katex, and GitHub's native math rendering expect $...$ for inline and $$...$$ for display. This pass converts any \(...\) and \[...\] to that form and leaves your existing $ math alone.
Which target should I pick for MathJax?
It depends on how MathJax is configured. Many sites enable the tex input jax with \( / \[ delimiters, in which case pick the \( \) / \[ \] target. But MathJax can also be configured to accept $/$$. Check your MathJax config's inlineMath / displayMath arrays and match the tool's target to it.
Does it convert both directions in one run?
No. Each run rewrites a single direction toward the target you chose. Target dollar only changes \(...\) and \[...\]; target tex only changes $...$ and $$...$$. Delimiters already in the target style are left exactly as-is, which makes re-running harmless.
Will it touch LaTeX inside code blocks?
Triple-backtick fenced code blocks are detected and skipped, so LaTeX shown as a code example is preserved verbatim. Note that inline backtick spans (` \(x\) ) and tilde ~~~ fences are NOT protected — only ``` fences are.
Why did my display equation get extra blank lines?
When converting \[...\] to the dollar target, the tool wraps the result as $$...$$ with a blank line before and after so it becomes a standalone block. That is intentional — most $-based renderers require display math on its own line to typeset it as a block rather than inline.
It broke a sentence with dollar amounts — why?
With target tex, the inline rule pairs consecutive $ characters, so two prose dollars like $5 ... $10 get read as one inline-math span. Use the dollar target instead (it never scans literal $), or temporarily replace currency dollars before converting.
Does it normalize the spacing inside `$ ... $`?
No. The tool only changes the delimiter characters; the math content and any internal padding are preserved exactly. \( E = mc^2 \) becomes $ E = mc^2 $, spaces included.
Is anything uploaded to a server?
No. The normalization runs entirely in your browser via regex passes over the text. Nothing is sent anywhere, which is why it is safe for unpublished or confidential research.
What file types can I drop?
.md, .mdx, .markdown, and .txt. You can also just paste text directly. Output is plain Markdown with the same delimiters now consistent.
How big a document can I process for free?
Up to 1 MB or 500,000 characters per file on the Free tier, one file at a time. Pro raises this to 10 MB / 5,000,000 characters and 10 files; the character limit is enforced separately from byte size.
Does it handle `\begin{equation}` blocks?
No. Only the four delimiter forms (\(, \[, $, $$) are recognized. AMS environments like \begin{equation}...\end{equation} pass through unchanged — wrap them in your target delimiters manually if needed.
What other tools pair well with this for papers?
Tag untagged code samples with md-code-block-tagger, tidy overall formatting with md-prettifier, and run a final style check with md-lint before publishing.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.