Whitespace adjustments
[lhc/web/wiklou.git] / math / texutil.ml
index e9114f3..7800c65 100644 (file)
@@ -14,12 +14,16 @@ let rec render_tex = function
     TEX_FQ (a,b,c) -> (render_tex a) ^ "_{" ^ (render_tex  b) ^ "}^{" ^ (render_tex  c) ^ "}"
   | TEX_DQ (a,b) -> (render_tex a) ^ "_{" ^ (render_tex  b) ^ "}"
   | TEX_UQ (a,b) -> (render_tex a) ^ "^{" ^ (render_tex  b) ^ "}"
+  | TEX_FQN (a,b) -> "_{" ^ (render_tex  a) ^ "}^{" ^ (render_tex  b) ^ "}"
+  | TEX_DQN (a) -> "_{" ^ (render_tex  a) ^ "}"
+  | TEX_UQN (a) -> "^{" ^ (render_tex  a) ^ "}"
   | TEX_LITERAL s -> tex_part s
   | TEX_FUN1 (f,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
   | TEX_FUN1hl (f,_,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
   | TEX_FUN1hf (f,_,a) -> "{" ^ f ^ " " ^ (render_tex a) ^ "}"
   | TEX_DECLh (f,_,a) -> "{" ^ f ^ "{" ^ (mapjoin render_tex a) ^ "}}"
   | TEX_FUN2 (f,a,b) -> "{" ^ f ^ " " ^ (render_tex a) ^ (render_tex b) ^ "}"
+  | TEX_FUN2nb (f,a,b) -> f ^ (render_tex a) ^ (render_tex b)
   | TEX_FUN2h (f,_,a,b) -> "{" ^ f ^ " " ^ (render_tex a) ^ (render_tex b) ^ "}"
   | TEX_FUN2sq (f,a,b) -> "{" ^ f ^ "[ " ^ (render_tex a) ^ "]" ^ (render_tex b) ^ "}"
   | TEX_CURLY (tl) -> "{" ^ (mapjoin render_tex tl) ^ "}"
@@ -30,16 +34,19 @@ let rec render_tex = function
   | TEX_MATRIX (t,rows) -> "{\\begin{"^t^"}"^(mapjoine "\\\\" (mapjoine "&" (mapjoin render_tex)) rows)^"\\end{"^t^"}}"
   | TEX_LR (l,r,tl) -> "\\left "^(tex_part l)^(mapjoin render_tex tl)^"\\right "^(tex_part r)
 
+
 (* Dynamic loading*)
 type encoding_t = LATIN1 | LATIN2 | UTF8
 
 let modules_ams = ref false
 let modules_nonascii = ref false
 let modules_encoding = ref UTF8
+let modules_color = ref false
 
 let tex_use_ams ()     = modules_ams := true
 let tex_use_nonascii () = modules_nonascii := true
-let tex_mod_reset ()   = (modules_ams := false; modules_nonascii := false; modules_encoding := UTF8)
+let tex_use_color ()  = modules_color := true
+let tex_mod_reset ()   = (modules_ams := false; modules_nonascii := false; modules_encoding := UTF8; modules_color := false)
 
 let get_encoding = function
     UTF8 -> "\\usepackage{ucs}\n\\usepackage[utf8]{inputenc}\n"
@@ -47,9 +54,10 @@ let get_encoding = function
   | LATIN2 -> "\\usepackage[latin2]{inputenc}\n"
 
 let get_preface ()  = "\\nonstopmode\n\\documentclass[12pt]{article}\n" ^
-                     (if !modules_nonascii then get_encoding !modules_encoding else "") ^
-                     (if !modules_ams then "\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n" else "") ^
-                     "\\pagestyle{empty}\n\\begin{document}\n$$\n"
+              (if !modules_nonascii then get_encoding !modules_encoding else "") ^
+              (if !modules_ams then "\\usepackage{amsmath}\n\\usepackage{amsfonts}\n\\usepackage{amssymb}\n" else "") ^
+              (if !modules_color then "\\usepackage[dvips,usenames]{color}\n" else "") ^
+              "\\usepackage{cancel}\n\\pagestyle{empty}\n\\begin{document}\n$$\n"
 let get_footer  ()  = "\n$$\n\\end{document}\n"
 
 let set_encoding = function
@@ -63,58 +71,75 @@ exception Illegal_tex_function of string
 
 let find = function
       "\\alpha"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\alpha ", "α"))
-    | "\\Alpha"            -> LITERAL (HTMLABLEC (FONT_RTI, "A", "Α"))
+    | "\\Alpha"            -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{A}", "Α")))
     | "\\beta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\beta ",  "β"))
-    | "\\Beta"             -> LITERAL (HTMLABLEC (FONT_RTI, "B",  "Β"))
+    | "\\Beta"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{B}",  "Β")))
     | "\\gamma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\gamma ", "γ"))
-    | "\\Gamma"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Gamma ", "Γ"))
+    | "\\Gamma"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Gamma ", "Γ"))
     | "\\delta"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\delta ", "δ"))
-    | "\\Delta"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Delta ", "Δ"))
-    | "\\epsilon"          -> LITERAL (HTMLABLEC (FONT_UF,  "\\epsilon ", "ε"))
-    | "\\Epsilon"          -> LITERAL (HTMLABLEC (FONT_RTI, "E", "Ε"))
+    | "\\Delta"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Delta ", "Δ"))
+    | "\\epsilon"          -> LITERAL (TEX_ONLY "\\epsilon ")
+    | "\\Epsilon"          -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{E}", "Ε")))
     | "\\varepsilon"       -> LITERAL (TEX_ONLY "\\varepsilon ")
     | "\\zeta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\zeta ", "ζ"))
-    | "\\Zeta"             -> LITERAL (HTMLABLEC (FONT_RTI, "Z", "Ζ"))
+    | "\\Zeta"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{Z}", "Ζ")))
     | "\\eta"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\eta ", "η"))
-    | "\\Eta"              -> LITERAL (HTMLABLEC (FONT_RTI, "H", "Η"))
+    | "\\Eta"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{H}", "Η")))
     | "\\theta"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\theta ", "θ"))
-    | "\\Theta"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Theta ", "Θ"))
+    | "\\Theta"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Theta ", "Θ"))
     | "\\vartheta"         -> LITERAL (HTMLABLE  (FONT_UF,  "\\vartheta ", "ϑ"))
     | "\\thetasym"         -> LITERAL (HTMLABLE  (FONT_UF,  "\\vartheta ", "ϑ"))
     | "\\iota"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\iota ", "ι"))
