Forgot password?
 Create new account
Author: kuing

记录一回写油猴

[Copy link]

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-7-28 21:42:31
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……

字体比之前大一些……

我的脚本又得改写了😒……

17

Threads

126

Posts

1822

Credits

Credits
1822

Show all posts

uk702 Posted at 2022-7-29 08:25:40
kuing 发表于 2022-7-28 21:42
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的源代码。

而今升级成 V3 了, MathML 代码好像也没了,暂时没辙中~~~

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-7-29 09:51:02
uk702 发表于 2022-7-29 01:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的 ...
DevTools → Network → Block URL "mathjax" → Reload

processed-3eb43a02-bd67-4510-b582-cfc1f87aa97f_8txOuleX.jpg

In this way we can prevent loading mathjax.

processed-3eb43a02-bd67-4510-b582-cfc1f87aa97f_8txOuleX.jpg

Comment

您老的招太高了!多谢多谢。  Posted at 2022-7-29 15:58

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-7-29 13:29:27
uk702 发表于 2022-7-29 08:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的 ...
?我不懂 MathML,不太明白你的意思……
这和本帖的主题(油猴脚本)有关吗?

Comment

Sorry! 没有直接关系。只是说,mathjax v2 生成的网页,可以(不通过油猴而是)用软件反代码生成原始代码。  Posted at 2022-7-29 15:57

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-7-29 16:04:30
kuing 发表于 2022-7-28 21:42
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……
现在重写知乎复制公式油猴:
  1. // ==UserScript==
  2. // @name         zihu_ltx_cpy
  3. // @version      2022-7-29
  4. // @description  for zihu ltx cpy
  5. // @match        https://www.zhihu.com/*
  6. // @run-at context-menu
  7. // ==/UserScript==
  8. (function() {
  9.     'use strict';
  10. let zmaths = document.querySelectorAll('.ztext-math');
  11. for (let item of zmaths) {
  12.     var tex = '$'+item.dataset.tex+'$';
  13.     tex = tex.replace(/\$\\begin\{align\*\} /g,'\\begin{align*}\n')
  14.         .replace(/ \\end\{align\*\}\$/g,'\n\\end{align*}')
  15.         .replace(/\\\\ /g,'\\\\\n')
  16.     ;
  17.     var g = document.createElement('img');
  18.     g.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
  19.     g.alt = tex;
  20.     item.appendChild(g);
  21. }
  22. })();
Copy the Code

使用方法:
在知乎加载完公式后,
在页面任意地方右键,选择油猴菜单,点“zihu_ltx_cpy”,
然后就可以拖选内容复制,粘贴出来就有代码了。

这次顺便改进了多行公式:
去掉 $\begin{align*}\end{align*}$ 的 \$ ;
以前多行公式复制粘贴出来代码全是在同一行内,不便于阅读,现在会在 \\\\ 之后换行。

这次由于知乎不再以图片显示公式,而是在 span 里面用 svg,没办法加 alt 属性,只好自己添加一个 1x1 小图片(就是那串 base64 码),里面加 alt=代码。
所以如果仔细看,就会发现当你点“zihu_ltx_cpy”之后公式的后面会多出一个小黑点,复制的代码其实是复制这个图片。

Comment

更新更新了~  Posted at 2022-8-2 23:53
丢失了展示模式,知乎特有的\\居被保留  Posted at 2024-3-12 10:32

801

Threads

4889

Posts

310K

Credits

Credits
36169

Show all posts

isee Posted at 2022-8-9 19:45:10
kuing 发表于 2022-7-29 16:04
现在重写知乎复制公式油猴:

使用方法:
不错不错真不错!
isee=freeMaths@知乎

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-8-9 20:28:37
stackoverflow.com/questions/3755606

(function(){...})()
可以简写成
!function(){...}()

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-8-9 20:52:27
isee 发表于 2022-8-9 19:45
不错不错真不错!
我发现复制别的人帖子似乎有问题……

