Axi's Blog

Back

为 Astro 博客添加 Markdown 脚注支持Blur image

前言#

在写技术博客或学术文章时,脚注是一个非常有用的功能。它可以让我们在不打断正文流畅性的前提下,提供额外的信息、引用来源或补充说明。因为最近打算写一些 Talk 类型的内容,所以需要引用一些 Paper,所以需要添加脚注支持。

简单研究了一下如何操作,因此介绍下如何在 Astro 博客中添加 Markdown 脚注支持。

什么是 Markdown 脚注#

Markdown 脚注使用 [^标识符] 的语法来创建引用,然后在文档的任意位置(通常在末尾)定义脚注内容。例如:

这是正文内容[^1],这里还有一个脚注[^note]。

[^1]: 这是第一个脚注的内容。
[^note]: 这是一个有名称的脚注。

安装必要的依赖#

首先,我们需要安装 remark-gfm 插件,它提供了 GitHub Flavored Markdown 的支持,包括脚注功能:

# 使用 npm
npm install remark-gfm

# 使用 yarn
yarn add remark-gfm

# 使用 pnpm
pnpm add remark-gfm

# 使用 bun
bun add remark-gfm

配置 Astro#

接下来,我们需要修改 astro.config.mjs 文件来启用脚注支持。

基础配置#

import { defineConfig } from 'astro/config'
import remarkGfm from 'remark-gfm'

export default defineConfig({
  markdown: {
    remarkPlugins: [remarkGfm],
  },
})

自定义脚注样式#

为了让脚注更符合中文用户的习惯,我们可以自定义脚注的标签和返回链接:

import { defineConfig } from 'astro/config'
import remarkGfm from 'remark-gfm'

export default defineConfig({
  markdown: {
    remarkPlugins: [remarkGfm],
    remarkRehype: {
      footnoteLabel: '脚注',
      footnoteBackLabel: '返回内容',
      footnoteBackContent: '↑'
    },
  },
})

配置选项说明:

  • footnoteLabel: 脚注区域的标题(对屏幕阅读器友好)
  • footnoteBackLabel: 返回链接的无障碍标签
  • footnoteBackContent: 返回链接显示的符号

完整配置示例#

如果你的博客已经有其他 remark 和 rehype 插件,完整的配置可能看起来像这样:

import { rehypeHeadingIds } from '@astrojs/markdown-remark'
import { defineConfig } from 'astro/config'
import rehypeKatex from 'rehype-katex'
import remarkMath from 'remark-math'
import remarkGfm from 'remark-gfm'

export default defineConfig({
  markdown: {
    remarkPlugins: [remarkMath, remarkGfm],
    rehypePlugins: [
      [rehypeKatex, {}],
      rehypeHeadingIds,
      // 其他 rehype 插件...
    ],
    remarkRehype: {
      footnoteLabel: '脚注',
      footnoteBackLabel: '返回内容',
      footnoteBackContent: '↑'
    },
  },
})

脚注语法示例#

基本脚注#

这是一个包含脚注的句子[^1]。

[^1]: 这是脚注的内容。

具名脚注#

这里引用了一篇论文[^paper2024]。

[^paper2024]: 张三, 李四. "关于某某技术的研究". 技术期刊, 2024.

多行脚注#

这是一个复杂的脚注引用[^complex]。

[^complex]: 这个脚注包含多行内容。
    
    它可以包含:
    - 列表项
    - 代码块
    
    ```javascript
    console.log("脚注中的代码");

甚至多个段落。


### 内联脚注

GitHub Flavored Markdown 还支持内联脚注:

```markdown
这是一个内联脚注^[内联脚注的内容直接写在这里]。

注意事项#

开发服务器重启#

重要提示:当你修改 astro.config.mjs 文件后,需要重启开发服务器才能使配置生效。这是因为配置文件的更改涉及到 Astro 的构建流程,无法通过热重载来更新。

脚注标识符#

  • 脚注标识符可以是数字、字母或组合
  • 标识符区分大小写
  • 建议使用有意义的标识符,特别是在长文档中

无障碍性#

脚注功能已经内置了无障碍性支持:

  • 使用 aria-describedby 属性链接脚注引用和脚注内容
  • 提供了对屏幕阅读器友好的标签
  • 支持键盘导航

高级自定义#

自定义返回符号#

你可以使用各种符号作为返回链接:

footnoteBackContent: '↑'     // 简洁向上箭头
footnoteBackContent: '⤴'     // 弯曲箭头  
footnoteBackContent: '🔝'    // 表情符号
footnoteBackContent: '返回'   // 中文文字

实际应用示例#

在技术博客中,脚注特别适用于:

  1. 引用来源:学术论文、技术文档的引用1
  2. 补充说明:不影响主要内容流的额外信息2
  3. 版本说明:特定技术版本的注释3
  4. 相关链接:相关但非必要的外部资源4

总结#

通过添加脚注支持,我们的 Astro 博客现在具备了更专业的文档撰写能力。脚注不仅让内容更加丰富,还保持了正文的简洁性。记住在修改配置后重启开发服务器,就可以开始在你的博客文章中使用这个强大的功能了。


脚注#

  1. 例如引用技术规范、RFC 文档等权威来源。

  2. 比如技术细节、历史背景、替代方案等。

  3. 如 “此功能在 Node.js 16+ 中可用” 之类的版本特定信息。

为 Astro 博客添加 Markdown 脚注支持
https://axi404.top/blog/add-footnote
Author 阿汐
Published at June 3, 2025
Comment seems to stuck. Try to refresh?✨