-    | "\\Iota"             -> LITERAL (HTMLABLEC (FONT_RTI, "I", "Ι"))
+    | "\\Iota"             -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{I}", "Ι")))
     | "\\kappa"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\kappa ", "κ"))
-    | "\\Kappa"            -> LITERAL (HTMLABLEC (FONT_RTI, "K", "Κ"))
+    | "\\Kappa"            -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{K}", "Κ")))
     | "\\lambda"           -> LITERAL (HTMLABLEC (FONT_UF,  "\\lambda ", "λ"))
-    | "\\Lambda"           -> LITERAL (HTMLABLEC (FONT_RTI, "\\Lambda ", "Λ"))
+    | "\\Lambda"           -> LITERAL (HTMLABLEC (FONT_UF, "\\Lambda ", "Λ"))
     | "\\mu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\mu ", "μ"))
-    | "\\Mu"               -> LITERAL (HTMLABLEC (FONT_RTI, "M", "Μ"))
+    | "\\Mu"               -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{M}", "Μ")))
     | "\\nu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\nu ", "ν"))
-    | "\\Nu"               -> LITERAL (HTMLABLEC (FONT_RTI, "N", "Ν"))
+    | "\\Nu"               -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{N}", "Ν")))
+    | "\\omicron"          -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{o}", "ο")))
+    | "\\Omicron"          -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{O}", "Ο")))
     | "\\pi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\pi ", "π"))
-    | "\\Pi"               -> LITERAL (HTMLABLEC (FONT_RTI, "\\Pi ", "Π"))
+    | "\\Pi"               -> LITERAL (HTMLABLEC (FONT_UF, "\\Pi ", "Π"))
     | "\\varpi"            -> LITERAL (TEX_ONLY "\\varpi ")
     | "\\rho"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\rho ", "ρ"))
-    | "\\Rho"              -> LITERAL (HTMLABLEC (FONT_RTI, "P", "Ρ"))
+    | "\\Rho"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{P}", "Ρ")))
     | "\\varrho"           -> LITERAL (TEX_ONLY "\\varrho ")
+    | "\\sim"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\sim ", "∼"))
     | "\\sigma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\sigma ", "σ"))
-    | "\\Sigma"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Sigma ", "Σ"))
+    | "\\Sigma"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Sigma ", "Σ"))
     | "\\varsigma"         -> LITERAL (TEX_ONLY "\\varsigma ")
     | "\\tau"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\tau ", "τ"))
-    | "\\Tau"              -> LITERAL (HTMLABLEC (FONT_RTI, "T", "Τ"))
+    | "\\Tau"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{T}", "Τ")))
     | "\\upsilon"          -> LITERAL (HTMLABLEC (FONT_UF,  "\\upsilon ", "υ"))
-    | "\\Upsilon"          -> LITERAL (HTMLABLEC (FONT_RTI, "\\Upsilon ", "Υ"))
-    | "\\phi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\phi ", "φ"))
-    | "\\Phi"              -> LITERAL (HTMLABLEC (FONT_RTI, "\\Phi ", "Φ"))
+    | "\\Upsilon"          -> LITERAL (HTMLABLEC (FONT_UF, "\\Upsilon ", "Υ"))
+    | "\\phi"              -> LITERAL (TEX_ONLY "\\phi ")
+    | "\\Phi"              -> LITERAL (HTMLABLEC (FONT_UF, "\\Phi ", "Φ"))
     | "\\varphi"           -> LITERAL (TEX_ONLY "\\varphi ")
     | "\\chi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\chi ", "χ"))
-    | "\\Chi"              -> LITERAL (HTMLABLEC (FONT_RTI, "X", "Χ"))
+    | "\\Chi"              -> (tex_use_ams (); LITERAL (HTMLABLEC (FONT_UF,
+    "\\mathrm{X}", "Χ")))
     | "\\psi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\psi ", "ψ"))
-    | "\\Psi"              -> LITERAL (HTMLABLEC (FONT_RTI, "\\Psi ", "Ψ"))
+    | "\\Psi"              -> LITERAL (HTMLABLEC (FONT_UF, "\\Psi ", "Ψ"))
     | "\\omega"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\omega ", "ω"))
-    | "\\Omega"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Omega ", "Ω"))
+    | "\\Omega"            -> LITERAL (HTMLABLEC (FONT_UF, "\\Omega ", "Ω"))
     | "\\xi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\xi ", "ξ"))
-    | "\\Xi"               -> LITERAL (HTMLABLEC (FONT_RTI, "\\Xi ", "Ξ"))
+    | "\\Xi"               -> LITERAL (HTMLABLEC (FONT_UF, "\\Xi ", "Ξ"))
     | "\\aleph"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))
     | "\\alef"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))
     | "\\alefsym"          -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))
@@ -148,6 +173,15 @@ let find = function
     | "\\Downarrow"        -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "⇓"))
     | "\\updownarrow"      -> DELIMITER (TEX_ONLY "\\updownarrow ")
     | "\\Updownarrow"      -> DELIMITER (TEX_ONLY "\\Updownarrow ")
+    | "\\ulcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\ulcorner "))
+    | "\\urcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\urcorner "))
+    | "\\llcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\llcorner "))
+    | "\\lrcorner"         -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\lrcorner "))
+    | "\\twoheadleftarrow" -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\twoheadleftarrow "))
+    | "\\twoheadrightarrow" -> (tex_use_ams (); DELIMITER (TEX_ONLY "\\twoheadrightarrow "))
+    | "\\xleftarrow"       -> (tex_use_ams (); FUN_AR1 "\\xleftarrow ")
+    | "\\xrightarrow"       -> (tex_use_ams (); FUN_AR1 "\\xrightarrow ")
+    | "\\rightleftharpoons" -> DELIMITER (TEX_ONLY "\\rightleftharpoons ")
     | "\\leftrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))
     | "\\lrarr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))
     | "\\harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))
@@ -156,14 +190,18 @@ let find = function
     | "\\Harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))
     | "\\lrArr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))
     | "\\hAar"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))
