Claude TeX Renderer

Render LaTeX math formulas on the page using MathJax

// ==UserScript==
// @name        Claude TeX Renderer
// @namespace   Violentmonkey Scripts
// @match       https://claude.ai/*
// @license MIT
// @match       https://claude.site/*
// @grant       none
// @version     1.0
// @author      KorigamiK
// @description  Render LaTeX math formulas on the page using MathJax
// ==/UserScript==
// deno-lint-ignore-file no-window no-window-prefix

(function () {
  "use strict";
  function insertMathJaxLibrary() {
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src =
      "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js";
    script.async = true;
    document.head.appendChild(script);
  }

  function configureMathJax() {
    window.MathJax = {
      tex: {
        inlineMath: [["$", "$"], ["\\(", "\\)"]],
        displayMath: [["$$", "$$"], ["\\[", "\\]"]],
        processEscapes: true,
      },
      svg: {
        fontCache: "global",
      },
    };
  }

  function renderMathJax() {
    window.MathJax.typesetPromise();
  }

  function createRenderButton() {
    const button = document.createElement("button");
    button.textContent = "Render Latex";
    button.style.cssText = `
      position: fixed;
      bottom: 90px;
      left: 10px;
      padding: 10px 10px;
      background-color: rgba(255, 255, 255, 0.4);
      color: white;
      border: none;
      border-radius: 4px;
      cursor: pointer;
      font-size: 16px;
      z-index: 9999;
`;

    button.addEventListener("mouseenter", function () {
      button.style.backgroundColor = "rgba(255, 255, 255, 0.5)";
    });
    button.addEventListener("mouseleave", function () {
      button.style.backgroundColor = "rgba(255, 255, 255, 0.4)";
    });

    button.addEventListener("click", renderMathJax, false);

    document.body.appendChild(button);
  }

  // Main execution
  insertMathJaxLibrary();
  configureMathJax();
  createRenderButton();

  window.addEventListener("load", renderMathJax, false);
})();