如果复制别人一小段内容,那就没问题;
但如果复制一大段,就会变成复制了带有版权信息的内容,而且那些公式代码的前面还会多出一串似乎是 MathML 的东西,而且换行也没了……

Comment

禁用JS就👌  Posted at 2022-8-10 02:19

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-8-9 21:48:26

清除草稿本



  1. // ==UserScript==
  2. // @name         clear input Text
  3. // @namespace    http://tampermonkey.net/
  4. // @match        https://kuing.cjhb.site/forum.php*
  5. // ==/UserScript==
  6. window.addEventListener('load',()=>{
  7.     if(typeof clearinputText == 'undefined') return;
  8.     clearinputText();
  9. });
Copy the Code

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-8-9 21:51:24

去除attachment tooltip(附件提示框)、禁用浮动窗口回复

大家可以根据自己的喜好选用
  1. // ==UserScript==
  2. // @name         delete attachimg tip & disallowfloat reply
  3. // @namespace    http://tampermonkey.net/
  4. // @match        https://kuing.cjhb.site/forum.php?mod=viewthread*
  5. // ==/UserScript==
  6. document.querySelectorAll('div.aimg_tip').forEach(a=>a.remove());
  7. disallowfloat+='|reply';
Copy the Code

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-8-10 03:57:05
kuing 发表于 2022-8-9 20:52
我发现复制别的人帖子似乎有问题……

如果复制别人一小段内容,那就没问题;
但如果复制一大段,就会 ...
突然想起我之前在 chrome 安装了一个“Simple Allow Copy”插件专门用来解除各种复制限制的。

于是先在知乎上点亮该插件(以后好像就不用再点),再用油猴,复制他人的也没问题了。

=====
哦还是有复制到多余 MathML 的问题……

好吧,再修改油猴,不搞什么小黑点图片了,直接让公式变成代码显示出来!:
(2022-8-10 20:01 更新)
  1. // ==UserScript==
  2. // @name         zihu_ltx_cpy
  3. // @version      2022-8-10
  4. // @description  for zihu ltx cpy
  5. // @match        https://*.zhihu.com/*
  6. // @run-at context-menu
  7. // ==/UserScript==
  8. (function() {
  9.     'use strict';
  10. let zmaths = document.querySelectorAll('.ztext-math');
  11. for (let item of zmaths) {
  12.     var tex = item.dataset.tex;
  13.     if (!(tex.search(/align\*|gather\*|equation\*|eqnarray|\\\]/) == -1)) {
  14.         tex = tex.replace(/\\\\ *$/g,'')
  15.             .replace(/(\\begin\{(align\*|gather\*|equation\*|eqnarray)\})/g,'$1\n')
  16.             .replace(/(\\end\{(align\*|gather\*|equation\*|eqnarray)\})/g,'\n$1')
  17.         ;
  18.     } else if (!(tex.search(/\\\\/) == -1)) {
  19.         tex = tex.replace(/\\\\ *$/g,'');
  20.         tex = '\\['+tex+'\\]';
  21.     } else {
  22.         tex = '$'+tex+'$';
  23.     }
  24.     tex = tex.replace(/\\\\(\[.*?\])?/g,'\\\\$1\n');
  25.     item.innerText = tex;
  26. }
  27. })();
Copy the Code

用法一样。

顺便又作一点小改进:
考虑到知乎上很多人喜欢在公式末尾加 \\\\ 以变成行间公式,但在知乎外是不应该有的,所以去掉;
兼容 \\\\[...] 这种换行;
(之前一直复制自己的,所以不曾考虑以上两点(我从来不这样写……))
当发现公式内有 \\\\ 时判断为行间公式,此时两边加的是 \\[ 和 \\](会误伤某些原先在行内的多行公式比如分段函数);

Comment

想知道它的原理是什么😶‍🌫️  Posted at 2022-8-10 04:15
研究一下“Simple Allow Copy”插件?  Posted at 2022-8-10 14:18
回复下一点评:你可以在网上找到它的.crx文件,下载下来改后缀为.rar然后解压就能看到代码(我自然是看不懂的)  Posted at 2022-8-10 16:55