+    | "\\longleftrightarrow"->LITERAL (HTMLABLE  (FONT_UF,  "\\longleftrightarrow ", "↔"))
     | "\\Longleftrightarrow"->LITERAL (HTMLABLE  (FONT_UF,  "\\Longleftrightarrow ", "↔"))
     | "\\iff"              -> LITERAL (HTMLABLE  (FONT_UF,  "\\iff ", "↔"))
+    | "\\ll"              -> LITERAL (TEX_ONLY "\\ll ")
+    | "\\gg"              -> LITERAL (TEX_ONLY "\\gg ")
+    | "\\div"             -> LITERAL (TEX_ONLY "\\div ")
     | "\\searrow"          -> LITERAL (TEX_ONLY "\\searrow ")
     | "\\nearrow"          -> LITERAL (TEX_ONLY "\\nearrow ")
     | "\\swarrow"          -> LITERAL (TEX_ONLY "\\swarrow ")
     | "\\nwarrow"          -> LITERAL (TEX_ONLY "\\nwarrow ")
-    | "\\sim"              -> LITERAL (TEX_ONLY "\\sim ")
     | "\\simeq"            -> LITERAL (TEX_ONLY "\\simeq ")
+    | "\\ast"              -> LITERAL (TEX_ONLY "\\ast ")
     | "\\star"             -> LITERAL (TEX_ONLY "\\star ")
     | "\\ell"              -> LITERAL (TEX_ONLY "\\ell ")
     | "\\P"                -> LITERAL (TEX_ONLY "\\P ")
@@ -178,50 +216,54 @@ let find = function
     | "\\bigoplus"         -> LITERAL (TEX_ONLY "\\bigoplus ")
     | "\\bigvee"           -> LITERAL (TEX_ONLY "\\bigvee ")
     | "\\biguplus"         -> LITERAL (TEX_ONLY "\\biguplus ")
-    | "\\oint"            -> LITERAL (TEX_ONLY "\\oint ")
+    | "\\oint"             -> LITERAL (TEX_ONLY "\\oint ")
     | "\\bigwedge"         -> LITERAL (TEX_ONLY "\\bigwedge ")
     | "\\models"           -> LITERAL (TEX_ONLY "\\models ")
     | "\\vdash"            -> LITERAL (TEX_ONLY "\\vdash ")
     | "\\triangle"         -> LITERAL (TEX_ONLY "\\triangle ")
-    | "\\wr"              -> LITERAL (TEX_ONLY "\\wr ")
+    | "\\bowtie"           -> LITERAL (TEX_ONLY "\\bowtie ")
+    | "\\wr"               -> LITERAL (TEX_ONLY "\\wr ")
     | "\\triangleleft"     -> LITERAL (TEX_ONLY "\\triangleleft ")
     | "\\triangleright"    -> LITERAL (TEX_ONLY "\\triangleright ")
     | "\\textvisiblespace" -> LITERAL (TEX_ONLY "\\textvisiblespace ")
-    | "\\ker"             -> LITERAL (TEX_ONLY "\\ker ")
-    | "\\lim"             -> LITERAL (TEX_ONLY "\\lim ")
+    | "\\ker"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\ker ","ker"))
+    | "\\lim"              -> LITERAL (TEX_ONLY "\\lim ")
     | "\\limsup"           -> LITERAL (TEX_ONLY "\\limsup ")
     | "\\liminf"           -> LITERAL (TEX_ONLY "\\liminf ")
-    | "\\sup"             -> LITERAL (TEX_ONLY "\\sup ")
-    | "\\Pr"              -> LITERAL (TEX_ONLY "\\Pr ")
-    | "\\hom"             -> LITERAL (TEX_ONLY "\\hom ")
-    | "\\arg"             -> LITERAL (TEX_ONLY "\\arg ")
-    | "\\dim"             -> LITERAL (TEX_ONLY "\\dim ")
-    | "\\inf"             -> LITERAL (TEX_ONLY "\\inf ")
-    | "\\circ"            -> LITERAL (TEX_ONLY "\\circ ")
-    | "\\hbar"            -> LITERAL (TEX_ONLY "\\hbar ")
-    | "\\imath"                   -> LITERAL (TEX_ONLY "\\imath ")
-    | "\\lnot"            -> LITERAL (TEX_ONLY "\\lnot ")
+    | "\\sup"              -> LITERAL (TEX_ONLY "\\sup ")
+    | "\\Pr"               -> LITERAL (TEX_ONLY "\\Pr ")
+    | "\\hom"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\hom ","hom"))
+    | "\\arg"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\arg ","arg"))
+    | "\\dim"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\dim ","dim"))
+    | "\\inf"              -> LITERAL (TEX_ONLY "\\inf ")
+    | "\\circ"             -> LITERAL (TEX_ONLY "\\circ ")
+    | "\\hbar"             -> LITERAL (TEX_ONLY "\\hbar ")
+    | "\\imath"            -> LITERAL (TEX_ONLY "\\imath ")
+    | "\\jmath"            -> LITERAL (TEX_ONLY "\\jmath ")
+    | "\\lnot"             -> LITERAL (TEX_ONLY "\\lnot ")
     | "\\hookrightarrow"   -> LITERAL (TEX_ONLY "\\hookrightarrow ")
     | "\\hookleftarrow"    -> LITERAL (TEX_ONLY "\\hookleftarrow ")
     | "\\mp"               -> LITERAL (TEX_ONLY "\\mp ")
-    | "\\approx"           -> LITERAL (TEX_ONLY "\\approx ")
+    | "\\approx"           -> LITERAL (HTMLABLE  (FONT_UF,  "\\approx ", "≈"))
     | "\\propto"           -> LITERAL (TEX_ONLY "\\propto ")
     | "\\flat"             -> LITERAL (TEX_ONLY "\\flat ")
     | "\\sharp"            -> LITERAL (TEX_ONLY "\\sharp ")
     | "\\natural"          -> LITERAL (TEX_ONLY "\\natural ")
-    | "\\int"             -> LITERAL (HTMLABLE_BIG ("\\int ", "∫"))
-    | "\\sum"             -> LITERAL (HTMLABLE_BIG ("\\sum ", "∑"))
-    | "\\prod"            -> LITERAL (HTMLABLE_BIG ("\\prod ", "∏"))
+    | "\\int"              -> LITERAL (HTMLABLE_BIG ("\\int ", "∫"))
+    | "\\sum"              -> LITERAL (HTMLABLE_BIG ("\\sum ", "∑"))
+    | "\\prod"             -> LITERAL (HTMLABLE_BIG ("\\prod ", "∏"))
     | "\\vdots"            -> LITERAL (TEX_ONLY "\\vdots ")
