如何链接到Multimarkdown中的命名锚点?


572

我提到了MultiMarkdown对内部链接/命名锚点的支持,但我找不到如何实际执行此操作的单个示例。

那么,表示命名锚点的语法是什么,与链接到任何其他URL相同的语法是什么(仅使用#foo代替http://....)?


如果要执行此操作以创建目录,则建议使用doctoc来自动执行此操作(需要node.js)。Doctoc生成markdown代码,因此它将提供一个示例,说明如何也链接到整个文档的标题(如@ user1789493的答案中所述)。
James Owers 2014年

Answers:


658

在标准Markdown中,将锚点<a name="abcd"></a>放置在要链接的位置,并在同一页面上用引用[link text](#abcd)

(出于此答案中说明的原因,它使用了name=而不是。)id=

[link text](http://...#abcd)当然可以使用远程引用。

只要您可以控制源文本和目标文本,这就像梦一样。锚甚至可以出现在标题中,因此:

### <a name="head1234"></a>A Heading in this SO entry!

产生:

该条目的标题!

我们甚至可以链接到它:

and we can even [link](#head1234) to it so:

(在SO上,该链接不起作用,因为锚点已剥离。)


11
@ jj1bdx我现在要做- <a id="id"></a>最好的形式。请参阅此SO问题/答案
史蒂夫·鲍威尔

斯蒂夫,很好。除了问题是关于MultiMarkdown之外,我将其标记为答案。显然,人们的投票表明这是一个有益的补充。那谢谢啦。
masukomi 2012年

3
Fyi:Github markdown希望您使用name =代替id。
Dieter

@Dieter:name=在XHTML中已被弃用,但现在我发现它id=在HTML5 中具有副作用,因此我将name=在此答案中回复。
史蒂夫·鲍威尔,

3
在github-flavored-markdown上工作(红宝石宝石按预期方式呈现)
Kedar Mhaswade

460

如果降价文件中包含标题,则可以直接在文件中链接它们。

降价标题-

## The Header

这将生成一个隐式id #the-header(用连字符替换内部空格并使其小写)。

要导航至此ID,您可以创建如下链接:

[Link to Header](#the-header)

这等效于:

<a href="#the-header">Link to Header</a>

请注意,引用的名称是小写字母#header


30
BitBucket似乎在锚点ID的前面加上“ markdown-header-”。因此,如果标题是## This Header ##,则链接为[To This Header](#markdown-header-this-header)。如果不确定标题的ID是什么,请使用页面检查器查看HTML值。
温尼·凯利2014年

在Pandoc扩展Markdown中对我不起作用,可能在其他地方起作用。
Zelphir Kaltstahl 2015年

9
@SaurabhM仅在您对HTML转换器的减价不遵守标准的情况下才有效。该标准不会创建定位标记。现在,许多人不遵守,但是您不应该期望它在任何地方都能奏效。
masukomi

9
为什么?为什么我们必须将Markdown 标准化标准不足和半熟的东西。等不及AsciiDoc带头。
hmijail哀悼辞职者

1
GitHub在标题名称之前添加用户内容:[Link](user-content-the-header)
Melvin Witte

137

摘自 Multimarkdown 用户指南》(感谢Twitter上的@MultiMarkdown指出)

[Some Text][]将链接到名为“ Some Text”的标题,
例如

### Some Text ###

您可以选择使用一个可选标签来帮助消除多个标题具有相同标题的情况的歧义:

### Overview [MultiMarkdownOverview] ##

这使您可以使用[MultiMarkdownOverview]专门引用本节,而不能使用另一个名为Overview的节。这适用于atx或settext样式的标头。

如果您已经使用与标头使用的相同ID定义了锚,则定义的锚优先。

除了文档中的标题外,您还可以提供图像和表格的标签,然后也可以将它们用作交叉引用。


FWIW,从23.4.1开始,它不适用于emacs的markdown模式。
阿提拉·伦德瓦

5
Markdown不支持脚注。因此,它不适用于大多数“降价”模式。但是,MultiMarkdown支持许多扩展,使编写者的工作更加轻松。
masukomi 2012年

11
Github似乎不支持标题中的标签?
andig

1
当标题中有“:”时,这将不起作用(至少在codepen.io上)。
小鹏-ZenUML.com 2015年

2
该链接是写MultiMarkdown的那个人的文档。不知道您在codepen.io中做什么,但是我相信文档是准确的。请记住,多重降价而不是降价。
masukomi 2015年

100

我测试了Github Flavored Markdown一段时间,可以总结出以下四个规则:

  1. 标点符号将被删除
  2. 前导空格将被删除
  3. 大写将转换为小写
  4. 字母之间的空格将转换为 -

例如,如果您的部分命名为:

## 1.1 Hello World

以这种方式创建指向它的链接:

[Link](#11-hello-world)

如果名称中有连字符怎么办?它转换成什么?请注意,单词和连字符之间有空格。例如:```-[My-Header](#my --- header)#My-Header```正确吗?
Spencer Pollock

有关此样式的术语,请访问stackoverflow.com/a/17820138/2908724。我更喜欢“烤肉包”。
主教

22

创建内部链接(与节相关)的最佳方法是创建列表,但如果标题中包含空格,则使用#section或#section-title代替链接。

----降价------------------------

Go to section
* [Hello](#hello)  
* [Hello World](#hello-world)
* [Another section](#new-section)    <-- it's called 'Another section' in this list but refers to 'New section'


## Hello
### Hello World
## New section

----列表预览------------------------

Go to section
Hello              <-- [Hello](#hello)                 -- go to `Hello` section
Hello World        <-- [Hello World](#hello world)     -- go to `Hello World` section
Another section    <-- [Another section](#new-section) -- go to `New section`

---- HTML ------------------------

<p>Go to section</p>
<ul>
<li><a href="#hello">Hello</a><br />
</li>
<li><a href="#hello-world">Hello World</a></li>
<li><a href="#new-section">Another section</a> &lt;– it’s called ‘Another section’ in this list but refers to ‘New section’</li>
</ul>
<h2 id="hello">Hello</h2>
<h3 id="hello-world">Hello World</h3>
<h2 id="new-section">New section</h2>

不管是h1,h2,h3等标头,您始终只能使用一个引用它#
如上例所示,节列表中的所有引用都应转换为小写文本。

链接到小节。否则它将无法正常工作。
该技术对所有Markdown变体以及MultiMarkdown都非常有效。

目前,我正在使用Pandoc转换文档格式。它比MultiMarkdown好得多。
在这里测试Pandoc


6
如此处其他评论所述。在实际上遵循该标准的markdown-> html转换器中将无法使用。在标题中创建锚标记仅在某些转换器中发生。此外,它们不会全部将空格转换为破折号。这不能指望。
masukomi

1
我在Atom代码编辑器中使用GitHub Markdown,该代码编辑器具有一个名为“ Markdown Preview”的内置包。在预览模式下,我使用上下文菜单“另存为HTML ...”创建html文件。
rafr3

是的,我的观点是,您不能指望您在其他任何地方都可以使用的技术,问题和答案都不会专门针对Atom中的降价。问题甚至与Markdown无关,而与MultiMarkdown有关。
masukomi

我正在使用此链接方法,但不适用于我。不滑动到该部分/该标题。
Tom Kustermans '16

注意区分大小写。如果定义a ## Hello,则应将其称为[Whatever you want](#Hello)
Victor Augusto

9

在mdcharm中是这样的:

* [Descripción](#descripcion)
* [Funcionamiento](#funcionamiento)
* [Instalación](#instalacion)
* [Configuración](#configuracion)

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}

2

这是我的解决方案(来自SaraubhM的答案)

**Jump To**: [Hotkeys & Markers](#hotkeys-markers) / [Radii](#radii) / [Route Wizard 2.0](#route-wizard-2-0)

这给你:

跳转到:热键和标记/ Radii / Route Wizard 2.0

注意从变化.-和也的损失&中的链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.