更新 MathJax CDN

2023-12-05

正如官方宣布的那样,MathJax 将关闭其 CDN在 MathJax 网站上 and on StackExchange 的元数据。官方公告推荐了几种替代方案,包括使用替代 CDN 和自托管。对于有大量 MathJax CDN 引用的站点,完成此过程的最佳方法是什么?

例如,在我的小网站上,我可以使用以下 unix 命令计算指向 MathJax CDN 的文件数量:

grep -rl 'cdn\.mathjax\.org/mathjax/latest/MathJax\.js' . | grep '\.html$' | wc -l

我发现我有382个这样的文件。自动化浏览这些文件并修改源以指向新 CDN 而不是旧 CDN 的过程的最佳(最安全)方法是什么?

注意:我可以使用 Python 遍历目录树并非常轻松地进行搜索和替换。我对稳健的技术感兴趣。事实上,我已经发布了一个自我回答,它使用 BeautifulSoup 来查找和替换 MathJax src 链接。这是我通常使用MathJax的方式,当然还有其他方式。


这是我用 Python 提出的第一个方法;不确定它的安全性或包容性。我首先写了一个函数叫update_mathjax。这使用BeautifulSoup找到<head>,然后搜索<script> whose src属性指向 MathJax CDN。如果找到它,它将替换src与更新的src并重写该文件。

from bs4 import BeautifulSoup as bs
old_cdn = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js'
new_cdn = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js'
def update_mathjax(filename):
    with open(filename, 'r+') as file_handle:
        file_contents = file_handle.read()
        soup = bs(file_contents, "html5lib")
        scripts = soup.find('head').find_all('script')
        for script in scripts:
            if script.attrs and 'src' in script.attrs:
                if script.attrs['src'][:49] == old_cdn:
                        q = script.attrs['src'][49:]
                        new_src = new_cdn + q
                        script.attrs['src'] = new_src
                        file_handle.seek(0)
                        file_handle.write(soup.prettify())
                        file_handle.truncate()
                        print('udated ' + filename)

这样,遍历目录树并应用该函数就相当容易了。

import os
for directory_name, subdirectory_list, filename_list in os.walk(os.getcwd()):
    for filename in filename_list:
        if filename[-5:] == ".html":
            update_mathjax(os.path.join(directory_name, filename))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 MathJax CDN 的相关文章

随机推荐

  • set/getAttribute 比较仅适用于字符串?

    我想设置一个span node s visited归因于true or false基于是否已被访问 test function test var el document createElement span el setAttribute
  • PHP 显示目录中的随机 n 张图像

    我想显示文件夹中随机的 n 张图像 目前我正在使用这个脚本来显示图像 div class item img src div 我只想要 10 个 或 n 个 图像 这太随机了 这个怎么做 The shuffle 方法将以随机顺序放置给定数组的
  • OpenShift 上的 PHP:如何启用错误和警告?

    我已将我的应用程序移至 OpenShift 现在 为了方便其实际工作 我想启用页内错误和警告 目前 我看到一个空白页面 如何启用错误 在 PHP 中 它位于php ini error reporting E ALL display erro
  • @Bean 和 @Autowired 之间的区别

    为什么我不能使用 Autowired在这种情况下 SpringBootApplication public class Application Autowired BookingService bookingService public s
  • 通过 Promise 实现 Debounce 功能

    我正在尝试实现一个与 JavaScript 中的 Promise 一起使用的去抖动函数 这样 每个调用者都可以使用 Promise 来使用 去抖动 函数的结果 这是迄今为止我能想到的最好的 function debounce inner m
  • 使用jquery按类获取父元素

    例如 我有以下 html 结构 div class message div div class msg button span class sms span div div div div span class sms span div d
  • 从另一个类调用一个类方法

    我想在 A 类的方法成员中更改 B 类的变量成员 例子 A h class A several other things void flagchange A cpp void A flagchange if human Bobj flag
  • intel手册中的x86_64操作码编码格式

    中列出的 Op En 格式是什么英特尔 x86 64 参考手册 例如在添加操作码我可以猜测一些 例如 I 立即 但是有这些的完整列表吗 的介绍部分英特尔第 2 卷手册解释如何阅读每个条目 3 1 1 4 指令汇总表中的操作数编码栏 操作数编
  • 打开 MediaPlayer - 线程中未处理的事件

    我正在尝试创建一个媒体播放器 使用 Media MediaPlayer 类 为此我使用一个线程来处理用户使用 OpenFileDialog 加载的歌曲 我正在使用下一个代码来开始处理歌曲 public static List
  • 如何使用 Postman 发送多部分/表单数据请求

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我目前正在使用 Chrome Addon Postman REST 客户端轻松创建 POST GET 请求 现在我想调试上传脚本 我是寻找一种将请求
  • 匹配所有文件/目录名称的最短 bash glob 模式/表达式是什么(包括以点开头的名称,但不包括 . 和 ..)

    I have extglob设置和dotglob unset 也产生 and 这通常是不希望的mv or cp 所以我不希望包含这些 我玩了一下发现 and ls A 给出想要的结果 但我认为应该有一个更简单的方法 我正在寻找一种在提示符下
  • 处理复制/粘贴或键入时 Eclipse 太滞后

    当我通过 Ctrl C Ctrl V 复制 粘贴或键入代码时 我的 Eclipse 相当延迟 3 4 秒来处理 有时 它会导致我的CPU负载达到100 我真的需要关于这个问题的建议 对于 OP 来说可能有点晚了 但我在使用 CTRL C C
  • 标准表达式中的数据类型不匹配

    我在 VB NET 中有一个项目 以 Ms Access 作为后端 将数据插入表时 查询和数据类型错误没有错误 但有时会发生 OleDB 异常 错误是 条件表达式中的数据类型不匹配 查询是 Dim cmdstr1 As String Dim
  • 在 R 中将向量中的每个元素复制不同时间[重复]

    这个问题在这里已经有答案了 假设我有一个数字向量v v lt 1 5 我想要rep v 1 by v 1 times v 2 by v 2 次 等等 期望的输出是 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 以下不起作用 有
  • LINQ 计数查询返回 1 而不是 0

    我有以下观点 CREATE VIEW tbl adjudicator result view AS SELECT a adjudicator id sar section adjudicator role id s section id s
  • 如何防止.NET 6中数字的小数部分自动四舍五入

    当我将版本从 NET Core 3 1转换为6 0后 我发现所有decimal 10 5 type 列会自动对数字的小数部分进行四舍五入 并以四舍五入的格式将其保存在数据库中 在 NET Core 的早期版本中它可以正常工作 例如 我有一个
  • 标记不同的图形、字体、大小 MATLAB

    I am trying to basically copy this graph for practice for my final coming up but I don t understand how to change the fo
  • 如何从对话框返回结果?

    我创建了一个对话框 一切都很好 除非我以某种方式返回结果 从对话框中获取用户选择的问题是我们不知道他 她何时会单击ok or cancel 我试图了解标准对话框是如何实现的 以便做类似的事情 我注意到所有打开对话框的功能 例如askdire
  • 按 dtype 选择 Pandas 列

    我想知道 Pandas DataFrames 中是否有一种优雅而快捷的方法来按数据类型 dtype 选择列 即从 DataFrame 中仅选择 int64 列 详细说明一下 类似于 df select columns dtype float
  • 更新 MathJax CDN

    正如官方宣布的那样 MathJax 将关闭其 CDN在 MathJax 网站上 and on StackExchange 的元数据 官方公告推荐了几种替代方案 包括使用替代 CDN 和自托管 对于有大量 MathJax CDN 引用的站点