+    | "\\limits"           -> LITERAL (TEX_ONLY "\\limits ")
+    | "\\nolimits"         -> LITERAL (TEX_ONLY "\\nolimits ")
     | "\\top"              -> LITERAL (TEX_ONLY "\\top ")
-    | "\\sin"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\sin ","sin"))
-    | "\\cos"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\cos ","cos"))
-    | "\\sinh"            -> LITERAL (HTMLABLEC(FONT_UFH,"\\sinh ","sinh"))
-    | "\\cosh"            -> LITERAL (HTMLABLEC(FONT_UFH,"\\cosh ","cosh"))
-    | "\\tan"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\tan ","tan"))
-    | "\\tanh"            -> LITERAL (HTMLABLEC(FONT_UFH,"\\tanh ","tanh"))
-    | "\\sec"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\sec ","sec"))
-    | "\\csc"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\csc ","csc"))
+    | "\\sin"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\sin ","sin"))
+    | "\\cos"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\cos ","cos"))
+    | "\\sinh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\sinh ","sinh"))
+    | "\\cosh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\cosh ","cosh"))
+    | "\\tan"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\tan ","tan"))
+    | "\\tanh"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\tanh ","tanh"))
+    | "\\sec"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\sec ","sec"))
+    | "\\csc"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\csc ","csc"))
     | "\\arcsin"           -> LITERAL (HTMLABLEC(FONT_UFH,"\\arcsin ","arcsin"))
     | "\\arctan"           -> LITERAL (HTMLABLEC(FONT_UFH,"\\arctan ","arctan"))
     | "\\arccos"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccos}}","arccos")))
@@ -229,17 +271,17 @@ let find = function
     | "\\arcsec"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arcsec}}","arcsec")))
     | "\\arccsc"           -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{arccsc}}","arccsc")))
     | "\\sgn"              -> (tex_use_ams (); LITERAL (HTMLABLEC(FONT_UFH,"\\mathop{\\mathrm{sgn}}","sgn")))
-    | "\\cot"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\cot ","cot"))
-    | "\\coth"            -> LITERAL (HTMLABLEC(FONT_UFH,"\\coth ","coth"))
-    | "\\log"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\log ", "log"))
-    | "\\lg"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\lg ", "lg"))
-    | "\\ln"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\ln ", "ln"))
-    | "\\exp"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\exp ", "exp"))
-    | "\\min"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\min ", "min"))
-    | "\\max"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\max ", "max"))
-    | "\\gcd"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\gcd ", "gcd"))
-    | "\\deg"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\deg ", "deg"))
-    | "\\det"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\det ", "det"))
+    | "\\cot"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\cot ","cot"))
+    | "\\coth"             -> LITERAL (HTMLABLEC(FONT_UFH,"\\coth ","coth"))
+    | "\\log"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\log ", "log"))
+    | "\\lg"               -> LITERAL (HTMLABLEC(FONT_UFH,"\\lg ", "lg"))
+    | "\\ln"               -> LITERAL (HTMLABLEC(FONT_UFH,"\\ln ", "ln"))
+    | "\\exp"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\exp ", "exp"))
+    | "\\min"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\min ", "min"))
+    | "\\max"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\max ", "max"))
+    | "\\gcd"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\gcd ", "gcd"))
+    | "\\deg"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\deg ", "deg"))
+    | "\\det"              -> LITERAL (HTMLABLEC(FONT_UFH,"\\det ", "det"))
     | "\\bullet"           -> LITERAL (HTMLABLE (FONT_UFH, "\\bullet ", "•"))
     | "\\bull"             -> LITERAL (HTMLABLE (FONT_UFH, "\\bullet ", "•"))
     | "\\angle"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\angle ", "∠")))
@@ -301,12 +343,16 @@ let find = function
     | "\\pm"               -> LITERAL (HTMLABLEM(FONT_UFH,"\\pm ", "±"))
     | "\\plusmn"           -> LITERAL (HTMLABLEM(FONT_UFH,"\\pm ", "±"))
     | "\\cdot"             -> LITERAL (HTMLABLE (FONT_UFH,"\\cdot ", "⋅"))
+    | "\\AA"               -> LITERAL (HTMLABLE (FONT_UFH,"\\AA ", "Å"))
     | "\\cdots"            -> LITERAL (HTMLABLE (FONT_UFH,"\\cdots ", "⋅⋅⋅"))
     | "\\sdot"             -> LITERAL (HTMLABLE (FONT_UFH,"\\cdot ", "⋅"))
     | "\\oplus"            -> LITERAL (HTMLABLE (FONT_UF, "\\oplus ", "⊕"))
     | "\\otimes"           -> LITERAL (HTMLABLE (FONT_UF, "\\otimes ", "⊗"))
     | "\\cap"              -> LITERAL (HTMLABLEM(FONT_UF, "\\cap ", "∩"))
     | "\\cup"              -> LITERAL (HTMLABLE (FONT_UF, "\\cup ", "∪"))
+    | "\\uplus"            -> LITERAL (TEX_ONLY "\\uplus ")
+    | "\\sqcap"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqcap "))
+    | "\\sqcup"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sqcup "))
     | "\\empty"            -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "∅"))
     | "\\emptyset"         -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "∅"))
     | "\\O"                -> LITERAL (HTMLABLE (FONT_UF, "\\emptyset ", "∅"))
@@ -323,16 +369,17 @@ let find = function
     | "\\partial"          -> LITERAL (HTMLABLEM(FONT_UF, "\\partial ", "∂"))
     | "\\ldots"            -> LITERAL (HTMLABLEM(FONT_UFH,"\\ldots ", "..."))
     | "\\dots"             -> LITERAL (HTMLABLEM(FONT_UFH,"\\dots ", "..."))
