omyg
(omyg)
1
遇到的问题
我从语雀导出的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语法还能解决不会因为标题重名导致跳转错误的方法也可以。
以上,感谢!
Probe
(Probe)
2
### 标题但是重名
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/)!
Probe
(Probe)
5
看了好半天, 我理解你可能是想表达这几个意思:
- 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标准"里的也有实用的东西
Probe
(Probe)
7
总结一下, 你说的是, Ob 应该支持 GFM 风格的 (自动 slugify) 链接, 不能仅支持 wikilink 风格的 (空格不转义) 链接 → 这个同意, 应该让用户自己选, 能把俩风格全兼容就更好了
也许有插件能做这事, 我找找的
“坚持markdown标准 … 尽可能地不依赖任何笔记软件” → 也即不用私有语法, 只采用社区共识标准
这我之前也这么想过, 但现在想法变了, 决定有啥好东西就先利用上, 我现在发现: 标准也是大家一起发展出来的, 关心规范标准, 不如为每个目的单独做优化:
- 如果笔记自用: md私有语法随便写
- 如果笔记自用, 且未来要换软件: 下个软件也应该支持插件, 也应该有良好的社区
- 如果笔记共享: 按照网页的规矩来
Probe
(Probe)
8
做了些功课, 先只讨论 “文件/小标题中的空格” (不管更复杂的 特殊符号, 变音符 之类)
当文件名 / 文件中小标题存在空格时, 目前看到各家是这么处理的:
-
Obsidian 编辑模式: 写链接时, 支持用空格也支持写成
%20
, 但不支持写成 -
-
Obsidian 阅读模式: 跟上面情况一样,
%20
被解码为空格
-
Obsidian 发布: 发布后的文件 url 和标题锚点, 空格统一转为
+
-
github: 文件名中的空格, 在 url 里转为
%20
, 小标题的空格, 在 url 里转为 -
-
维基社区: 无论页面名还是小标题的空格, 在 url 里统一转为
_
-
md文件的第三方发布: 各凭本事, 有些直接支持空格 slugify, 没有的就写插件
综合考虑, 我也感觉如果 “Ob 的链接, 无论写成空格还是dash还是 %20
, 都可以指向含空格的标题”, 是最方便的, 折腾比较小, 但目前没找到符合需求的插件
考虑现状, 如果需求是 Obsidian + github, 也许拿 git hooks 可以解决?