+(* vim: set sw=8 ts=8 et: *)
open Parser
open Render_info
open Tex
| MHTMLABLEC (_,t,_,_,_) -> t
| HTMLABLE_BIG (t,_) -> t
| TEX_ONLY t -> t
+
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) ^ "}"
| 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
+(* module properties *)
let modules_ams = ref false
let modules_nonascii = ref false
let modules_encoding = ref UTF8
let modules_color = ref false
+(* wrappers to easily set / reset module properties *)
let tex_use_ams () = modules_ams := true
let tex_use_nonascii () = modules_nonascii := true
let tex_use_color () = modules_color := true
-let tex_mod_reset () = (modules_ams := false; modules_nonascii := false; modules_encoding := UTF8; modules_color := false)
+let tex_mod_reset () = (
+ modules_ams := false;
+ modules_nonascii := false;
+ modules_encoding := UTF8;
+ modules_color := false
+ )
+(* Return TeX fragment for one of the encodings in (UTF8,LATIN1,LATIN2) *)
let get_encoding = function
UTF8 -> "\\usepackage{ucs}\n\\usepackage[utf8]{inputenc}\n"
| LATIN1 -> "\\usepackage[latin1]{inputenc}\n"
| LATIN2 -> "\\usepackage[latin2]{inputenc}\n"
+(* TeX fragment inserted before the output *)
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 "") ^
(if !modules_color then "\\usepackage[dvips,usenames]{color}\n" else "") ^
- "\\pagestyle{empty}\n\\begin{document}\n$$\n"
+ "\\usepackage{cancel}\n\\pagestyle{empty}\n\\begin{document}\n$$\n"
+
+(* TeX fragment appended after the content *)
let get_footer () = "\n$$\n\\end{document}\n"
+(* Default to UTF8 *)
let set_encoding = function
"ISO-8859-1" -> modules_encoding := LATIN1
| "iso-8859-1" -> modules_encoding := LATIN1
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 ", "˜"))
+ | "\\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 ", "ℵ"))
| "\\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 ", "↔"))
| "\\models" -> LITERAL (TEX_ONLY "\\models ")
| "\\vdash" -> LITERAL (TEX_ONLY "\\vdash ")
| "\\triangle" -> LITERAL (TEX_ONLY "\\triangle ")
- | "\\bowtie" -> LITERAL (TEX_ONLY "\\bowtie ")
+ | "\\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 ")
+ | "\\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 ")
+ | "\\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 ")
| "\\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 ")
| "\\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>")))
+ | "\\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 "))
| "\\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 "))
| "\\left" -> LEFT
| "\\right" -> RIGHT
| "\\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 ")
| "\\underbrace" -> LITERAL (TEX_ONLY "\\underbrace ")
| "\\overleftarrow" -> LITERAL (TEX_ONLY "\\overleftarrow ")
| "\\overrightarrow" -> LITERAL (TEX_ONLY "\\overrightarrow ")
- | "\\overleftrightarrow"->LITERAL (TEX_ONLY "\\overleftrightarrow ")
+ | "\\overleftrightarrow"-> (tex_use_ams(); LITERAL (TEX_ONLY "\\overleftrightarrow "))
| "\\check" -> FUN_AR1 "\\check "
| "\\acute" -> FUN_AR1 "\\acute "
| "\\grave" -> FUN_AR1 "\\grave "
| "\\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)
| "\\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 ")
| "\\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)