-    | "\\quad"                    -> LITERAL (HTMLABLE (FONT_UF, "\\quad ","  "))
-    | "\\qquad"                   -> LITERAL (HTMLABLE (FONT_UF, "\\qquad ","    "))
+    | "\\quad"             -> LITERAL (HTMLABLE (FONT_UF, "\\quad ","  "))
+    | "\\qquad"            -> LITERAL (HTMLABLE (FONT_UF, "\\qquad ","    "))
     | "\\mid"              -> LITERAL (HTMLABLEM(FONT_UFH,"\\mid ", " | "))
     | "\\neg"              -> LITERAL (HTMLABLEM(FONT_UFH,"\\neg ", "¬"))
     | "\\langle"           -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","⟨"))
     | "\\rangle"           -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","⟩"))
     | "\\lang"             -> DELIMITER (HTMLABLE (FONT_UFH,"\\langle ","⟨"))
     | "\\rang"             -> DELIMITER (HTMLABLE (FONT_UFH,"\\rangle ","⟩"))
-    | "\\lbrack"          -> DELIMITER (HTMLABLEC(FONT_UFH,"[","["))
-    | "\\rbrack"          -> DELIMITER (HTMLABLEC(FONT_UFH,"]","]"))
+    | "\\lbrack"           -> DELIMITER (HTMLABLEC(FONT_UFH,"[","["))
+    | "\\rbrack"           -> DELIMITER (HTMLABLEC(FONT_UFH,"]","]"))
+    | "\\surd"             -> LITERAL (TEX_ONLY "\\surd ")
     | "\\ddots"            -> LITERAL (TEX_ONLY "\\ddots ")
     | "\\clubs"            -> LITERAL (TEX_ONLY "\\clubsuit ")
     | "\\clubsuit"         -> LITERAL (TEX_ONLY "\\clubsuit ")
@@ -341,19 +388,41 @@ let find = function
     | "\\hearts"           -> LITERAL (TEX_ONLY "\\heartsuit ")
     | "\\heartsuit"        -> LITERAL (TEX_ONLY "\\heartsuit ")
     | "\\diamonds"         -> LITERAL (TEX_ONLY "\\diamondsuit ")
+    | "\\diamond"          -> LITERAL (TEX_ONLY "\\diamond ")
+    | "\\bigtriangleup"    -> LITERAL (TEX_ONLY "\\bigtriangleup ")
+    | "\\bigtriangledown"  -> LITERAL (TEX_ONLY "\\bigtriangledown ")
     | "\\diamondsuit"      -> LITERAL (TEX_ONLY "\\diamondsuit ")
+    | "\\ominus"           -> LITERAL (TEX_ONLY "\\ominus ")
+    | "\\oslash"           -> LITERAL (TEX_ONLY "\\oslash ")
+    | "\\odot"             -> LITERAL (TEX_ONLY "\\odot ")
+    | "\\bigcirc"          -> LITERAL (TEX_ONLY "\\bigcirc ")
+    | "\\amalg"            -> LITERAL (TEX_ONLY "\\amalg ")
+    | "\\prec"             -> LITERAL (TEX_ONLY "\\prec ")
+    | "\\succ"             -> LITERAL (TEX_ONLY "\\succ ")
+    | "\\preceq"           -> LITERAL (TEX_ONLY "\\preceq ")
+    | "\\succeq"           -> LITERAL (TEX_ONLY "\\succeq ")
+    | "\\dashv"            -> LITERAL (TEX_ONLY "\\dashv ")
+    | "\\asymp"            -> LITERAL (TEX_ONLY "\\asymp ")
+    | "\\doteq"            -> LITERAL (TEX_ONLY "\\doteq ")
+    | "\\parallel"         -> LITERAL (TEX_ONLY "\\parallel ")
     | "\\implies"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\implies ", "⇒")))
-    | "\\mod"             -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mod ", "mod")))
+    | "\\mod"              -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mod ", "mod")))
     | "\\Diamond"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\Diamond ", "◊")))
     | "\\dotsb"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsb ", "⋅⋅⋅")))
+    | "\\dotsc"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsc ", "...")))
+    | "\\dotsi"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsi ", "⋅⋅⋅")))
+    | "\\dotsm"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotsm ", "⋅⋅⋅")))
+    | "\\dotso"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UF, "\\dotso ", "...")))
     | "\\reals"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
     | "\\Reals"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
     | "\\R"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{R}", "<b>R</b>")))
+    | "\\C"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{C}", "<b>C</b>")))
     | "\\cnums"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{C}", "<b>C</b>")))
     | "\\Complex"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{C}", "<b>C</b>")))
     | "\\Z"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{Z}", "<b>Z</b>")))
     | "\\natnums"          -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "<b>N</b>")))
-    | "\\N"               -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "<b>N</b>")))
+    | "\\N"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{N}", "<b>N</b>")))
+    | "\\Q"                -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\mathbb{Q}", "<b>Q</b>")))
     | "\\lVert"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\lVert ", "||")))
     | "\\rVert"            -> (tex_use_ams (); LITERAL (HTMLABLE (FONT_UFH,"\\rVert ", "||")))
     | "\\nmid"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nmid "))
@@ -366,11 +435,13 @@ let find = function
     | "\\trianglelefteq"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\trianglelefteq "))
     | "\\trianglerighteq"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\trianglerighteq "))
     | "\\square"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\square "))
+    | "\\checkmark"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\checkmark "))
     | "\\supsetneq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supsetneq "))
     | "\\subsetneq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subsetneq "))
     | "\\Box"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Box "))
     | "\\nleq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleq "))
     | "\\upharpoonright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonright "))
+    | "\\restriction"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonright "))
     | "\\upharpoonleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upharpoonleft "))
     | "\\downharpoonright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downharpoonright "))
     | "\\downharpoonleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downharpoonleft "))
@@ -404,50 +475,257 @@ let find = function
     | "\\varnothing"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varnothing "))
     | "\\left"             -> LEFT
     | "\\right"            -> RIGHT
