diff --git a/input.css b/input.css
index 42bcbef..95df0ea 100644
--- a/input.css
+++ b/input.css
@@ -445,6 +445,69 @@
margin-bottom: 0;
}
+ /* 脚注引用上标:[^id] 渲染成的 。
+ * line-height: 0 防止上标撑高所在行行高;font-size 缩小为 0.75em。 */
+ .md-content .fn-ref {
+ font-size: 0.75em;
+ line-height: 0;
+ vertical-align: super;
+ margin-inline-start: 0.1em;
+ }
+
+ /* 引用数字链接:不加下划线(上标下划线极难看),用 accent 色区分。 */
+ .md-content .fn-ref-link {
+ text-decoration: none;
+ color: var(--color-paper-accent);
+ }
+
+ .md-content .fn-ref-link:hover {
+ color: var(--color-paper-accent-2);
+ }
+
+ /* 脚注定义块:仿 blockquote 的左侧边框视觉语言,但更轻(0.2rem + 稍小字号)。 */
+ .md-content .footnote-definition {
+ margin: 1rem 0;
+ padding-inline-start: 1rem;
+ border-inline-start: 0.2rem solid var(--color-paper-content);
+ font-size: 0.875em;
+ color: var(--color-paper-secondary);
+ }
+
+ .md-content .footnote-definition:last-child {
+ margin-bottom: 0;
+ }
+
+ /* 定义内末段去底距,避免与 back-link 间距过大。 */
+ .md-content .footnote-definition > p:last-child {
+ margin-bottom: 0;
+ }
+
+ /* 定义编号上标:与正文引用数字呼应。 */
+ .md-content .footnote-definition-label {
+ font-size: 0.75em;
+ line-height: 0;
+ vertical-align: super;
+ margin-inline-end: 0.25em;
+ color: var(--color-paper-tertiary);
+ }
+
+ /* 返回正文链接:↩ 符号,弱色,hover 转 accent。 */
+ .md-content .fn-backref {
+ margin-inline-start: 0.25em;
+ text-decoration: none;
+ color: var(--color-paper-tertiary);
+ }
+
+ .md-content .fn-backref:hover {
+ color: var(--color-paper-accent);
+ }
+
+ /* 多引用时的数字上标(↩² 中的 ²)。 */
+ .md-content .fn-backref-num {
+ font-size: 0.75em;
+ vertical-align: super;
+ }
+
.md-content ol,
.md-content ul {
padding-inline-start: 1.25rem;
diff --git a/src/api/markdown.rs b/src/api/markdown.rs
index 0588d4b..d577357 100644
--- a/src/api/markdown.rs
+++ b/src/api/markdown.rs
@@ -40,7 +40,17 @@ pub fn render_markdown_enhanced(md: &str) -> RenderedContent {
// 两遍遍历使用相同的 Options 与同一份解析结果,避免 TOC 收集与正文渲染对
// Markdown 扩展语法(表格、删除线、脚注等)的处理不一致。
- let opts = Options::all();
+ //
+ // 脚注模式:pulldown-cmark 的 ENABLE_OLD_FOOTNOTES = (1<<9)|(1<<2),它把
+ // ENABLE_FOOTNOTES 的 bit 也打进了 OLD 的位掩码里。Options::all() 同时置两者,
+ // 使 has_gfm_footnotes()(=ENABLE_FOOTNOTES && !ENABLE_OLD_FOOTNOTES)返回 false,
+ // 走 OLD 模式(续行宽松、label 可含换行)。我们想要 GFM 模式(与 GitHub 一致、
+ // 解析可控),所以不能简单地 remove(OLD)——那会连 ENABLE_FOOTNOTES 一起清掉。
+ // 正确做法:先 remove(OLD)(清掉 bit 9 + bit 2),再 insert(ENABLE_FOOTNOTES)
+ // 单独把 bit 2 加回,使 has_gfm_footnotes() = true。
+ let mut opts = Options::all();
+ opts.remove(Options::ENABLE_OLD_FOOTNOTES);
+ opts.insert(Options::ENABLE_FOOTNOTES);
// pulldown-cmark 只解析一次,collect 成 Vec