texutil.ml

来自「php 开发的内容管理系统」· ML 代码 · 共 483 行 · 第 1/3 页

ML
483
字号
open Parseropen Render_infoopen Texopen Utillet tex_part = function    HTMLABLE (_,t,_) -> t  | HTMLABLEM (_,t,_) -> t  | HTMLABLEC (_,t,_) -> t  | MHTMLABLEC (_,t,_,_,_) -> t  | HTMLABLE_BIG (t,_) -> t  | TEX_ONLY t -> tlet 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_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_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_INFIX (s,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}"  | TEX_INFIXh (s,_,ll,rl) -> "{" ^ (mapjoin render_tex ll) ^ " " ^ s ^ "" ^ (mapjoin render_tex rl) ^ "}"  | TEX_BOX (bt,s) -> "{"^bt^"{" ^ s ^ "}}"  | TEX_BIG (bt,d) -> "{"^bt^(tex_part d)^"}"  | 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 | UTF8let modules_ams = ref falselet modules_nonascii = ref falselet modules_encoding = ref UTF8let modules_color = ref falselet tex_use_ams ()     = modules_ams := truelet tex_use_nonascii () = modules_nonascii := truelet tex_use_color ()  = modules_color := truelet 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"  | LATIN1 -> "\\usepackage[latin1]{inputenc}\n"  | 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 "") ^              (if !modules_color then "\\usepackage[dvips,usenames]{color}\n" else "") ^              "\\pagestyle{empty}\n\\begin{document}\n$$\n"let get_footer  ()  = "\n$$\n\\end{document}\n"let set_encoding = function    "ISO-8859-1" -> modules_encoding := LATIN1  | "iso-8859-1" -> modules_encoding := LATIN1  | "ISO-8859-2" -> modules_encoding := LATIN2  | _ -> modules_encoding := UTF8(* Turn that into hash table lookup *)exception Illegal_tex_function of stringlet find = function      "\\alpha"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\alpha ", "α"))    | "\\Alpha"            -> LITERAL (HTMLABLEC (FONT_RTI, "A", "Α"))    | "\\beta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\beta ",  "β"))    | "\\Beta"             -> LITERAL (HTMLABLEC (FONT_RTI, "B",  "Β"))    | "\\gamma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\gamma ", "γ"))    | "\\Gamma"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\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", "Ε"))    | "\\varepsilon"       -> LITERAL (TEX_ONLY "\\varepsilon ")    | "\\zeta"             -> LITERAL (HTMLABLEC (FONT_UF,  "\\zeta ", "ζ"))    | "\\Zeta"             -> LITERAL (HTMLABLEC (FONT_RTI, "Z", "Ζ"))    | "\\eta"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\eta ", "η"))    | "\\Eta"              -> LITERAL (HTMLABLEC (FONT_RTI, "H", "Η"))    | "\\theta"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\theta ", "θ"))    | "\\Theta"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\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", "Ι"))    | "\\kappa"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\kappa ", "κ"))    | "\\Kappa"            -> LITERAL (HTMLABLEC (FONT_RTI, "K", "Κ"))    | "\\lambda"           -> LITERAL (HTMLABLEC (FONT_UF,  "\\lambda ", "λ"))    | "\\Lambda"           -> LITERAL (HTMLABLEC (FONT_RTI, "\\Lambda ", "Λ"))    | "\\mu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\mu ", "μ"))    | "\\Mu"               -> LITERAL (HTMLABLEC (FONT_RTI, "M", "Μ"))    | "\\nu"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\nu ", "ν"))    | "\\Nu"               -> LITERAL (HTMLABLEC (FONT_RTI, "N", "Ν"))    | "\\pi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\pi ", "π"))    | "\\Pi"               -> LITERAL (HTMLABLEC (FONT_RTI, "\\Pi ", "Π"))    | "\\varpi"            -> LITERAL (TEX_ONLY "\\varpi ")    | "\\rho"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\rho ", "ρ"))    | "\\Rho"              -> LITERAL (HTMLABLEC (FONT_RTI, "P", "Ρ"))    | "\\varrho"           -> LITERAL (TEX_ONLY "\\varrho ")    | "\\sim"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\sim ", "˜"))    | "\\sigma"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\sigma ", "σ"))    | "\\Sigma"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Sigma ", "Σ"))    | "\\varsigma"         -> LITERAL (TEX_ONLY "\\varsigma ")    | "\\tau"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\tau ", "τ"))    | "\\Tau"              -> LITERAL (HTMLABLEC (FONT_RTI, "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 ", "Φ"))    | "\\varphi"           -> LITERAL (TEX_ONLY "\\varphi ")    | "\\chi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\chi ", "χ"))    | "\\Chi"              -> LITERAL (HTMLABLEC (FONT_RTI, "X", "Χ"))    | "\\psi"              -> LITERAL (HTMLABLEC (FONT_UF,  "\\psi ", "ψ"))    | "\\Psi"              -> LITERAL (HTMLABLEC (FONT_RTI, "\\Psi ", "Ψ"))    | "\\omega"            -> LITERAL (HTMLABLEC (FONT_UF,  "\\omega ", "ω"))    | "\\Omega"            -> LITERAL (HTMLABLEC (FONT_RTI, "\\Omega ", "Ω"))    | "\\xi"               -> LITERAL (HTMLABLEC (FONT_UF,  "\\xi ", "ξ"))    | "\\Xi"               -> LITERAL (HTMLABLEC (FONT_RTI, "\\Xi ", "Ξ"))    | "\\aleph"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))    | "\\alef"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))    | "\\alefsym"          -> LITERAL (HTMLABLE  (FONT_UF,  "\\aleph ", "ℵ"))    | "\\larr"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\leftarrow ", "←"))    | "\\leftarrow"        -> LITERAL (HTMLABLEM (FONT_UF,  "\\leftarrow ", "←"))    | "\\rarr"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\rightarrow ", "→"))    | "\\to"               -> LITERAL (HTMLABLEM (FONT_UF,  "\\to ", "→"))    | "\\gets"             -> LITERAL (HTMLABLEM (FONT_UF,  "\\gets ", "←"))    | "\\rightarrow"       -> LITERAL (HTMLABLEM (FONT_UF,  "\\rightarrow ", "→"))    | "\\longleftarrow"    -> LITERAL (HTMLABLE  (FONT_UF,  "\\longleftarrow ", "←"))    | "\\longrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\longrightarrow ", "→"))    | "\\Larr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "⇐"))    | "\\lArr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "⇐"))    | "\\Leftarrow"        -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftarrow ", "⇐"))    | "\\Rarr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Rightarrow ", "⇒"))    | "\\rArr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Rightarrow ", "⇒"))    | "\\Rightarrow"       -> LITERAL (HTMLABLEM (FONT_UF,  "\\Rightarrow ", "⇒"))    | "\\mapsto"           -> LITERAL (HTMLABLE  (FONT_UF,  "\\mapsto ", "→"))    | "\\longmapsto"       -> LITERAL (HTMLABLE  (FONT_UF,  "\\longmapsto ", "→"))    | "\\Longleftarrow"    -> LITERAL (HTMLABLE  (FONT_UF,  "\\Longleftarrow ", "⇐"))    | "\\Longrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\Longrightarrow ", "⇒"))    | "\\uarr"             -> DELIMITER (HTMLABLEM (FONT_UF,  "\\uparrow ", "↑"))    | "\\uparrow"          -> DELIMITER (HTMLABLEM (FONT_UF,  "\\uparrow ", "↑"))    | "\\uArr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "⇑"))    | "\\Uarr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "⇑"))    | "\\Uparrow"          -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Uparrow ", "⇑"))    | "\\darr"             -> DELIMITER (HTMLABLEM (FONT_UF,  "\\downarrow ", "↓"))    | "\\downarrow"        -> DELIMITER (HTMLABLEM (FONT_UF,  "\\downarrow ", "↓"))    | "\\dArr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "⇓"))    | "\\Darr"             -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "⇓"))    | "\\Downarrow"        -> DELIMITER (HTMLABLE  (FONT_UF,  "\\Downarrow ", "⇓"))    | "\\updownarrow"      -> DELIMITER (TEX_ONLY "\\updownarrow ")    | "\\Updownarrow"      -> DELIMITER (TEX_ONLY "\\Updownarrow ")    | "\\leftrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))    | "\\lrarr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))    | "\\harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\leftrightarrow ", "↔"))    | "\\Leftrightarrow"   -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))    | "\\Lrarr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))    | "\\Harr"             -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))    | "\\lrArr"            -> LITERAL (HTMLABLE  (FONT_UF,  "\\Leftrightarrow ", "⇔"))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?