mirror of
https://github.com/morgan9e/chatgpt-web
synced 2026-04-14 00:14:04 +09:00
Fix KaTeX AGAIN
This commit is contained in:
@@ -31,6 +31,11 @@ code {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.katex-display {
|
||||||
|
margin: 2em 0;
|
||||||
|
max-width: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
.menu-list {
|
.menu-list {
|
||||||
line-height: 1.6 !important;
|
line-height: 1.6 !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,18 @@
|
|||||||
import renderMathInElement from 'katex/contrib/auto-render'
|
import renderMathInElement from 'katex/contrib/auto-render'
|
||||||
|
|
||||||
let renderedMath: string | undefined
|
let renderedMath: string | undefined
|
||||||
if ( raw.startsWith('`\\(') || raw.startsWith('`\\[') ) {
|
if ( raw.startsWith('`\\(') || raw.startsWith('`\\[') || raw.startsWith('`$') || raw.startsWith('`$$') ) {
|
||||||
let dummy = document.createElement("div")
|
let dummy = document.createElement("div")
|
||||||
dummy.textContent = raw.replace(/`/g, '')
|
dummy.textContent = raw.replace(/`/g, '')
|
||||||
renderMathInElement(dummy, {
|
renderMathInElement(dummy, {
|
||||||
delimiters: [
|
delimiters: [
|
||||||
{left: '\\(', right: '\\)', display: false},
|
{left: '\\(', right: '\\)', display: false},
|
||||||
{left: '\\[', right: '\\]', display: true}
|
{left: '\\[', right: '\\]', display: true},
|
||||||
|
{left: '$', right: '$', display: false},
|
||||||
|
{left: '$$', right: '$$', display: true}
|
||||||
],
|
],
|
||||||
throwOnError : false,
|
throwOnError : false
|
||||||
output: "mathml"
|
// output: "mathml"
|
||||||
})
|
})
|
||||||
renderedMath = dummy.innerHTML;
|
renderedMath = dummy.innerHTML;
|
||||||
dummy.remove();
|
dummy.remove();
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
import PromptConfirm from './PromptConfirm.svelte'
|
import PromptConfirm from './PromptConfirm.svelte'
|
||||||
import { getImage } from './ImageStore.svelte'
|
import { getImage } from './ImageStore.svelte'
|
||||||
import { getModelDetail } from './Models.svelte'
|
import { getModelDetail } from './Models.svelte'
|
||||||
|
import renderMathInElement from "https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/contrib/auto-render.mjs";
|
||||||
|
|
||||||
export let message:Message
|
export let message:Message
|
||||||
export let chatId:number
|
export let chatId:number
|
||||||
@@ -235,32 +236,62 @@
|
|||||||
document.body.removeChild(a)
|
document.body.removeChild(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
const replaceLatexDelimiters = (text: string): string => {
|
const replaceLatexDelimiters = (text: string): string => {
|
||||||
let result = '';
|
let result = '';
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
|
||||||
while (i < text.length) {
|
while (i < text.length) {
|
||||||
if (text.startsWith('\\(', i)) {
|
// Check for display math: $$ ... $$
|
||||||
let endPos = text.indexOf('\\)', i + 2);
|
if (text.startsWith('$$', i)) {
|
||||||
|
const endPos = text.indexOf('$$', i + 2);
|
||||||
if (endPos === -1) {
|
if (endPos === -1) {
|
||||||
console.error(`LaTeX: Delimiter mismatch at ${i}`)
|
console.error(`LaTeX: Delimiter mismatch (missing $$) at position ${i}`);
|
||||||
|
result += text[i];
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
// Wrap in backticks for KaTeX
|
||||||
|
result += `\`\\[${text.slice(i + 2, endPos)}\\]\``;
|
||||||
|
i = endPos + 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for inline math: $ ... $
|
||||||
|
else if (text.startsWith('$', i)) {
|
||||||
|
const endPos = text.indexOf('$', i + 1);
|
||||||
|
if (endPos === -1) {
|
||||||
|
console.error(`LaTeX: Delimiter mismatch (missing $) at position ${i}`);
|
||||||
|
result += text[i];
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
result += `\`$${text.slice(i + 1, endPos)}$\``;
|
||||||
|
i = endPos + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for inline math: \(...\)
|
||||||
|
else if (text.startsWith('\\(', i)) {
|
||||||
|
const endPos = text.indexOf('\\)', i + 2);
|
||||||
|
if (endPos === -1) {
|
||||||
|
console.error(`LaTeX: Delimiter mismatch (missing \\)) at position ${i}`);
|
||||||
result += text[i];
|
result += text[i];
|
||||||
i++;
|
i++;
|
||||||
} else {
|
} else {
|
||||||
result += '`\\(' + text.slice(i + 2, endPos) + '\\)`';
|
result += '`\\(' + text.slice(i + 2, endPos) + '\\)`';
|
||||||
i = endPos + 2;
|
i = endPos + 2;
|
||||||
}
|
}
|
||||||
} else if (text.startsWith('\\[', i)) {
|
}
|
||||||
let endPos = text.indexOf('\\]', i + 2);
|
// Check for display math: \[...\]
|
||||||
|
else if (text.startsWith('\\[', i)) {
|
||||||
|
const endPos = text.indexOf('\\]', i + 2);
|
||||||
if (endPos === -1) {
|
if (endPos === -1) {
|
||||||
console.error(`LaTeX: Delimiter mismatch at ${i}`)
|
console.error(`LaTeX: Delimiter mismatch (missing \\]) at position ${i}`);
|
||||||
result += text[i];
|
result += text[i];
|
||||||
i++;
|
i++;
|
||||||
} else {
|
} else {
|
||||||
result += `\`\\[${text.slice(i + 2, endPos)}\\]\``;
|
result += `\`\\[${text.slice(i + 2, endPos)}\\]\``;
|
||||||
i = endPos + 2;
|
i = endPos + 2;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
// Otherwise, just copy the current character (also handling backslash escapes)
|
||||||
|
else {
|
||||||
if (text.startsWith('\\(', i)) {
|
if (text.startsWith('\\(', i)) {
|
||||||
result += '\\(';
|
result += '\\(';
|
||||||
i += 2;
|
i += 2;
|
||||||
@@ -279,8 +310,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result
|
return result;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
const renderMathMsg = () => {
|
const renderMathMsg = () => {
|
||||||
displayMessage = replaceLatexDelimiters(message.content);
|
displayMessage = replaceLatexDelimiters(message.content);
|
||||||
|
|||||||
Reference in New Issue
Block a user