OpenAI-ChatGPT LaTeX Auto Render (with MathJax V2)

Add auto LaTeX math render on OpenAI ChatGPT page.

2022-12-06 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         OpenAI-ChatGPT LaTeX Auto Render (with MathJax V2)
// @namespace    http://tampermonkey.net/
// @version      0.2.1
// @description  Add auto LaTeX math render on OpenAI ChatGPT page.
// @author       Scruel
// @match        https://chat.openai.com/chat
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var renderDelay = 1000;

    function addScript(url) {
        const scriptElement = document.createElement('script');
        scriptElement.src = url;
        scriptElement.type = 'text/javascript';
        scriptElement.async = true;

        const headElement = document.getElementsByTagName('head')[0] || document.documentElement;
        headElement.insertBefore(scriptElement , headElement.firstChild);
        waitLoaded();
    }

    function waitLoaded() {
        if (!MathJax.hasOwnProperty('Hub')) {
            // console.log("Loading...")
            window.setTimeout(waitLoaded, 200);
        } else {
            renderLatex();
        }
    }

    function renderTrigger() {
        setTimeout(renderLatex, renderDelay);
    }

    function renderLatex() {
        const submitButton = document.querySelector('main form textarea+button');
        // console.log(submitButton)
        if (submitButton && !submitButton.disabled) {
            // console.log("Rendering...")
            MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
        }
        renderTrigger();
    }

    window.MathJax = {
        tex2jax: {
            inlineMath: [['$', '$']],
            displayMath  : [['$$', '$$']]
        },
        CommonHTML: { linebreaks: { automatic: true } },
        "HTML-CSS": { linebreaks: { automatic: true } },
        SVG: { linebreaks: { automatic: true } }
    };

    addScript('https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS_CHTML')
})();