Browse Source

feat: 公式解析

whh 9 months ago
parent
commit
75fbb33285
7 changed files with 75 additions and 21 deletions
  1. 2 1
      index.html
  2. 25 0
      package-lock.json
  3. 1 0
      package.json
  4. 3 1
      src/assets/styles/index.scss
  5. 0 0
      src/assets/styles/katex11.1.min.scss
  6. 19 8
      src/components/Chat/ChatText.vue
  7. 25 11
      yarn.lock

+ 2 - 1
index.html

@@ -4,7 +4,8 @@
     <meta charset="UTF-8">
     <link rel="icon" href="/favicon.ico">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css"> -->
+    <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.0/katex.min.css"> -->
+    <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/4.0.0/github-markdown.min.css"/> -->
     <!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"> -->
     <!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"/> -->
 

+ 25 - 0
package-lock.json

@@ -8,6 +8,7 @@
       "name": "temp-vue-3",
       "version": "0.0.0",
       "dependencies": {
+        "@iktakahiro/markdown-it-katex": "^4.0.1",
         "@vueuse/core": "^10.9.0",
         "axios": "^1.6.8",
         "highlight.js": "^11.9.0",
@@ -1090,6 +1091,30 @@
         "node": ">=12"
       }
     },
+    "node_modules/@iktakahiro/markdown-it-katex": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/@iktakahiro/markdown-it-katex/-/markdown-it-katex-4.0.1.tgz",
+      "integrity": "sha512-kGFooO7fIOgY34PSG8ZNVsUlKhhNoqhzW2kq94TNGa8COzh73PO4KsEoPOsQVG1mEAe8tg7GqG0FoVao0aMHaw==",
+      "dependencies": {
+        "katex": "^0.12.0"
+      }
+    },
+    "node_modules/@iktakahiro/markdown-it-katex/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/@iktakahiro/markdown-it-katex/node_modules/katex": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/katex/-/katex-0.12.0.tgz",
+      "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==",
+      "dependencies": {
+        "commander": "^2.19.0"
+      },
+      "bin": {
+        "katex": "cli.js"
+      }
+    },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
     "type-check": "vue-tsc --build --force"
   },
   "dependencies": {
+    "@iktakahiro/markdown-it-katex": "^4.0.1",
     "@vueuse/core": "^10.9.0",
     "axios": "^1.6.8",
     "highlight.js": "^11.9.0",

+ 3 - 1
src/assets/styles/index.scss

@@ -4,5 +4,7 @@
 // @import "./github-markdown.scss";
 @import "./highlight.scss";
 
-@import "./katex.min.scss";
+// @import "./katex.min.scss";
+
+@import "./katex11.1.min.scss";
 @import "./github-markdown-light.scss";

File diff suppressed because it is too large
+ 0 - 0
src/assets/styles/katex11.1.min.scss


+ 19 - 8
src/components/Chat/ChatText.vue

@@ -4,7 +4,7 @@ import MarkdownIt from 'markdown-it';
 import hljs from 'highlight.js';
 import mila from 'markdown-it-link-attributes';
 import markdownItMath from 'markdown-it-math';
-import mdKatex from 'markdown-it-katex';
+import mdKatex from '@iktakahiro/markdown-it-katex';
 import mathjax from 'markdown-it-mathjax';
 
 const props = defineProps({
@@ -14,12 +14,26 @@ const props = defineProps({
   }
 })
 
+const highlightBlock = (str, lang) => {
+  return `
+    <code class="hljs code-block-body ${lang}">${str}</code>
+  `
+}
 const mdi = new MarkdownIt({
   html: true,
   linkify: true,
   breaks: true,
   typographer: true,
+  highlight(code, language) {
+    const validLang = !!(language && hljs.getLanguage(language))
+    if (validLang) {
+      const lang = language ?? ''
+      return highlightBlock(hljs.highlight(code, { language: lang }).value, lang)
+    }
+    return highlightBlock(hljs.highlightAuto(code).value, '')
+  },
 })
+
 mdi.use(mila, { attrs: { target: '_blank', rel: 'noopener' } });
 
 mdi.use(markdownItMath, {
@@ -34,6 +48,8 @@ mdi.use(mdKatex, {
   errorColor: ' #cc0000',
 })
 
+mdi.renderer.rules.table_open = function (tokens, idx, options, env, self) { return '<div class="custom-table-wrapper"><table>'; };
+mdi.renderer.rules.table_close = function () { return '</table></div>'; };
 
 const text = computed(() => {
   const value = props.content ?? ""
@@ -42,16 +58,10 @@ const text = computed(() => {
   return value
 })
 
-
-const res123 = mdi.render(`$$P_{待估} = \\frac{1/a}{1/a+1/b+1/c}*P_A+\\frac{1/b}{1/a+1/b+1/c}*P_B+\\frac{1/c}{1/a+1/b+1/c}*P_C$$`)
-
-
 </script>
 
 <template>
-  <div ref="formulaContainer" class="formula-container"></div>
   <div class="markdown-body text-[15px] break-all" v-if="content">
-    <!-- <div v-html="result"></div> -->
     <div v-html="text"></div>
   </div>
 </template>
@@ -62,9 +72,10 @@ const res123 = mdi.render(`$$P_{待估} = \\frac{1/a}{1/a+1/b+1/c}*P_A+\\frac{1/
 }
 
 .markdown-body {
-
   .custom-table-wrapper {
     width: 710px;
+    padding: 10px;
+    background: #eff8fc;
     margin-bottom: 16px;
     overflow-x: scroll;
 

+ 25 - 11
yarn.lock

@@ -364,10 +364,17 @@
   resolved "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz"
   integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
 
-"@esbuild/darwin-x64@0.20.2":
+"@esbuild/win32-x64@0.20.2":
   version "0.20.2"
-  resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz"
-  integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
+  resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz"
+  integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==
+
+"@iktakahiro/markdown-it-katex@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmmirror.com/@iktakahiro/markdown-it-katex/-/markdown-it-katex-4.0.1.tgz"
+  integrity sha512-kGFooO7fIOgY34PSG8ZNVsUlKhhNoqhzW2kq94TNGa8COzh73PO4KsEoPOsQVG1mEAe8tg7GqG0FoVao0aMHaw==
+  dependencies:
+    katex "^0.12.0"
 
 "@isaacs/cliui@^8.0.2":
   version "8.0.2"
@@ -458,10 +465,10 @@
     estree-walker "^2.0.2"
     picomatch "^2.3.1"
 
-"@rollup/rollup-darwin-x64@4.18.0":
+"@rollup/rollup-win32-x64-msvc@4.18.0":
   version "4.18.0"
-  resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz"
-  integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
+  resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz"
+  integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
 
 "@trysound/sax@0.2.0":
   version "0.2.0"
@@ -1123,6 +1130,11 @@ combined-stream@^1.0.8:
   dependencies:
     delayed-stream "~1.0.0"
 
+commander@^2.19.0:
+  version "2.20.3"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
 commander@^4.0.0:
   version "4.1.1"
   resolved "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz"
@@ -1787,11 +1799,6 @@ fs-extra@^11.2.0:
     jsonfile "^6.0.1"
     universalify "^2.0.0"
 
-fsevents@~2.3.2, fsevents@~2.3.3:
-  version "2.3.3"
-  resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz"
-  integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
 function-bind@^1.1.2:
   version "1.1.2"
   resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz"
@@ -2374,6 +2381,13 @@ jsonfile@^6.0.1:
   optionalDependencies:
     graceful-fs "^4.1.6"
 
+katex@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.npmmirror.com/katex/-/katex-0.12.0.tgz"
+  integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==
+  dependencies:
+    commander "^2.19.0"
+
 katex@^0.16.10:
   version "0.16.10"
   resolved "https://registry.npmmirror.com/katex/-/katex-0.16.10.tgz"

Some files were not shown because too many files changed in this diff