-    | "\\hat"             -> FUN_AR1 "\\hat "
-    | "\\widehat"          -> FUN_AR1 "\\widehat "
-    | "\\overline"         -> FUN_AR1 "\\overline "
-    | "\\overbrace"        -> FUN_AR1 "\\overbrace "
-    | "\\underline"        -> FUN_AR1 "\\underline "
-    | "\\underbrace"       -> FUN_AR1 "\\underbrace "
-    | "\\overleftarrow"    -> FUN_AR1 "\\overleftarrow "
-    | "\\overrightarrow"   -> FUN_AR1 "\\overrightarrow "
-    | "\\overleftrightarrow"->FUN_AR1 "\\overleftrightarrow "
-    | "\\check"                   -> FUN_AR1 "\\check "
-    | "\\acute"                   -> FUN_AR1 "\\acute "
-    | "\\grave"                   -> FUN_AR1 "\\grave "
-    | "\\bar"             -> FUN_AR1 "\\bar "
-    | "\\vec"             -> FUN_AR1 "\\vec "
-    | "\\dot"             -> FUN_AR1 "\\dot "
-    | "\\ddot"            -> FUN_AR1 "\\ddot "
-    | "\\breve"                   -> FUN_AR1 "\\breve "
-    | "\\tilde"                   -> FUN_AR1 "\\tilde "
-    | "\\not"             -> FUN_AR1 "\\not "
+    | "\\hat"              -> FUN_AR1 "\\hat "
+    | "\\hline"            -> LITERAL (TEX_ONLY "\\hline ")
+    | "\\vline"            -> LITERAL (TEX_ONLY "\\vline ")
+    | "\\widehat"          -> LITERAL (TEX_ONLY "\\widehat ")
+    | "\\overline"         -> LITERAL (TEX_ONLY "\\overline ")
+    | "\\overbrace"        -> LITERAL (TEX_ONLY "\\overbrace ")
+    | "\\underline"        -> LITERAL (TEX_ONLY "\\underline ")
+    | "\\underbrace"       -> LITERAL (TEX_ONLY "\\underbrace ")
+    | "\\overleftarrow"    -> LITERAL (TEX_ONLY "\\overleftarrow ")
+    | "\\overrightarrow"   -> LITERAL (TEX_ONLY "\\overrightarrow ")
+    | "\\overleftrightarrow"-> (tex_use_ams(); LITERAL (TEX_ONLY "\\overleftrightarrow "))
+    | "\\check"            -> FUN_AR1 "\\check "
+    | "\\acute"            -> FUN_AR1 "\\acute "
+    | "\\grave"            -> FUN_AR1 "\\grave "
+    | "\\bar"              -> FUN_AR1 "\\bar "
+    | "\\vec"              -> FUN_AR1 "\\vec "
+    | "\\dot"              -> FUN_AR1 "\\dot "
+    | "\\ddot"             -> FUN_AR1 "\\ddot "
+    | "\\breve"            -> FUN_AR1 "\\breve "
+    | "\\tilde"            -> FUN_AR1 "\\tilde "
+    | "\\not"              -> LITERAL (TEX_ONLY "\\not ")
     | "\\choose"           -> FUN_INFIX "\\choose "
     | "\\atop"             -> FUN_INFIX "\\atop "
-    | "\\binom"            -> FUN_AR2 "\\binom "
+    | "\\binom"            -> (tex_use_ams (); FUN_AR2 "\\binom ")
+    | "\\dbinom"            -> (tex_use_ams (); FUN_AR2 "\\dbinom ")
+    | "\\tbinom"            -> (tex_use_ams (); FUN_AR2 "\\tbinom ")
+    | "\\stackrel"         -> FUN_AR2 "\\stackrel "
+    | "\\sideset"         -> (tex_use_ams (); FUN_AR2nb "\\sideset ")
+    | "\\underset"         -> (tex_use_ams (); FUN_AR2 "\\underset ")
+    | "\\overset"         -> (tex_use_ams (); FUN_AR2 "\\overset ")
     | "\\frac"             -> FUN_AR2h ("\\frac ", fun num den -> Html.html_render [num], "<hr style=\"{background: black}\"/>", Html.html_render [den])
+    | "\\dfrac"             -> (tex_use_ams () ; FUN_AR2 "\\dfrac ")
+    | "\\tfrac"             -> (tex_use_ams () ; FUN_AR2h ("\\tfrac ", fun num den -> Html.html_render [num], "<hr style=\"background: black\">", Html.html_render [den]))
     | "\\cfrac"            -> (tex_use_ams (); FUN_AR2h ("\\cfrac ", fun num den -> Html.html_render [num], "<hr style=\"{background: black}\">", Html.html_render [den]))
     | "\\over"             -> FUN_INFIXh ("\\over ", fun num den -> Html.html_render num, "<hr style=\"{background: black}\"/>", Html.html_render den)
     | "\\sqrt"             -> FUN_AR1 "\\sqrt "
+    | "\\cancel"           -> FUN_AR1 "\\cancel "
+    | "\\bcancel"           -> FUN_AR1 "\\bcancel "
+    | "\\xcancel"           -> FUN_AR1 "\\xcancel "
+    | "\\cancelto"         -> FUN_AR2 "\\cancelto "
     | "\\pmod"             -> FUN_AR1hl ("\\pmod ", ("(mod ", ")"))
     | "\\bmod"             -> FUN_AR1hl ("\\bmod ", ("mod ", ""))
     | "\\emph"             -> FUN_AR1 "\\emph "
     | "\\texttt"           -> FUN_AR1 "\\texttt "
     | "\\textbf"           -> FUN_AR1 "\\textbf "
+    | "\\textsf"           -> FUN_AR1 "\\textsf "
     | "\\textit"           -> FUN_AR1hf ("\\textit ", FONTFORCE_IT)
     | "\\textrm"           -> FUN_AR1hf ("\\textrm ", FONTFORCE_RM)
     | "\\rm"               -> DECLh ("\\rm ", FONTFORCE_RM)
     | "\\it"               -> DECLh ("\\it ", FONTFORCE_IT)
     | "\\cal"              -> DECL "\\cal "
+    | "\\displaystyle"     -> LITERAL (TEX_ONLY  "\\displaystyle ")
+    | "\\scriptstyle"      -> LITERAL (TEX_ONLY "\\scriptstyle ")
+    | "\\textstyle"        -> LITERAL (TEX_ONLY "\\textstyle ")
+    | "\\scriptscriptstyle"-> LITERAL (TEX_ONLY "\\scriptscriptstyle ")
     | "\\bf"               -> DECL "\\bf "
