iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
JavaScript

PM說: RD大大,這個功能要怎麼寫啊?系列 第 23

PM 說: 怎麼在網頁顯示數學公式 or 化學式?

  • 分享至 

  • xImage
  •  

前言

數學,物理,化學 ...etc 表達式
要怎麼顯示在網頁上呢? 總不可能全部都使用圖片吧
/images/emoticon/emoticon06.gif
答案是 Latex

Latex 是一個非WYSIWYG(所見即所得)的文字排版系統
格式會長這樣子:

\begin{itemize}
  \item[-] First thing

  \item[+] Second thing
    \begin{itemize}
      \item[Fish] A sub-thing

      \item[Plants] Another sub-thing
    \end{itemize}

  \item[Q] Third thing
\end{itemize}

有時候會遇到單頁行銷網站要放一些數學公式or化學式的需求
所以今天我們來找個套件實現一個 MVP

尋找套件時找到2個:

兩個都跑跑看:

compare

mathjax 支援多種輸入語法(如 LaTeX、MathML、AsciiMath)
katex 渲染比較快,故選它當作demo


語法

katex.render("latex語法字串", DOM元素, 設定檔物件);

設定檔文件在這邊

成果

katex_demo
demo

程式碼

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Latex in Web</title>
    <head>
      <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css"
        integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+"
        crossorigin="anonymous"
      />
      <script
        src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js"
        integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg"
        crossorigin="anonymous"
      ></script>
    </head>
  </head>
  <body>
    <pre>
以下是 3 個簡單的 LaTeX 語法範例:

### 1. 酸鹼中和化學式
要表示化學式,例如鹽酸(HCl)與氫氧化鈉(NaOH)的酸鹼中和反應,可以使用 `\rightarrow` 來顯示化學反應箭頭:


\text{HCl} + \text{NaOH} \rightarrow \text{NaCl} + \text{H}_2\text{O}

<div
class="my-latex"
data-expr="\text{HCl} + \text{NaOH} \rightarrow \text{NaCl} + \text{H}_2\text{O}"
></div>
### 2. 排列組合
排列 `P(n, r)` 和組合 `C(n, r)` 可以用公式表示如下:

排列:

P(n, r) = \frac{n!}{(n - r)!}

    <div
    class="my-latex"
    data-expr="P(n, r) = \frac{n!}{(n - r)!}"
    ></div>
組合:

C(n, r) = \binom{n}{r} = \frac{n!}{r!(n - r)!}

    <div
    class="my-latex"
    data-expr="C(n, r) = \binom{n}{r} = \frac{n!}{r!(n - r)!}"
    ></div>
### 3. 微積分 積分
簡單的積分語法,例子:從 0 到 1 的定積分:


\int_0^1 x^2 \, dx = \frac{1}{3}

    <div
    class="my-latex"
    data-expr="\int_0^1 x^2 \, dx = \frac{1}{3}"
    ></div>
這些是基本的 LaTeX 語法範例,適用於化學反應式、排列組合和積分的表示。
    </pre>
    <script>
      window.addEventListener("load", function (event) {
        const tex = document.getElementsByClassName("my-latex");
        [...tex].forEach((el) => {
          // getAttribute("data-expr")
          const expr = el.dataset.expr;
          katex.render(expr, el);
        });
      });
    </script>
  </body>
</html>

參考

https://zh.wikipedia.org/zh-tw/LaTeX

https://oi-wiki.org/tools/latex/

https://zhuanlan.zhihu.com/p/456055339

https://blog.gtwang.org/web-development/mathjax-latex-mathml/

https://www.osgeo.cn/mathjax/#google_vignette


上一篇
PM 說: 怎麼在網頁上嵌入 PDF?
下一篇
PM 說: 很常在網頁上看到線條粒子特效的背景是哪個套件?
系列文
PM說: RD大大,這個功能要怎麼寫啊?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言