Forgot password?
 Create new account
View 1197|Reply 24

原来 KaTeX 已提供 Copy-tex 扩展

[Copy link]

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

kuing Posted at 2021-3-22 17:30:55 |Read mode
【现已统一使用 MathJax3 ,本帖已过期】
KaTeX 扩展s:katex.org/docs/libs.html
现已按照 github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex 介绍的方法添加到论坛上,也就是说:

大家都可以直接复制论坛上以 KaTeX 显示的公式代码了!

可以右键单个公式复制,还可以拖选一整片来复制!粘贴出来的就是 latex 代码。
不用自己弄油猴什么的了……
欢迎测试:
行内公式 `\sum\sqrt x`,行间公式 \[\sum\sqrt{\frac a{b+c}}\]分界符是行内单美元行间双美元,看说明好像是说可以改,但暂时懒得弄了……

801

Threads

4889

Posts

310K

Credits

Credits
36169

Show all posts

isee Posted at 2021-3-22 17:44:15
回复 2# isee


    copy$\sum\sqrt{\frac a{b+c}}$

15

Threads

948

Posts

110K

Credits

Credits
12412

Show all posts

色k Posted at 2021-3-22 17:47:49
手机好像也可以

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

 Author| kuing Posted at 2021-3-22 17:58:11
回复 2# isee

单个复制好像总是行内的,试试一整段复制

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

 Author| kuing Posted at 2021-4-19 21:28:57
`1\ne2` 不等号你们看是不是歪了……

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-4-29 02:38:39

网页拷贝KaTeX公式用的代码

  1. document.querySelectorAll('.katex-display').forEach(a=>a.outerHTML='$$'+a.firstChild.firstChild.firstChild.firstChild.lastChild.innerHTML+'$$')
  2. document.querySelectorAll('.katex').forEach(a=>a.outerHTML='$'+a.firstChild.firstChild.firstChild.lastChild.innerHTML+'$')
Copy the Code

例如
Brilliant wiki
USTC 复变函数B 习题解答

(改进后 & 不会变成 & 了)

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2023-4-29 03:52:38
如何搬运香蕉空间?
不是JS的KaTeX
是服务器直接输出的KaTeX html
网页上没有LaTeX源码

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2024-3-28 07:23:27
kuing 发表于 2021-3-22 09:30
可以右键单个公式复制,还可以拖选一整片来复制!粘贴出来的就是 latex 代码。
KaTeX 复制比MathJax方便啊!不知Copy-tex 扩展能否迁移到MathJax🤔

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2024-3-28 07:33:36
hbghlyj 发表于 2024-3-27 23:23
KaTeX 复制比MathJax方便啊!不知Copy-tex 扩展能否迁移到MathJax🤔
Davide Cervone曾经写过:将隐藏文本附加到 MathJax 输出,该文本包含原始 TeX 代码,选择公式时将选择该文本,来代替 MathJax 输出就像它没有排版一样。
  1. MathJax = {
  2.   options: {
  3.     renderActions: {
  4.       addCopyText: [155,
  5.         (doc) => {for (const math of doc.math) MathJax.config.addCopyText(math, doc)},
  6.         (math, doc) => MathJax.config.addCopyText(math, doc)
  7.       ]
  8.     }
  9.   },
  10.   addCopyText(math, doc) {
  11.     const adaptor = doc.adaptor;
  12.     const text = adaptor.node('mjx-copytext', {'aria-hidden': true}, [
  13.       adaptor.text(math.start.delim + math.math + math.end.delim)
  14.     ]);
  15.     adaptor.append(math.typesetRoot, text);
  16.   },
  17.   startup: {
  18.     ready() {
  19.       MathJax._.output.chtml_ts.CHTML.commonStyles['mjx-copytext'] = {
  20.         display: 'inline-block',
  21.         position: 'absolute',
  22.         top: 0, left: 0, width: 0, height: 0,
  23.         opacity: 0,
  24.         overflow: 'hidden'
  25.       };
  26.       MathJax.startup.defaultReady();
  27.     }
  28.   }
  29. }
Copy the Code

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 02:54:44
kuing 发表于 2021-3-22 10:30
大家都可以直接复制论坛上以 KaTeX 显示的公式代码了!