Rate

Number of participants 1威望 +2 Collapse Reason
isee + 2 很有用!

View Rating Log

17

Threads

126

Posts

1822

Credits

Credits
1822

Show all posts

uk702 Posted at 2022-8-10 09:47:00
kuing 发表于 2022-8-10 03:57
突然想起我之前在 chrome 安装了一个“Simple Allow Copy”插件专门用来解除各种复制限制的。

于是先在 ...
老大,我懒得搞油猴了,进入开发者工具,直接将老大的代码拷贝到 console 中运行,就出来公式代码了。

Snipaste_2022-08-10_09-45-48.png

Comment

原来对应的英文是 inspect element  Posted at 2022-8-29 22:24

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-8-10 14:08:58
uk702 发表于 2022-8-10 09:47
老大,我懒得搞油猴了,进入开发者工具,直接将老大的代码拷贝到 console 中运行,就出来公式代 ...
搞个油猴很容易的啊

PS、竟然还有人用 eqnarray 环境……
看来我还得改改我那代码……(已修改--16:25 注)

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-8-10 14:23:50
kuing 发表于 2022-8-10 07:08
搞个油猴很容易的啊

PS、竟然还有人用 eqnarray 环境……
建议发布到Greasy Fork, 更新脚本时, 用户只要点击一下就更新了

701

Threads

110K

Posts

910K

Credits

Credits
94177
QQ

Show all posts

 Author| kuing Posted at 2022-8-10 14:25:09
hbghlyj 发表于 2022-8-10 14:23
建议发布到Greasy Fork, 更新脚本时, 用户只要点击一下就更新了
我这渣渣水平写的代码哪好意思拿出来发布啊

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-8-10 14:28:45
kuing 发表于 2022-8-10 07:25
我这渣渣水平写的代码哪好意思拿出来发布啊
发布总是有用的. 比如我是一个用户.

801

Threads

4889

Posts

310K

Credits

Credits
36169

Show all posts

isee Posted at 2022-8-29 20:28:55
更新到8-10
isee=freeMaths@知乎

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-12-23 04:57:26
uk702 发表于 2022-7-29 01:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的


而今升级成 V3 了, MathML 代码好像也没了,暂时没辙中~~~

澄清一下,不是因为升级成V3,而是因为避免产生横向滚动条,kuing在今年2月设置了MathJax不生成mjx-assistive-mml,从而在被MathJax处理后的网页源代码里不包含TeX源码了
但是在Debugger→Main Thread→forum.php可以查看未被MathJax处理的网页源代码,它仍然包含TeX源码
如下图
1.png

17

Threads

126

Posts

1822

Credits

Credits
1822

Show all posts

uk702 Posted at 2022-12-23 07:56:14
hbghlyj 发表于 2022-12-23 04:57
澄清一下,不是因为升级成V3,而是因为避免产生横向滚动条,kuing在今年2月设置了MathJax不生成mjx-assist ...
谢谢。我也发现这一招,这招等价于直接用 curl 命令下载某个网页,总的来说很有效。但也有局限性,某些网页(知乎?)首次打开时只显示个空架子,后面不断用 js 动态加载,就不好使了。

总的来看还是 block mathjax 相关的 http 请求最有效。

3147

Threads

8493

Posts

610K

Credits

Credits
66163
QQ

Show all posts

hbghlyj Posted at 2022-12-23 07:58:57
uk702 发表于 2022-12-23 00:56
某些网页(知乎?)首次打开时只显示个空架子,后面不断用 js 动态加载 ...
相关帖子:  单页应用(SPA) 和 同构页面
通过动态重写当前页面来与用户交互,而非传统的从服务器重新加载整个新页面。

后面举了例子
Facebook 就是这样工作的。后端代码推出处理用户交互的 JavaScript 代码。
[...]
查看 Facebook 代码,您会发现几乎整个页面都是 JavaScript。

手机版Mobile version|Leisure Math Forum

2025-4-20 22:23 GMT+8

Powered by Discuz!

× Quick Reply To Top Return to the list