// Name: LaTeX to ASCII Converter // Description: Search and insert LaTeX symbols as ASCII characters // Author: benhaotang // GitHub: // keyword: tex import "@johnlindquist/kit"; const latexSymbols = [ { name: "alpha", latex: "\\alpha", ascii: "α", description: "Greek letter alpha", }, { name: "beta", latex: "\\beta", ascii: "β", description: "Greek letter beta", }, { name: "gamma", latex: "\\gamma", ascii: "γ", description: "Greek letter gamma", }, { name: "delta", latex: "\\delta", ascii: "δ", description: "Greek letter delta", }, { name: "epsilon", latex: "\\epsilon", ascii: "ε", description: "Greek letter epsilon", }, { name: "zeta", latex: "\\zeta", ascii: "ζ", description: "Greek letter zeta", }, { name: "eta", latex: "\\eta", ascii: "η", description: "Greek letter eta" }, { name: "theta", latex: "\\theta", ascii: "θ", description: "Greek letter theta", }, { name: "iota", latex: "\\iota", ascii: "ι", description: "Greek letter iota", }, { name: "kappa", latex: "\\kappa", ascii: "κ", description: "Greek letter kappa", }, { name: "lambda", latex: "\\lambda", ascii: "λ", description: "Greek letter lambda", }, { name: "mu", latex: "\\mu", ascii: "μ", description: "Greek letter mu" }, { name: "nu", latex: "\\nu", ascii: "ν", description: "Greek letter nu" }, { name: "xi", latex: "\\xi", ascii: "ξ", description: "Greek letter xi" }, { name: "omicron", latex: "\\omicron", ascii: "ο", description: "Greek letter omicron", }, { name: "pi", latex: "\\pi", ascii: "π", description: "Greek letter pi" }, { name: "rho", latex: "\\rho", ascii: "ρ", description: "Greek letter rho" }, { name: "sigma", latex: "\\sigma", ascii: "σ", description: "Greek letter sigma", }, { name: "tau", latex: "\\tau", ascii: "τ", description: "Greek letter tau" }, { name: "upsilon", latex: "\\upsilon", ascii: "υ", description: "Greek letter upsilon", }, { name: "phi", latex: "\\phi", ascii: "φ", description: "Greek letter phi" }, { name: "chi", latex: "\\chi", ascii: "χ", description: "Greek letter chi" }, { name: "psi", latex: "\\psi", ascii: "ψ", description: "Greek letter psi" }, { name: "omega", latex: "\\omega", ascii: "ω", description: "Greek letter omega", }, // Uppercase Greek letters { name: "Alpha", latex: "\\Alpha", ascii: "Α", description: "Greek letter Alpha (uppercase)", }, { name: "Beta", latex: "\\Beta", ascii: "Β", description: "Greek letter Beta (uppercase)", }, { name: "Gamma", latex: "\\Gamma", ascii: "Γ", description: "Greek letter Gamma (uppercase)", }, { name: "Delta", latex: "\\Delta", ascii: "Δ", description: "Greek letter Delta (uppercase)", }, { name: "Epsilon", latex: "\\Epsilon", ascii: "Ε", description: "Greek letter Epsilon (uppercase)", }, { name: "Zeta", latex: "\\Zeta", ascii: "Ζ", description: "Greek letter Zeta (uppercase)", }, { name: "Eta", latex: "\\Eta", ascii: "Η", description: "Greek letter Eta (uppercase)", }, { name: "Theta", latex: "\\Theta", ascii: "Θ", description: "Greek letter Theta (uppercase)", }, { name: "Iota", latex: "\\Iota", ascii: "Ι", description: "Greek letter Iota (uppercase)", }, { name: "Kappa", latex: "\\Kappa", ascii: "Κ", description: "Greek letter Kappa (uppercase)", }, { name: "Lambda", latex: "\\Lambda", ascii: "Λ", description: "Greek letter Lambda (uppercase)", }, { name: "Mu", latex: "\\Mu", ascii: "Μ", description: "Greek letter Mu (uppercase)", }, { name: "Nu", latex: "\\Nu", ascii: "Ν", description: "Greek letter Nu (uppercase)", }, { name: "Xi", latex: "\\Xi", ascii: "Ξ", description: "Greek letter Xi (uppercase)", }, { name: "Omicron", latex: "\\Omicron", ascii: "Ο", description: "Greek letter Omicron (uppercase)", }, { name: "Pi", latex: "\\Pi", ascii: "Π", description: "Greek letter Pi (uppercase)", }, { name: "Rho", latex: "\\Rho", ascii: "Ρ", description: "Greek letter Rho (uppercase)", }, { name: "Sigma", latex: "\\Sigma", ascii: "Σ", description: "Greek letter Sigma (uppercase)", }, { name: "Tau", latex: "\\Tau", ascii: "Τ", description: "Greek letter Tau (uppercase)", }, { name: "Upsilon", latex: "\\Upsilon", ascii: "Υ", description: "Greek letter Upsilon (uppercase)", }, { name: "Phi", latex: "\\Phi", ascii: "Φ", description: "Greek letter Phi (uppercase)", }, { name: "Chi", latex: "\\Chi", ascii: "Χ", description: "Greek letter Chi (uppercase)", }, { name: "Psi", latex: "\\Psi", ascii: "Ψ", description: "Greek letter Psi (uppercase)", }, { name: "Omega", latex: "\\Omega", ascii: "Ω", description: "Greek letter Omega (uppercase)", }, // Mathematical operators { name: "pm", latex: "\\pm", ascii: "±", description: "Plus-minus sign" }, { name: "mp", latex: "\\mp", ascii: "∓", description: "Minus-plus sign" }, { name: "times", latex: "\\times", ascii: "×", description: "Multiplication sign", }, { name: "div", latex: "\\div", ascii: "÷", description: "Division sign" }, { name: "cdot", latex: "\\cdot", ascii: "·", description: "Center dot" }, { name: "bullet", latex: "\\bullet", ascii: "•", description: "Bullet" }, { name: "ast", latex: "\\ast", ascii: "∗", description: "Asterisk operator" }, { name: "star", latex: "\\star", ascii: "⋆", description: "Star operator" }, { name: "circ", latex: "\\circ", ascii: "∘", description: "Ring operator" }, { name: "oplus", latex: "\\oplus", ascii: "⊕", description: "Circled plus" }, { name: "ominus", latex: "\\ominus", ascii: "⊖", description: "Circled minus", }, { name: "otimes", latex: "\\otimes", ascii: "⊗", description: "Circled times", }, { name: "oslash", latex: "\\oslash", ascii: "⊘", description: "Circled division slash", }, { name: "odot", latex: "\\odot", ascii: "⊙", description: "Circled dot operator", }, // Relations { name: "leq", latex: "\\leq", ascii: "≤", description: "Less than or equal to", }, { name: "geq", latex: "\\geq", ascii: "≥", description: "Greater than or equal to", }, { name: "neq", latex: "\\neq", ascii: "≠", description: "Not equal to" }, { name: "equiv", latex: "\\equiv", ascii: "≡", description: "Identical to" }, { name: "approx", latex: "\\approx", ascii: "≈", description: "Almost equal to", }, { name: "sim", latex: "\\sim", ascii: "∼", description: "Tilde operator" }, { name: "simeq", latex: "\\simeq", ascii: "≃", description: "Asymptotically equal to", }, { name: "cong", latex: "\\cong", ascii: "≅", description: "Approximately equal to", }, { name: "propto", latex: "\\propto", ascii: "∝", description: "Proportional to", }, // Set theory { name: "in", latex: "\\in", ascii: "∈", description: "Element of" }, { name: "notin", latex: "\\notin", ascii: "∉", description: "Not an element of", }, { name: "ni", latex: "\\ni", ascii: "∋", description: "Contains as member" }, { name: "subset", latex: "\\subset", ascii: "⊂", description: "Subset of" }, { name: "supset", latex: "\\supset", ascii: "⊃", description: "Superset of" }, { name: "subseteq", latex: "\\subseteq", ascii: "⊆", description: "Subset of or equal to", }, { name: "supseteq", latex: "\\supseteq", ascii: "⊇", description: "Superset of or equal to", }, { name: "cup", latex: "\\cup", ascii: "∪", description: "Union" }, { name: "cap", latex: "\\cap", ascii: "∩", description: "Intersection" }, { name: "emptyset", latex: "\\emptyset", ascii: "∅", description: "Empty set", }, // Logic { name: "land", latex: "\\land", ascii: "∧", description: "Logical and" }, { name: "lor", latex: "\\lor", ascii: "∨", description: "Logical or" }, { name: "lnot", latex: "\\lnot", ascii: "¬", description: "Logical not" }, { name: "forall", latex: "\\forall", ascii: "∀", description: "For all" }, { name: "exists", latex: "\\exists", ascii: "∃", description: "There exists", }, { name: "nexists", latex: "\\nexists", ascii: "∄", description: "There does not exist", }, // Arrows { name: "leftarrow", latex: "\\leftarrow", ascii: "←", description: "Left arrow", }, { name: "rightarrow", latex: "\\rightarrow", ascii: "→", description: "Right arrow", }, { name: "leftrightarrow", latex: "\\leftrightarrow", ascii: "↔", description: "Left right arrow", }, { name: "uparrow", latex: "\\uparrow", ascii: "↑", description: "Up arrow" }, { name: "downarrow", latex: "\\downarrow", ascii: "↓", description: "Down arrow", }, { name: "updownarrow", latex: "\\updownarrow", ascii: "↕", description: "Up down arrow", }, { name: "Leftarrow", latex: "\\Leftarrow", ascii: "⇐", description: "Left double arrow", }, { name: "Rightarrow", latex: "\\Rightarrow", ascii: "⇒", description: "Right double arrow", }, { name: "Leftrightarrow", latex: "\\Leftrightarrow", ascii: "⇔", description: "Left right double arrow", }, // Miscellaneous { name: "infty", latex: "\\infty", ascii: "∞", description: "Infinity" }, { name: "partial", latex: "\\partial", ascii: "∂", description: "Partial differential", }, { name: "nabla", latex: "\\nabla", ascii: "∇", description: "Nabla" }, { name: "sum", latex: "\\sum", ascii: "∑", description: "N-ary summation" }, { name: "prod", latex: "\\prod", ascii: "∏", description: "N-ary product" }, { name: "int", latex: "\\int", ascii: "∫", description: "Integral" }, { name: "oint", latex: "\\oint", ascii: "∮", description: "Contour integral", }, { name: "sqrt", latex: "\\sqrt", ascii: "√", description: "Square root" }, { name: "angle", latex: "\\angle", ascii: "∠", description: "Angle" }, { name: "perp", latex: "\\perp", ascii: "⊥", description: "Perpendicular" }, { name: "parallel", latex: "\\parallel", ascii: "∥", description: "Parallel to", }, { name: "degree", latex: "\\degree", ascii: "°", description: "Degree sign" }, { name: "prime", latex: "\\prime", ascii: "′", description: "Prime" }, { name: "hbar", latex: "\\hbar", ascii: "ℏ", description: "Planck constant over 2 pi", }, { name: "ell", latex: "\\ell", ascii: "ℓ", description: "Script small l" }, { name: "wp", latex: "\\wp", ascii: "℘", description: "Weierstrass elliptic function", }, { name: "Re", latex: "\\Re", ascii: "ℜ", description: "Real part symbol" }, { name: "Im", latex: "\\Im", ascii: "ℑ", description: "Imaginary part symbol", }, { name: "aleph", latex: "\\aleph", ascii: "ℵ", description: "Aleph symbol" }, { name: "because", latex: "\\because", ascii: "∵", description: "Because symbol (since, as)", }, { name: "therefore", latex: "\\therefore", ascii: "∴", description: "Therefore symbol (thus, hence)", }, ]; const searchSymbols = (input) => { if (!input) return latexSymbols; let tempinput = input.trim(); if (input.startsWith("tex ")) tempinput = input.slice(4).trim(); const lowerInput = tempinput.toLowerCase(); // Separate matches by priority const latexMatches = []; const nameMatches = []; const descriptionMatches = []; for (const symbol of latexSymbols) { const latexMatch = symbol.latex.toLowerCase().includes(lowerInput); const nameMatch = symbol.name.toLowerCase().includes(lowerInput); const descriptionMatch = symbol.description .toLowerCase() .includes(lowerInput); if (latexMatch) { latexMatches.push(symbol); } else if (nameMatch) { nameMatches.push(symbol); } else if (descriptionMatch) { descriptionMatches.push(symbol); } } // Combine results with latex matches first const allMatches = [...latexMatches, ...nameMatches, ...descriptionMatches]; return allMatches.map((symbol) => ({ name: `${symbol.name} (${symbol.latex}) → ${symbol.ascii}`, value: symbol.ascii, description: symbol.description, preview: `<div class="text-center text-6xl p-8">${symbol.ascii}</div>`, })); }; const selectedSymbol = await arg( { placeholder: "Search LaTeX symbols (e.g., theta, pm, alpha)...", enter: "Insert Symbol", strict: false, }, searchSymbols, ); await hide(); await setSelectedText(selectedSymbol);