在markdown中交叉引用(命名锚)

是否有减价语法等价于:

Take me to <a href="#pookie">pookie</a>


...


<a name="pookie">this is pookie</a>
335111 次浏览

在最初的Markdown语法中没有现成的语法来做到这一点,但是额外减记提供了一种方法,至少可以将id分配给标题-然后可以轻松地链接到标题。还要注意,您可以在Markdown和Markdown Extra中使用常规HTML,并且在最新版本的HTML中,name属性已经被id属性所取代。

Take me to [pookie](#pookie)

应该是正确的markdown语法,以跳转到名为pookie的锚点。

要插入一个锚点,请使用HTML:

<a name="pookie"></a>

Markdown似乎并不介意你把锚点放在哪里。一个放置它的有用位置是在头文件中。例如:

### <a name="tith"></a>This is the Heading

工作得很好。(我在这里演示,但SO的渲染器剥离了锚。)

注意自关闭标签和id=name=

本文的早期版本建议使用<a id='tith' />,使用XHTML的自关闭语法,并使用id属性而不是name

XHTML允许任何标记为“空”和“自闭”。也就是说,<tag /><tag></tag>的简写,是一对带有空主体的匹配标记。大多数浏览器接受XHTML,但有些不接受。为了避免跨浏览器的问题,按照上面的建议,使用<tag></tag>显式地关闭标记。

最后,属性name=在XHTML中已弃用,所以我最初使用了id=,每个人都能认出它。然而,HTML5现在在使用id=时在JavaScript中创建了一个全局变量,这可能不是你想要的。因此,现在使用name=可能更加友好。

(感谢Slipp道格拉斯向我解释XHTML, 能手指出HTML5的副作用-查看评论和能手回答了解更多细节。name=似乎在任何地方都可以工作,尽管它在XHTML中已被弃用。)

使用name。在HTML 5中使用id是不必要的,它会在JavaScript中创建全局变量

请参阅HTML 5规范,5.9.8导航到片段标识符 -同时使用idname

重要的是要知道大多数浏览器仍然将id转换为全局变量。这是# EYZ2。使用name可以避免创建全局变量和可能导致的任何冲突。

使用名称的示例:

Take me to [pookie](#pookie)

和目的锚点:

### <a name="pookie"></a>Some heading

在bitbucket.org上投票的解决方案行不通。相反,当使用标题(使用##)时,可以将它们作为锚点引用,将它们作为#markdown-header-my-header-name作为前缀,其中#markdown-header-是由渲染器生成的隐式前缀,其余是小写标题,用破折号代替空格。

例子

## My paragraph title

会产生这样的隐式锚

#markdown-header-my-paragraph-title

在每个锚引用之前的整个URL是可选的,即。

[Some text](#markdown-header-my-paragraph-title)

相当于

[Some text](https://bitbucket.org/some_project/some_page#markdown-header-my-paragraph-title)

前提是它们在同一页上。

来源:https://bitbucket.org/tutorials/markdowndemo/overview(编辑这个.md文件的源代码,看看锚是如何制作的)。

虽然迟到了,但我认为这个添加可能对使用rmarkdown的人有用。在rmarkdown中,有内置的文档头引用支持。

定义的任何头

# Header

可由

get me back to that [header](#header)

下面是一个最小的独立的.rmd文件,它展示了这种行为。它可以编织成.pdf.html

---
title: "references in rmarkdown"
output:
html_document: default
pdf_document: default
---


# Header


Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text.


Go back to that [header](#header).

对于大多数常见的降价生成器。在每个头文件中都有一个简单的自生成锚。例如,使用pandoc,生成的锚将是头部的一个烤肉盒段。

 echo "# Hello, world\!" | pandoc
# => <h1 id="hello-world">Hello, world!</h1>

取决于您使用的markdown解析器,锚可以改变(以symbolrush和La muerte Peluda回答为例,它们是不同的!)。看到这个babelmark,你可以看到生成的锚这取决于您的markdown实现

使用最新的Markdown,你应该能够使用以下语法:

# EYZ0

这将创建以下HTML:

# EYZ0

如果你想要锚点有文本,只需在方括号内添加锚点文本:

# EYZ0

减价锚支持hashmark,因此页面中指向锚的链接就是[Pookie](#pookie)

在Gruber Markdown中实际上不支持生成锚,但在其他实现中支持,例如额外减记

在Markdown Extra中,锚点ID被添加到标题或子标题中,使用{#pookie}

在Git存储库页面中Github调味Markdown(但在gist中没有)自动生成锚,在所有头部(h1, h2, h3等)上都有几个标记标记,包括:

  • # EYZ0
  • # EYZ0
  • # EYZ0
  • aria-hidden="true"(用于鼠标悬停时显示的svg链接图标)

除了咏叹调/svg图标,当有人写道:

  • # EYZ0

Github生成:

  • # EYZ0

因此,一个人不需要做任何事情来创建头链接,并且总是可以链接到它们:

  • 链接到[Header Title](#header-title)

对于在GitBook中寻找此问题解决方案的任何人。这就是我如何使它工作(在GitBook)。你需要显式地标记你的标题,像这样:

# My Anchored Heading {#my-anchor}

然后像这样链接到这个锚

[link to my anchored heading](#my-anchor)

解决方案和其他示例可以在这里找到:https://seadude.gitbooks.io/learn-gitbook/

对于头部包含表情符号的情况,我将快速补充,在这种情况下,只需删除引用链接中的表情符号就更简单了。例如

# ⭐ Title 2
....
[Take me to title 2](#-title-2)

在某些情况下,由于一些奇怪的原因,这种方法不起作用,例如设置中的在这里。这种情况下的解决方案是包括表情符号的整个代码。

正如我们所看到的(从答案中),这没有标准的方法;不同的降价处理器在提供这种可能性的降价扩展方面会有所不同。

使用pandoc,你可以得到你想要的:

Take me to [pookie](#pookie)


...


[this is pookie]{#pookie}

这给出了(通过pandoc-2.9.2.1):

<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p><span id="pookie">this is pookie</span></p>

我们也可以用一个锚id创建一个空span:

Take me to [pookie](#pookie)


...


this is pookie []{#pookie}

这将产生:

<p>Take me to <a href="#pookie">pookie</a></p>
<p>…</p>
<p>this is pookie <span id="pookie"></span></p>

除此之外,对于pandoc和对于大多数常见的降价生成器,在每个报头中都有一个简单的自生成锚。(请参阅此处和其他答案,以方便地(自动)生成和引用此类锚。)

对于任何喜欢使用不同级别的头文件的人来说,注意到头文件的链接应该只使用单个#,不管头文件的级别是什么:

# This is an H1
## This is an H2
### This is an H3
...
[Take me to H3](#this-is-an-H3)
[Take me to H1](#this-is-an-H1)
[This won't work](##-this-is-an-H2)