Files
konabot-web/src/routes/latex/+page.svelte
MixBadGun 00acfee3e6
All checks were successful
continuous-integration/drone/push Build is passing
更稳定的生成
2025-11-10 22:00:47 +08:00

97 lines
2.3 KiB
Svelte
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script lang="ts">
import "github-markdown-css/github-markdown.css";
import "./main.css";
import { onMount } from "svelte";
let content = `$E=mc^2$`;
let source = "";
let version = 0;
import { tick } from "svelte";
let complete = false;
async function updateSource() {
complete = false;
version += 1;
source = content;
if ((content.includes("$")) || (content.includes("$$"))) {
complete = false;
TriggerRender();
} else {
complete = true;
}
}
function TriggerRender() {
// 如果没有标签名为 mjx-container 元素,就一直循环触发
const checkAndRender = async () => {
await tick();
const mjxContainer = document.querySelector('mjx-container');
if (!mjxContainer) {
await renderMath();
setTimeout(checkAndRender, 100);
} else {
console.log("MathJax rendering complete.");
complete = true;
}
};
checkAndRender();
}
async function renderMath() {
console.log("Rendering math...");
const MathJax = (window as any).MathJax;
if (!MathJax) return;
if (MathJax.typesetPromise) {
await MathJax.typesetPromise();
}
}
let sizeParam = '1.2em';
onMount(async () => {
/// @ts-ignore
await import("mathjax-full/es5/tex-mml-svg.js");
const urlParams = new URLSearchParams(window.location.search);
sizeParam = urlParams.get('size') ?? sizeParam;
(window as any).checkState = () => {
return complete;
};
});
</script>
<textarea name="content" id="content" bind:value={content}></textarea>
<button id="button" on:click={updateSource}>Render Math</button>
<svelte:head>
<script>
window.MathJax = {
loader: {
paths: {
tex: 'node_modules/mathjax-full/es5/input/tex/extensions'
}
},
tex: {
inlineMath: [['$', '$']],
displayMath: [['$$', '$$']]
}
};
</script>
<style>
svg text[font-family=serif] {
font-family: 'Noto Serif CJK SC', 'Noto Serif SC', 'Noto Serif', serif;
}
</style>
</svelte:head>
<!-- version 是一个用于强制 Svelte 重新渲染内容的变量。当内容更新时version 会递增,从而触发 Svelte 重新渲染包含 source 的部分。 -->
{#key version}
<div id="main" class="markdown-body main" style="font-size: {sizeParam || '1.2em'}">
{source}
</div>
{/key}