diff --git a/dollar.rkt b/dollar.rkt index fd2d19342..34c76a3dc 100644 --- a/dollar.rkt +++ b/dollar.rkt @@ -8,6 +8,7 @@ racket/runtime-path setup/collects "katex-convert-unicode.rkt" + "mathjax-convert-unicode.rkt" racket/list) (provide $ @@ -114,13 +115,11 @@ EOJS (define (load-style-string src) (string-append #<'); -})(); +" />');})(); EOJS )) diff --git a/katex-convert-unicode.rkt b/katex-convert-unicode.rkt index 3f2d74bcb..c4fd336d3 100644 --- a/katex-convert-unicode.rkt +++ b/katex-convert-unicode.rkt @@ -1,7 +1,8 @@ #lang at-exp racket/base (require racket/string) -(provide katex-convert-unicode) +(provide katex-convert-unicode + string-replace*) (define (literal-alternatives→regexp literal-alternatives) (string-append "(" @@ -22,96 +23,98 @@ replacement (string-append "$" replacement "$")))))) -(define (katex-convert-unicode str mathmode?) +(define (katex-convert-unicode str mathmode? [more-sym→* '()]) + (define sym→* + `([₀ "{}_0"] + [₁ "{}_1"] + [₂ "{}_2"] + [₃ "{}_3"] + [₄ "{}_4"] + [₅ "{}_5"] + [₆ "{}_6"] + [₇ "{}_7"] + [₈ "{}_8"] + [₉ "{}_9"] + [ᵢ "{}_i"] + [ⱼ "{}_j"] + [ₖ "{}_k"] + [ₗ "{}_l"] + [ₘ "{}_m"] + [ₙ "{}_n"] + [ₒ "{}_o"] + [ₓ "{}_x"] + [⁰ "{}^0"] + [¹ "{}^1"] + [² "{}^2"] + [³ "{}^3"] + [⁴ "{}^4"] + [⁵ "{}^5"] + [⁶ "{}^6"] + [⁷ "{}^7"] + [⁸ "{}^8"] + [⁹ "{}^9"] + [ⁱ "{}^i"] + [ʲ "{}^j"] + [ᵏ "{}^k"] + [ˡ "{}^l"] + [ᵐ "{}^m"] + [ⁿ "{}^n"] + [ᵒ "{}^o"] + [⊆ "\\subseteq{}" "\\ensuremath{\\subseteq}"] + [⊂ "\\subset{}" "\\ensuremath{\\subset}"] + [⊇ "\\supseteq{}" "\\ensuremath{\\supseteq}"] + [⊃ "\\supset{}" "\\ensuremath{\\supset}"] + [→ "\\rightarrow{}" "\\ensuremath{\\rightarrow}"] + [⇒ "\\Rightarrow{}" "\\ensuremath{\\Rightarrow}"] + [← "\\leftarrow{}" "\\ensuremath{\\leftarrow}"] + [⇐ "\\Leftarrow{}" "\\ensuremath{\\Leftarrow}"] + [↔ "\\leftrightarrow{}" "\\ensuremath{\\leftrightarrow}"] + [⇔ "\\Leftrightarrow{}" "\\ensuremath{\\Leftrightarrow}"] + ;; Partially extracted from my .XCompose generator + [ñ "\\tilde{n}" "{\\ifmmode\\tilde{n}\\else\\~{n}\\fi}"] + [Ñ "\\tilde{N}" "{\\ifmmode\\tilde{N}\\else\\~{N}\\fi}"] + [⋆ "\\star{}" "\\ensuremath{\\star}"] + [⍣ "\\ddot{\\star}}" "\\ensuremath{\\ddot{\\star}}"] + [⃰ "^*" "^*"] + [⟨ "\\langle{}" "\\ensuremath{\\mathsmaller{\\raisemath{.15ex}{\\langle}}}"] + [⟩ "\\rangle{}" "\\ensuremath{\\mathsmaller{\\raisemath{.15ex}{\\rangle}}}"] + [⋯ "\\cdots{}"] + [⋮ "\\vdots{}"] + [⋰ "\\iddots{}"] + [⋱ "\\ddots{}"] + [⧺ "\\mathbin{+\\mkern-6.5mu+}" "\\ensuremath{\\mathbin{+\\mkern-6.5mu+}}"] + [∅ "\\emptyset{}" "\\ensuremath{\\emptyset}"] + [ı⃗ "\\vec{\\i}}" "\\ensuremath{\\vec{\\i}"] + [⊕ "\\oplus{}" "\\ensuremath{\\oplus}"] + [⊖ "\\ominus{}" "\\ensuremath{\\ominus}"] + [⋓ "\\Cup{}" "\\ensuremath{\\Cup}"] + ;[ₗ "\\ensuremath{_{l}}"] + [∷ "::"] + [Λ "\\Lambda{}" "\\ensuremath{\\Lambda}"] + [∀ "\\forall{}"] + [∃ "\\exists{}"] + [≡ "\\equiv{}"] + [≢ "\\not\\equiv{}"] + [… "\\ldots{}"] + [⋯ "\\cdots{}"] + [⋰ "\\uddots{}"] ;; or \iddots from package mathdots, see http://tex.stackexchange.com/a/17650 + [⋱ "\\ddots{}"] + [∌ "\\notni{}"] + [ℰ "\\mathcal{E}"] + [• "\\bullet{}"] + [′ "'"] + [″ "''"] + [‴ "'''"] + [⁗ "''''"] + [⋃ "\\bigcup{}"] + [⋂ "\\bigcap{}"] + [⋀ "\\bigwedge{}"] + [⋁ "\\bigvee{}"] + [± "\\pm{}"] + )) (if (string? str) (string-replace* str mathmode? - `([₀ "{}_0"] - [₁ "{}_1"] - [₂ "{}_2"] - [₃ "{}_3"] - [₄ "{}_4"] - [₅ "{}_5"] - [₆ "{}_6"] - [₇ "{}_7"] - [₈ "{}_8"] - [₉ "{}_9"] - [ᵢ "{}_i"] - [ⱼ "{}_j"] - [ₖ "{}_k"] - [ₗ "{}_l"] - [ₘ "{}_m"] - [ₙ "{}_n"] - [ₒ "{}_o"] - [ₓ "{}_x"] - [⁰ "{}^0"] - [¹ "{}^1"] - [² "{}^2"] - [³ "{}^3"] - [⁴ "{}^4"] - [⁵ "{}^5"] - [⁶ "{}^6"] - [⁷ "{}^7"] - [⁸ "{}^8"] - [⁹ "{}^9"] - [ⁱ "{}^i"] - [ʲ "{}^j"] - [ᵏ "{}^k"] - [ˡ "{}^l"] - [ᵐ "{}^m"] - [ⁿ "{}^n"] - [ᵒ "{}^o"] - [⊆ "\\subseteq{}" "\\ensuremath{\\subseteq}"] - [⊂ "\\subset{}" "\\ensuremath{\\subset}"] - [⊇ "\\supseteq{}" "\\ensuremath{\\supseteq}"] - [⊃ "\\supset{}" "\\ensuremath{\\supset}"] - [→ "\\rightarrow{}" "\\ensuremath{\\rightarrow}"] - [⇒ "\\Rightarrow{}" "\\ensuremath{\\Rightarrow}"] - [← "\\leftarrow{}" "\\ensuremath{\\leftarrow}"] - [⇐ "\\Leftarrow{}" "\\ensuremath{\\Leftarrow}"] - [↔ "\\leftrightarrow{}" "\\ensuremath{\\leftrightarrow}"] - [⇔ "\\Leftrightarrow{}" "\\ensuremath{\\Leftrightarrow}"] - ;; Partially extracted from my .XCompose generator - [ñ "\\tilde{n}" "{\\ifmmode\\tilde{n}\\else\\~{n}\\fi}"] - [Ñ "\\tilde{N}" "{\\ifmmode\\tilde{N}\\else\\~{N}\\fi}"] - [⋆ "\\star{}" "\\ensuremath{\\star}"] - [⍣ "\\ddot{\\star}}" "\\ensuremath{\\ddot{\\star}}"] - [⃰ "^*" "^*"] - [⟨ "\\langle{}" "\\ensuremath{\\mathsmaller{\\raisemath{.15ex}{\\langle}}}"] - [⟩ "\\rangle{}" "\\ensuremath{\\mathsmaller{\\raisemath{.15ex}{\\rangle}}}"] - [⋯ "\\cdots{}"] - [⋮ "\\vdots{}"] - [⋰ "\\iddots{}"] - [⋱ "\\ddots{}"] - [⧺ "\\mathbin{+\\mkern-6.5mu+}" "\\ensuremath{\\mathbin{+\\mkern-6.5mu+}}"] - [∅ "\\emptyset{}" "\\ensuremath{\\emptyset}"] - [ı⃗ "\\vec{\\i}}" "\\ensuremath{\\vec{\\i}"] - [⊕ "\\oplus{}" "\\ensuremath{\\oplus}"] - [⊖ "\\ominus{}" "\\ensuremath{\\ominus}"] - [⋓ "\\Cup{}" "\\ensuremath{\\Cup}"] - ;[ₗ "\\ensuremath{_{l}}"] - [∷ "::"] - [Λ "\\Lambda{}" "\\ensuremath{\\Lambda}"] - [∀ "\\forall{}"] - [∃ "\\exists{}"] - [≡ "\\equiv{}"] - [≢ "\\not\\equiv{}"] - [… "\\ldots{}"] - [⋯ "\\cdots{}"] - [⋰ "\\uddots{}"] ;; or \iddots from package mathdots, see http://tex.stackexchange.com/a/17650 - [⋱ "\\ddots{}"] - [∌ "\\notni{}"] - [ℰ "\\mathcal{E}"] - [• "\\bullet{}"] - [′ "'"] - [″ "''"] - [‴ "'''"] - [⁗ "''''"] - [⋃ "\\bigcup{}"] - [⋂ "\\bigcap{}"] - [⋀ "\\bigwedge{}"] - [⋁ "\\bigvee{}"] - [± "\\pm{}"] - )) + (append more-sym→* sym→*)) str)) \ No newline at end of file diff --git a/mathjax-convert-unicode.rkt b/mathjax-convert-unicode.rkt new file mode 100644 index 000000000..2b35495db --- /dev/null +++ b/mathjax-convert-unicode.rkt @@ -0,0 +1,21 @@ +#lang at-exp racket/base +(require racket/string + scriblib/render-cond + "katex-convert-unicode.rkt") + +(provide mathjax-convert-unicode) + +(define (mathjax-convert-unicode str* mathmode?) + (define more-sym→* + `([⩴ ,(string-append + "\\ifmathjax{\\mathrel{{\\raise0.9mu{::}\\hspace{-4mu}=}}}" + "\\iflatex{\\Coloneqq}")] + [∈ "\\in{}"] + [κ "\\kappa"] + [⁺ "{}^+"] + [⁻ "{}^-"] + ;; TODO: + [❲ "\\ifmathjax{\\unicode{x2272}}\\iflatex{❲}"] + [❳ "\\ifmathjax{\\unicode{x2273}}\\iflatex{❳}"] + )) + (katex-convert-unicode str* mathmode? more-sym→*)) \ No newline at end of file