-    | "\\big"             -> BIG "\\big "
-    | "\\Big"             -> BIG "\\Big "
-    | "\\bigg"            -> BIG "\\bigg "
-    | "\\Bigg"            -> BIG "\\Bigg "
+    | "\\big"              -> BIG "\\big "
+    | "\\Big"              -> BIG "\\Big "
+    | "\\bigg"             -> BIG "\\bigg "
+    | "\\Bigg"             -> BIG "\\Bigg "
+    | "\\bigl"             -> (tex_use_ams ();BIG "\\bigl ")
+    | "\\bigr"             -> (tex_use_ams ();BIG "\\bigr ")
+    | "\\Bigl"             -> (tex_use_ams ();BIG "\\Bigl ")
+    | "\\Bigr"             -> (tex_use_ams ();BIG "\\Bigr ")
+    | "\\biggl"             -> (tex_use_ams ();BIG "\\biggl ")
+    | "\\biggr"             -> (tex_use_ams ();BIG "\\biggr ")
+    | "\\Biggl"             -> (tex_use_ams ();BIG "\\Biggl ")
+    | "\\Biggr"             -> (tex_use_ams ();BIG "\\Biggr ")
+    | "\\vartriangle"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangle "))
+    | "\\triangledown"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\triangledown "))
+    | "\\lozenge"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lozenge "))
+    | "\\circledS"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledS "))
+    | "\\measuredangle"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\measuredangle "))
+    | "\\nexists"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nexists "))
+    | "\\Bbbk"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Bbbk "))
+    | "\\backprime"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backprime "))
+    | "\\blacktriangle"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangle "))
+    | "\\blacktriangledown"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangledown "))
+    | "\\blacksquare"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacksquare "))
+    | "\\blacklozenge"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacklozenge "))
+    | "\\bigstar"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\bigstar "))
+    | "\\sphericalangle"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\sphericalangle "))
+    | "\\diagup"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\diagup "))
+    | "\\diagdown"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\diagdown "))
+    | "\\dotplus"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\dotplus "))
+    | "\\Cap"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cap "))
+    | "\\doublecap"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cap "))
+    | "\\Cup"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cup "))
+    | "\\doublecup"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Cup "))
+    | "\\barwedge"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\barwedge "))
+    | "\\veebar"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\veebar "))
+    | "\\doublebarwedge"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doublebarwedge "))
+    | "\\boxminus"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxminus "))
+    | "\\boxtimes"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxtimes "))
+    | "\\boxdot"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxdot "))
+    | "\\boxplus"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\boxplus "))
+    | "\\divideontimes"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\divideontimes "))
+    | "\\ltimes"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ltimes "))
+    | "\\rtimes"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rtimes "))
+    | "\\leftthreetimes"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftthreetimes "))
+    | "\\rightthreetimes"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightthreetimes "))
+    | "\\curlywedge"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlywedge "))
+    | "\\curlyvee"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyvee "))
+    | "\\circleddash"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circleddash "))
+    | "\\circledast"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledast "))
+    | "\\circledcirc"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circledcirc "))
+    | "\\centerdot"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\centerdot "))
+    | "\\intercal"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\intercal "))
+    | "\\leqq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leqq "))
+    | "\\leqslant"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leqslant "))
+    | "\\eqslantless"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqslantless "))
+    | "\\lessapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessapprox "))
+    | "\\approxeq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\approxeq "))
+    | "\\lessdot"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessdot "))
+    | "\\lll"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lll "))
+    | "\\lessgtr"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lessgtr "))
+    | "\\lesseqgtr"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesseqgtr "))
+    | "\\lesseqqgtr"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lesseqqgtr "))
+    | "\\doteqdot"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doteqdot "))
+    | "\\Doteq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\doteqdot "))
+    | "\\risingdotseq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\risingdotseq "))
+    | "\\fallingdotseq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\fallingdotseq "))
+    | "\\backsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backsim "))
+    | "\\backsimeq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backsimeq "))
+    | "\\subseteqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subseteqq "))
+    | "\\Subset"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Subset "))
+    | "\\preccurlyeq"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\preccurlyeq "))
+    | "\\curlyeqprec"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyeqprec "))
+    | "\\precsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precsim "))
+    | "\\precapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precapprox "))
+    | "\\vartriangleleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangleleft "))
+    | "\\Vvdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Vvdash "))
+    | "\\bumpeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\bumpeq "))
+    | "\\Bumpeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Bumpeq "))
+    | "\\geqq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\geqq "))
+    | "\\geqslant"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\geqslant "))
+    | "\\eqslantgtr"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqslantgtr "))
+    | "\\gtrsim"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrsim "))
+    | "\\gtrapprox"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrapprox "))
+    | "\\eqsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqsim "))
+    | "\\gtrdot"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrdot "))
+    | "\\ggg"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ggg "))
+    | "\\gggtr"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ggg "))
+    | "\\gtrless"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtrless "))
+    | "\\gtreqless"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtreqless "))
+    | "\\gtreqqless"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gtreqqless "))
+    | "\\eqcirc"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\eqcirc "))
+    | "\\circeq"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circeq "))
+    | "\\triangleq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\triangleq "))
+    | "\\thicksim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\thicksim "))
+    | "\\thickapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\thickapprox "))
+    | "\\supseteqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supseteqq "))
+    | "\\Supset"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Supset "))
+    | "\\succcurlyeq"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succcurlyeq "))
+    | "\\curlyeqsucc"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curlyeqsucc "))
+    | "\\succsim"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succsim "))
+    | "\\succapprox"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succapprox "))
+    | "\\vartriangleright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\vartriangleright "))
+    | "\\shortmid"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\shortmid "))
+    | "\\shortparallel"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\shortparallel "))
+    | "\\between"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\between "))
+    | "\\pitchfork"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\pitchfork "))
+    | "\\varpropto"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varpropto "))
+    | "\\blacktriangleleft"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangleleft "))
+    | "\\therefore"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\therefore "))
+    | "\\backepsilon"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\backepsilon "))
+    | "\\blacktriangleright"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\blacktriangleright "))
+    | "\\because"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\because "))
+    | "\\nleqslant"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleqslant "))
+    | "\\nleqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleqq "))
+    | "\\lneq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lneq "))
+    | "\\lneqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lneqq "))
+    | "\\lvertneqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lvertneqq "))
+    | "\\lnsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lnsim "))
+    | "\\lnapprox"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\lnapprox "))
+    | "\\nprec"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nprec "))
+    | "\\npreceq"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\npreceq "))
+    | "\\precneqq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precneqq "))
+    | "\\precnsim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precnsim "))
+    | "\\precnapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\precnapprox "))
+    | "\\nsim"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsim "))
+    | "\\nshortmid"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nshortmid "))
+    | "\\nvdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nvdash "))
+    | "\\nVdash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nVdash "))
+    | "\\ntriangleleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntriangleleft "))
+    | "\\ntrianglelefteq"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntrianglelefteq "))
+    | "\\nsubseteq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsubseteq "))
+    | "\\nsubseteqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsubseteqq "))
+    | "\\varsubsetneq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsubsetneq "))
+    | "\\subsetneqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\subsetneqq "))
+    | "\\varsubsetneqq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsubsetneqq "))
+    | "\\ngtr"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngtr "))
+    | "\\ngeqslant"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeqslant "))
+    | "\\ngeqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ngeqq "))
+    | "\\gneq"             -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gneq "))
+    | "\\gneqq"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gneqq "))
+    | "\\gvertneqq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gvertneqq "))
+    | "\\gnsim"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gnsim "))
+    | "\\gnapprox"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\gnapprox "))
+    | "\\nsucc"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsucc "))
+    | "\\nsucceq"          -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsucceq "))
+    | "\\succneqq"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succneqq "))
+    | "\\succnsim"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succnsim "))
+    | "\\succnapprox"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\succnapprox "))
+    | "\\ncong"            -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ncong "))
+    | "\\nshortparallel"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nshortparallel "))
+    | "\\nparallel"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nparallel "))
+    | "\\nvDash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nvDash "))
+    | "\\nVDash"           -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nVDash "))
+    | "\\ntriangleright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntriangleright "))
+    | "\\ntrianglerighteq" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\ntrianglerighteq "))
+    | "\\nsupseteq"        -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsupseteq "))
+    | "\\nsupseteqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nsupseteqq "))
+    | "\\varsupsetneq"     -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsupsetneq "))
+    | "\\supsetneqq"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\supsetneqq "))
+    | "\\varsupsetneqq"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\varsupsetneqq "))
+    | "\\leftleftarrows"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftleftarrows "))
+    | "\\leftrightarrows"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightarrows "))
+    | "\\Lleftarrow"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Lleftarrow "))
+    | "\\leftarrowtail"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftarrowtail "))
+    | "\\looparrowleft"    -> (tex_use_ams (); LITERAL (TEX_ONLY "\\looparrowleft "))
+    | "\\leftrightharpoons"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightharpoons "))
+    | "\\curvearrowleft"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curvearrowleft "))
+    | "\\circlearrowleft"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circlearrowleft "))
+    | "\\Lsh"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Lsh "))
+    | "\\upuparrows"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\upuparrows "))
+    | "\\rightrightarrows" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightrightarrows "))
+    | "\\rightleftarrows"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightleftarrows "))
+    | "\\Rrightarrow"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Rrightarrow "))
+    | "\\rightarrowtail"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightarrowtail "))
+    | "\\looparrowright"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\looparrowright "))
+    | "\\curvearrowright"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\curvearrowright "))
+    | "\\circlearrowright" -> (tex_use_ams (); LITERAL (TEX_ONLY "\\circlearrowright "))
+    | "\\Rsh"              -> (tex_use_ams (); LITERAL (TEX_ONLY "\\Rsh "))
+    | "\\downdownarrows"   -> (tex_use_ams (); LITERAL (TEX_ONLY "\\downdownarrows "))
+    | "\\multimap"         -> (tex_use_ams (); LITERAL (TEX_ONLY "\\multimap "))
+    | "\\leftrightsquigarrow"-> (tex_use_ams (); LITERAL (TEX_ONLY "\\leftrightsquigarrow "))
+    | "\\rightsquigarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\rightsquigarrow "))
+    | "\\nLeftarrow"       -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nLeftarrow "))
+    | "\\nleftrightarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nleftrightarrow "))
+    | "\\nRightarrow"      -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nRightarrow "))
+    | "\\nLeftrightarrow"  -> (tex_use_ams (); LITERAL (TEX_ONLY "\\nLeftrightarrow "))
     | "\\mathit"           -> (tex_use_ams (); FUN_AR1hf ("\\mathit ", FONTFORCE_IT))
     | "\\mathrm"           -> (tex_use_ams (); FUN_AR1hf ("\\mathrm ", FONTFORCE_RM))