能否用此法直接复制 MathJax 的公式代码?
  1. // This function customizes the copy event to replace LaTeX-rendered elements
  2. // with their source code, making them copyable as plain text.
  3. function onCopyHandler(event) {
  4.   const clipboardData = event.clipboardData;
  5.   if (!clipboardData) return;
  6.   // Get the current selection.
  7.   const selection = document.getSelection();
  8.   if (!selection || selection.isCollapsed) return;
  9.   // Create a temporary container and clone the selected content.
  10.   const container = document.createElement("div");
  11.   container.appendChild(selection.getRangeAt(0).cloneContents());
  12.   // Process the container: replace elements representing LaTeX with their source.
  13.   // Here, elements with data-latex are assumed to have the LaTeX source.
  14.   const latexElements = container.querySelectorAll("[data-latex]");
  15.   latexElements.forEach(element => {
  16.     const formula = element.getAttribute("data-latex") || "";
  17.     // Replace the element with a text node holding the LaTeX source wrapped in delimiters.
  18.     element.replaceWith(document.createTextNode(`\\(${formula}\\)`));
  19.   });
  20.   // Set the modified HTML and plain text into the clipboard.
  21.   clipboardData.setData("text/html", container.innerHTML);
  22.   clipboardData.setData("text/plain", container.textContent);
  23.   event.preventDefault();
  24. }
  25. // Attach the copy handler to the document.
  26. document.addEventListener("copy", onCopyHandler);
Copy the Code

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

abababa Posted at 2025-4-7 12:45:34
其实只要在那个svg里面加上一个text,就能复制出text中的文本了。
  1. <svg>
  2. <text>$\sum_{x\in S}\sqrt{x}$</text>
  3. .....
  4. </svg>
Copy the Code

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

 Author| kuing Posted at 2025-4-7 16:31:32
hbghlyj 发表于 2025-4-7 02:54
能否用此法直接复制 MathJax 的公式代码?
用之前为公式加 title 的方法:
kuing.cjhb.site/forum.php?mod=redirect&go … =63316&ptid=8195
再给公式加一个 alt ,也可以实现直接复制出代码吧

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 16:34:24
kuing 发表于 2025-4-7 09:31
再给公式加一个 alt

svg的alt无效
只有img有alt可复制

Comment

哦😥  Posted at 2025-4-7 17:21

701

Threads

110K

Posts

910K

Credits

Credits
94145
QQ

Show all posts

 Author| kuing Posted at 2025-4-7 17:54:45
hbghlyj 发表于 2025-4-7 17:39
谢谢!已改用这个办法,公式可直接复制了,取代了右上角的👁按钮。

不应该取代,有时显示代码并不是为了复制,只是为了看看,显示出来还是很重要的。

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 17:56:16
已撤回

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

abababa Posted at 2025-4-7 18:03:09
hbghlyj 发表于 2025-4-7 17:58
如何避免复制的公式代码前后有换行
是不是那个svg,mjx-container和后面的文本就有换行,所以复制时就出现了换行?

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 18:09:32
abababa 发表于 2025-4-7 11:03
是不是那个svg,mjx-container和后面的文本就有换行,所以复制时就出现了换行? ...

原先没有换行。复制SVG内<text>就会导致换行,测试:
  1. <!DOCTYPE html>
  2. <html>
  3.   <head>
  4.     <title>SVG Text Copy Test</title>
  5.     <style>
  6.       svg {
  7.         border: 1px solid #000;
  8.         margin: 20px 0;
  9.       }
  10.     </style>
  11.   </head>
  12.   <body>
  13.     <p>Before SVG copy test.<svg><text x="20" y="40" fill="blue">SVG Text Element</text></svg>After SVG copy test.</p>
  14.   </body>
  15. </html>
Copy the Code

Comment

确实如此😟  Posted at 2025-4-7 18:18

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 18:08:45
abababa 发表于 2025-4-7 05:45
其实只要在那个svg里面加上一个text,就能复制出text中的文本了。
如何避免复制的公式代码前后的换行

418

Threads

1627

Posts

110K

Credits

Credits
11886

Show all posts

abababa Posted at 2025-4-7 21:00:17
hbghlyj 发表于 2025-4-7 18:08
如何避免复制的公式代码前后的换行
是块级元素的问题吗?要不换成span试试行不行,比如
  1. <svg>
  2. <span style="position: absolute;left: -9999px;opacity: 0;pointer-events: none;">`1\ne2`</span>
  3. ...
  4. </svg>
Copy the Code

3148

Threads

8489

Posts

610K

Credits

Credits
66148
QQ

Show all posts

hbghlyj Posted at 2025-4-7 21:58:45
abababa posted at 2025-4-7 14:00
要不换成span试试行不行

加上了👌

手机版Mobile version|Leisure Math Forum

2025-4-20 12:11 GMT+8

Powered by Discuz!

× Quick Reply To Top Return to the list