0%

不会公众号外链转脚注?chatGPT 来帮忙

在公众号上发布过文章的朋友应该知道,公众号文章是不允许外链。为了书写严谨,给读者提供完整信息,大家想了很多种方法,其中最常用的方法是将外链转换为脚注,即有链接的地方编辑一个数字序号,在文章最末放置参考文献区域,将对应序号的链接展示出来。

显然手工编写脚注是费时费力容易出错且不易维护的,于是出现了很多类似 Mdnice 的转换工具,将 Markdown 格式的内容,转换为可以直接粘贴到公众号里的样式。

但是这样还是需要将写好的文章内容搬迁好几遍,如果出现问题就必须重来。而且大部分流行的编辑器,比如VSCodeTypora 都没有这个功能。

笔者被困扰了很久之后,终于在 ChatGPT 的帮助下很好的解决了这个问题。现在仅通过 Typora 就可以直接生成适应公众号的文章了。

解决方案

先上干货。

这个方法不仅可以用在 Typora 中,也可以用在其他 html 文件中。

首先从 wechat-footnote 仓库中下载代码文件,下面分别说明:

Typora

  1. 打开 Typora,点击菜单栏 文件 偏好设置,打开 偏好设置 页面;
  2. 在左侧列表菜单中点击 导出,右侧会显示 Export 配置栏;
  3. 选择配置栏左侧的 HTML
  4. 复制 reference.html 文件中的内容,粘贴到 在 <head /> 中添加 的输入框中;
  5. 点击右上角 X 关闭设置页面,完成配置;

编辑完文章后,点击 文件 导出,选择 HTML,导出 html 文件。

打开导出的文件,就会看到类似效果:

Html

只要编辑一下 html 文件就可以了,即复制仓库代码中 reference.html 文件的内容,粘贴到 html 文件的 head 标签中就行。

保存后,用浏览器打开 html 文件,即可查看效果。

虽然简单,但需注意

脚本中,插入脚注的元素为 #write,即 Typora 中的内容块,请根据目标 html 文件内容块标记修改插入目标元素选择方式,如用 .content 等。

实现原理

如果只是应用,读到此就可以结束了。

下面聊一下此功能是如何实现的,有兴趣的或者有个性话需求的读者可以继续。

思路

最初想从 markdown 文件本身解决,Typora 确实支持脚注,但写起来比较麻烦,不仅要在链接的地方明确标记,还需要在文章末尾明确地写注脚。最主要的是,这种方式消除不了链接属性,即不符合公众号文章要求。

然后就是写个 Python 脚本,将 markdown 中的链接替换成脚注,但 markdown 语法并不支持脚注,即使替换掉,为了渲染的效果也常常会不尽人意。

比起生写 Python,更好的选择是 Pandoc,它是专为文档格式转换而生的,能很好地定制的将 markdown 转换为 html 格式的,那么实现脚注应该不在话下。但是需要学习 Lua 脚本,感觉还是挺陡峭的,研究了一下就放弃了。

最后又想到是否可以通过 CSS 来解决,就问了下 ChatGPT ,还真给出了一个解决方案:

总体来说,是通过元素的数据属性,以及伪类将链接的 url 显示出来,例子中的效果是鼠标放在链接上会显示出链接的 url,显然是不合适的。

不过当我说出我想要的脚注样式后,ChatGPT 说,需要借助脚本来实现:

这个简单的提示,突然让我意识到,可以对转换成 html 的内容用 js 进行修改,扩展成我想要的效果!

因为并没有改变内容本身,所以不影响文章在其他平台的发布,简直是太棒了。

于是开始做可行性研究。

可行性分析

首先需要确认 Typora 如何嵌入 js 脚本,发现在导出设置中可以往目标 html 代码中插入代码,于是做了几次尝试,发现没有问题。

然后,需要确认 js 真的可以将 html 改成我想要的样子吗?于是不断的向 ChatGPT 提问,比如 JS 如何查找页面中的所有链接,如何读取链接结点的属性,以及能不能将链接元素换成 span 等等。不断的探索中,我确认了这个方法是可行的。

最后就是如何设置脚注的样式,这个相对好办,因为我见过我想要的脚注样式,一个是阮一峰老师的网络日志,另一个是 mdnice 的,浏览页面,提取样式即可。

到此就可以确认方案可行了。

研发与调试

研发阶段相对简单,就是将可行阶段的成果进行分类,融合,集成。

最后得到了三个主要功能,分别是:

  1. 创建脚注元素:CreateFootnoteItem
  2. 替换链接:replaceLink
  3. 创建脚注块:CreateFootnote

主要方法是,创建元素,设置属性,加入到 DOM树中。

元素的类型和设置,参考 Mdnice 的方式,比如脚注元素是:

1
2
3
4
<span id="fn1" class="footnote-item">
<span class="footnote-num">[1] </span>
<p>百度: <em>https://www.baidu.com</em></p>
</span>

另一方面就是样式了,大部分参考 mdnice 的样式,为了能与 Typora 融合,做了适当的调整,比如取消了 #nice,取消了颜色属性,修改了元素间距等等。

需要注意的是,为了让 Typora 的样式与脚注匹配,将一下脚注样式定义在了 Typora 的用户样式中了,这样做是方便以后 Typora 样式调整时,也一并修改脚注元素的样式。

整体代码已经放在了 GitHub 的 wechat-footnote 中了,请参考。

Typora

顺便简要介绍一下 Typora。

Typora是一款简洁易用的文本编辑器,主要用于Markdown文件的编辑和排版。

它采用所见即所得的编辑方式,让用户可以直观地看到最终格式的效果,同时支持实时预览。

Typora的界面简洁美观,操作也非常方便,支持快捷键实现各种常用功能,如插入图片、表格等。

此外,Typora还提供了丰富的主题和排版样式,用户可以根据自己的偏好自行选择。

同时 Typora 有丰富的扩展功能,可以将其按照自己的喜好和习惯,打造成专属的编辑工具。

虽然开启全部功能需要付费,但是真的是物超所值,并且一次购买多端可用,终生有效。

赶紧来试试吧!

总结

AI 确实在改变这个世界,而且是以极快的速度的。有了 ChatGPT 就好像有一位不多位能力超强知识渊博的专家,无论什么问题,都能找到答案,至少是一个提示。

借助 AI,实现代码就容易多了,原本需要花大量的时间从网上、书中学习和搜寻,现在能直接得到答案。生产效率提高了很多。

其实今天的问题困扰我很久,但是总是感觉有方法何必费劲呢?即使去实现也特别畏难。所以现在一天就能解决,主要是借助 AI 的力量。

笔者的水平有限,文章中难免出现各种错误和问题,恳请读者不吝批评、指正。十分感谢!

比心!