+    | "\\mathord"          -> (tex_use_ams (); FUN_AR1 "\\mathord ")
     | "\\mathop"           -> (tex_use_ams (); FUN_AR1 "\\mathop ")
+    | "\\mathbin"          -> (tex_use_ams (); FUN_AR1 "\\mathbin ")
+    | "\\mathrel"          -> (tex_use_ams (); FUN_AR1 "\\mathrel ")
+    | "\\mathopen"         -> (tex_use_ams (); FUN_AR1 "\\mathopen ")
+    | "\\mathclose"        -> (tex_use_ams (); FUN_AR1 "\\mathclose ")
+    | "\\mathpunct"        -> (tex_use_ams (); FUN_AR1 "\\mathpunct ")
     | "\\boldsymbol"       -> (tex_use_ams (); FUN_AR1 "\\boldsymbol ")
     | "\\bold"             -> (tex_use_ams (); FUN_AR1 "\\mathbf ")
     | "\\Bbb"              -> (tex_use_ams (); FUN_AR1 "\\mathbb ")
@@ -455,9 +733,14 @@ let find = function
     | "\\mathsf"           -> (tex_use_ams (); FUN_AR1 "\\mathsf ")
     | "\\mathcal"          -> (tex_use_ams (); FUN_AR1 "\\mathcal ")
     | "\\mathbb"           -> (tex_use_ams (); FUN_AR1 "\\mathbb ")
+    | "\\mathtt"           -> (tex_use_ams (); FUN_AR1 "\\mathtt ")
     | "\\mathfrak"         -> (tex_use_ams (); FUN_AR1 "\\mathfrak ")
     | "\\operatorname"     -> (tex_use_ams (); FUN_AR1 "\\operatorname ")
+    | "\\text"             -> raise (Failure "malformatted \\text")
     | "\\mbox"             -> raise (Failure "malformatted \\mbox")
     | "\\vbox"             -> raise (Failure "malformatted \\vbox")
     | "\\hbox"             -> raise (Failure "malformatted \\hbox")
+    | "\\color"            -> (tex_use_color (); LITERAL (TEX_ONLY "\\color"))
+    | "\\pagecolor"        -> (tex_use_color (); LITERAL (TEX_ONLY "\\pagecolor"))
+    | "\\definecolor"      -> (tex_use_color (); LITERAL (TEX_ONLY "\\definecolor"))
     | s                    -> raise (Illegal_tex_function s)