处理使用Markdown创建的帖子中的锚点

嘿社区,我正在使用一个 Discourse 站点来发布一些主要用 Markdown 编写的规范,但我遇到了一个问题:用于标题的锚点正在被渲染,而它们本应被隐藏。

有人知道有什么方法可以隐藏它们吗?

2 个赞

你好,欢迎!

这是来自 kramdown 还是 PHP Markdown Extra 的语法?

Discourse 依赖于 MarkdownIt,它基于 CommonMark 规范。它不支持指定标题 ID。

他们似乎曾经讨论过这个问题:https://talk.commonmark.org/t/anchors-in-markdown/247,但我没有看到任何明确的结论。

但是,Discourse 会自动生成锚点。
你可以在这里看到:

基本上,你可以预期这些 ID:

  • h-{headingId} (没有帖子 ID,没有 slug)
  • h-{slug}-{headingId} (没有帖子 ID)
  • p-{postId}-h-{headingId} (有帖子 ID,没有 slug)
  • p-{postId}-h-{slug}-{headingId} (有帖子 ID,有 slug)

例如:

如果你愿意,仍然可以用 HTML 手动创建一个锚点,例如:<a>


附加资源 –
如果你需要生成目录,可以使用这个组件:

5 个赞

非常感谢 @Arkshine

问题更多在于我们同时在 discourse 中发布其他用途的 markdown,因此维护文档的人员在将多个 markdown 合并到单个文档时,会使用这些锚点进行交叉引用。

我想我会编写一个脚本来在发布内容之前进行清理。

3 个赞

明白了!

解决方案也是为 Discourse 创建一个带有 markdown 插件的插件来支持此语法。如果您有预算,可以咨询 #marketplace。

@Nihokam

如果您仍然感兴趣,我制作了一个小型 Discourse 插件,可以处理在标题旁边指定锚点 ID。

它与 Discourse 的自动标题锚点协同工作。
请注意,它仅支持基本功能。可能有许多变体,但此插件仅支持以下内容:

## My Heading {#custom_section}

将生成:


<a name="custom_section" href="#custom_section" class="custom-anchor-id"></a>

您可以试试!如果您在使用过程中遇到任何问题,请告诉我。

2 个赞

感谢 @Arkshine

我会和我们的 discourse 管理员确认是否可以使用它 :grin:

1 个赞

@Arkshine 你知道 Discourse(当前网站)中的锚点是如何生成的吗?我问是因为它们似乎不遵循你分享的模式。例如,请看这个:

https://meta.discourse.org/t/adding-a-table-to-your-post-using-markdown/66544#creating-a-simple-table-1

对此有设置吗?我找不到。或者他们使用的是 <a>?还是你的插件?