您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Render .math-inline / .math-display elements in the Playground and all its iframes.
当前为
// ==UserScript== // @name Vercel SDK Playground – tidy inline LaTeX // @namespace https://sdk.vercel.ai/ // @version 0.5 // @description Render .math-inline / .math-display elements in the Playground and all its iframes. // @match https://sdk.vercel.ai/* // @run-at document-start // @grant GM_addStyle // ==/UserScript== (() => { 'use strict'; /* 0. MathJax configuration (must precede library load) */ unsafeWindow.MathJax = { tex: { inlineMath: [['\\(', '\\)']], displayMath: [['\\[', '\\]']] }, chtml: { scale: 1 }, options: { skipHtmlTags: ['script','noscript','style','textarea'] } }; /* 0.1 Keep inline math from becoming block‑level */ GM_addStyle('mjx-container.MathJax { display:inline-block !important; }'); /* 1. Inject MathJax CHTML build */ const s = document.createElement('script'); s.async = true; s.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js'; document.head.appendChild(s); /* 2. Helpers ---------------------------------------------------------- */ const wrap = (el) => { if (el.dataset.mjReady) return; const raw = el.textContent.trim(); if (!raw) return; el.textContent = el.classList.contains('math-inline') ? `\\(${raw}\\)` : `\\[${raw}\\]`; el.dataset.mjReady = '1'; }; const typeset = (nodes) => { if (unsafeWindow.MathJax?.typesetPromise) { unsafeWindow.MathJax.typesetPromise(nodes).catch(console.error); } else { setTimeout(() => typeset(nodes), 120); } }; const scan = (root = document) => { const elems = root.querySelectorAll('.math-inline, .math-display'); if (!elems.length) return; elems.forEach(wrap); typeset(Array.from(elems)); }; /* 3. First pass + live updates --------------------------------------- */ (document.readyState === 'loading') ? document.addEventListener('DOMContentLoaded', () => scan()) : scan(); const mo = new MutationObserver((ms) => { const add = []; ms.forEach((m) => m.addedNodes.forEach((n) => { if (!(n instanceof HTMLElement)) return; if (n.matches?.('.math-inline, .math-display')) add.push(n); add.push(...n.querySelectorAll?.('.math-inline, .math-display') || []); }) ); if (add.length) scan({ querySelectorAll: () => add }); }); mo.observe(document.body, { childList: true, subtree: true }); })();