obsidian无法使用html格式的锚点跳转

遇到的问题

我从语雀导出的markdown文件,在obsidian中无法实现页内跳转的功能,但是在typroa和logseq中都可以正常跳转,想问一下这是obsidian本身就不支持,还是我哪里设置出现了问题?如何解决?

具体测试内容如下:
源文件:

# 方式一、a name标签跳转

<a name="Abcd">测试1</a>
1
1
1
1
1
[跳转到测试1](#Abcd)

代码效果:

方式一、a name标签跳转

测试1
1
1
1
1
1
跳转到测试1

实际测试时,obsidian会提示“Unable to find section #Abcd”,报错如下图:

预期的效果

希望可以像使用typroa一样可以识别这些html格式的锚点

已尝试的解决方案

如果有其他插件可以实现这个效果也可以。
在一个markdown中,相同名称的二级标题或者三级标题有时候是不可避免的,如果各位大佬有什么使用纯makrdown语法还能解决不会因为标题重名导致跳转错误的方法也可以。

以上,感谢!

### 标题但是重名

blabla

### 标题但是重名 ^title2

blabla2


---

[跳转测试](#标题但是重名)
[跳转测试](#^title2)

你看这方法可以吗?

哇,真的可以诶,谢谢大神!

终于有人提出了这问题。html方式的锚点应该是markdown的固有功能–markdown实则是html的“快捷表达”方式,所以在markdown中使用html标签是没问题的,虽然这违反了markdown什么xxx原则,但有时不得不用(不管任何原则都应该服务于使用,而不是为坚持原则而坚持原则),而恰恰OB不支持,真是有点搞笑。markdown中使用html标签的锚点,最主要的还不是标题重名,更多且更重要的,是为了是解决中英文混排标题所出现的麻烦–中英文混排,如果中间存在空格,而更要命的是英文还存在大小写混用,那麻烦就非常大了,因为这种情况在markdown渲染成html页面时,都存在锚点转换生成上的bug(所以网上很多资料都说中英文混排标题最好不要使用空格),而且在ob中空格会使用ASII码"%20"代替,这与github转换空格使用"-"来代替存在冲突,所以使用html标签id或name属性来设置锚点,是解决这个麻烦的最有效的方案,而ob竟然不支持,实属非常不应该–当然有人会辩解说,这种方式可能会影响到双链什么的,但问题是,以markdown为基础建立的笔记软件,首要功能目标就应该是完全实现markdown本身固有的功能,然后再去构建自身特色功能,除非像思源笔记那样“废”了markdown。个人觉得OB,再加多功能,不如强化markdown固有功能,不是每个用OB的人都用到那些“花里胡哨”的高级功能,有很多人只是把OB当成一个高级markdown编辑器来用–别跟我扯什么“第二大脑”的话题,扯这些的人在我看来大都是有点“走火入魔了”(建议这些有点魔怔的朋友看下这个视频:https://www.bilibili.com/video/BV1J54y1g78Y/)!

看了好半天, 我理解你可能是想表达这几个意思:

  • markdown实为html简写版, md应兼容html标签写法
  • 笔记标题经常会有中英空格混排, 此时Ob自动给转换的标题有编码bug, 所以手工指定name锚点很有必要, 但Ob居然不支持手工写name href
  • 基于markdown的笔记软件应完全实现md固有特性, OB同理应完整支持md, 不要先搞奇怪的自定义特性

我的理解:

“md应兼容html标签写法” → 基本赞同

“中间存在空格 … 渲染成html页面时,存在锚点转换生成上的bug … ob中空格会使用ASII码%20代替” → 这不叫bug, 叫 HTML URL encoding

事实上, 如果为了转换为 HTML 后有锚点, 仍然可以在Ob里写 <a name="mytitle" ></a> 之类的东西
特定的 [#^label] 语法, 是为了Ob里能更懒的实现这功能

“个人觉得OB,再加多功能,不如强化markdown固有功能” → 其实还是看需求, "md原生标准"里有许多价值不大的东西, "不在md标准"里的也有实用的东西

我没说%20是bug,而这种url编码转换在github中是存在冲突的,因为github中是使用"-“来代替空格(因为github中对markdown转换成html的标签时,默认情况标签的id及href两属性的属性值是使用标题名,而碰到标题中存在空格,则使用”-"来代替)。而且这个问题是非常复杂的,抛开ob,单markdown本身因为中英大小写混排都存在转换上的问题,不要说ob还有自己一套渲染转换标准,更是问题重重(还有,我虽然在标题上手工写html标签,但一般不会直接使用标签,我用的是标题 这种方式,github或其他markdown转换器会自动将其转换成标签)。就是因为markdown本来存在这个问题,才产生了使用html标签来给标题一个绝对的id来作锚点的需求,以此来规避markdown标题在转换时可能出现的“麻烦”。这本来就是markdown本身就应该有的功能,或者这么说,这是html本身的功能,markdown支持这种方式理所当然,而ob既然使用markdown作为笔记存储格式,那顺理成章地也应当支持,何况“价值大不大”不是任何人可以评判的(就跟几十年前,非常流行割扁桃体和盲肠一样,觉得哪两货没太大用就给割了,简直就是扯蛋)。再说了,因为markdown标题本身在转换时存在各种麻烦,所以手工使用html标签设定标题锚点,来精确定位,这是在中文环境下使用markdown的刚需,所以价值不大根本是睁眼说瞎话,何况众多markdown编辑软件都支持,而你这么强大的,以markdown为文本的笔记软件,竟然不支持,这简直就是非常荒谬。

还有,坚持markdown标准还有一个重要的目的,就是笔记文本其可阅读或可展示性,尽可能地不依赖任何笔记软件,我的笔记脱离了ob后,大部分内容仍能正常阅读及显示,即笔记文本尽可能地与ob“解耦合”(很多非markdown标准的用法,脱离ob后,就废了)–为此,我在ob使用上非常的克制,像设置上,从来都将那什么wiki链接样式关掉,也基本不用文本块链接。

总结一下, 你说的是, Ob 应该支持 GFM 风格的 (自动 slugify) 链接, 不能仅支持 wikilink 风格的 (空格不转义) 链接 → 这个同意, 应该让用户自己选, 能把俩风格全兼容就更好了

也许有插件能做这事, 我找找的


“坚持markdown标准 … 尽可能地不依赖任何笔记软件” → 也即不用私有语法, 只采用社区共识标准

这我之前也这么想过, 但现在想法变了, 决定有啥好东西就先利用上, 我现在发现: 标准也是大家一起发展出来的, 关心规范标准, 不如为每个目的单独做优化:

  • 如果笔记自用: md私有语法随便写
  • 如果笔记自用, 且未来要换软件: 下个软件也应该支持插件, 也应该有良好的社区
  • 如果笔记共享: 按照网页的规矩来

做了些功课, 先只讨论 “文件/小标题中的空格” (不管更复杂的 特殊符号, 变音符 之类)

当文件名 / 文件中小标题存在空格时, 目前看到各家是这么处理的:

  • Obsidian 编辑模式: 写链接时, 支持用空格也支持写成 %20, 但不支持写成 -
  • Obsidian 阅读模式: 跟上面情况一样, %20 被解码为空格
  • Obsidian 发布: 发布后的文件 url 和标题锚点, 空格统一转为 +
  • github: 文件名中的空格, 在 url 里转为 %20, 小标题的空格, 在 url 里转为 -
  • 维基社区: 无论页面名还是小标题的空格, 在 url 里统一转为 _
  • md文件的第三方发布: 各凭本事, 有些直接支持空格 slugify, 没有的就写插件

综合考虑, 我也感觉如果 “Ob 的链接, 无论写成空格还是dash还是 %20, 都可以指向含空格的标题”, 是最方便的, 折腾比较小, 但目前没找到符合需求的插件

考虑现状, 如果需求是 Obsidian + github, 也许拿 git hooks 可以解决?