Wie verlinke ich zu einem benannten Anker in Multimarkdown?


573

Ich bin auf eine Reihe von Erwähnungen der Unterstützung von MultiMarkdown für interne Links / benannte Anker gestoßen, kann jedoch kein einziges Beispiel dafür finden.

Wie lautet die Syntax für die Bezeichnung des benannten Ankers und wie lautet die Syntax für die Verknüpfung mit der Verknüpfung mit anderen URLs (nur mit #foo anstelle von http://....)?


Wenn Sie dies tun, um ein Inhaltsverzeichnis zu erstellen, würde ich doctoc empfehlen, um dies zu automatisieren (erfordert node.js ). Doctoc generiert den Markdown-Code, um ein Beispiel für die Verknüpfung mit Überschriften im gesamten Dokument zu erhalten (wie in der Antwort von @ user1789493 beschrieben).
James Owers

Antworten:


659

Platzieren <a name="abcd"></a>Sie in Standard-Markdown einen Anker, auf den Sie verlinken möchten, und verweisen Sie auf dieselbe Seite von [link text](#abcd).

(Dies wird aus den in dieser Antwort erläuterten Gründen verwendet name=und nicht .)id=

Fernreferenzen können [link text](http://...#abcd)natürlich verwendet werden.

Dies funktioniert wie ein Traum, vorausgesetzt, Sie haben die Kontrolle über die Quell- und Zieltexte. Der Anker kann sogar in einer Überschrift erscheinen, also:

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

produziert:

Eine Überschrift in diesem SO-Eintrag!

und wir können sogar so darauf verlinken:

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

(Unter SO funktioniert die Verknüpfung nicht, da der Anker entfernt wurde.)


11
@ jj1bdx mache ich jetzt - das <a id="id"></a>Formular ist am besten. Siehe diese SO Frage / Antwort .
Steve Powell

Netter Zusatz Steve. Ich würde es als Antwort markieren, außer dass es sich bei der Frage um MultiMarkdown handelte. Offensichtlich deuten die Stimmen der Leute darauf hin, dass dies eine hilfreiche Ergänzung war. So danke.
Masukomi

3
Zu Ihrer Information: Github Markdown erwartet, dass Sie name = anstelle von id verwenden, wie es scheint.
Dieter

@Dieter: name=war in XHTML veraltet, aber jetzt finde ich, dass dies id=einen Nebeneffekt in HTML5 hat, also werde ich name=in dieser Antwort darauf zurückgreifen.
Steve Powell

3
Arbeitet mit Github-Geschmack-Markdown (der Rubin Edelstein macht es wie erwartet)
Kedar Mhaswade

461

Wenn die Markdown-Dateien Header enthalten, können Sie diese direkt in der Datei verknüpfen.

Markdown-Header -

## The Header

Dadurch wird eine implizite ID generiert #the-header (interne Leerzeichen durch Bindestriche ersetzen und Kleinbuchstaben erstellen).

Um zu dieser ID zu navigieren, können Sie den Link wie folgt erstellen:

[Link to Header](#the-header)

Dies entspricht:

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

Bitte beachten Sie, dass der Name der Referenz in Kleinbuchstaben geschrieben ist #header.


30
BitBucket scheint der Anker-ID "markdown-header-" voranzustellen. Wenn Ihr Header also ist ## This Header ##, wäre der Link [To This Header](#markdown-header-this-header). Wenn Sie sich nicht sicher sind, wie die ID Ihres Headers lautet, verwenden Sie einen Seiteninspektor, um die HTML-Werte anzuzeigen.
Vinney Kelly

Hat bei mir in Pandoc Extended Markdown nicht funktioniert, könnte woanders funktionieren.
Zelphir Kaltstahl

9
@ SaurabhM Dies funktioniert NUR, wenn Ihr Markdown-to-HTML-Konverter NICHT dem Standard entspricht. Der Standard erstellt keine Ankertags. Nun, viele halten sich nicht daran, aber Sie sollten NICHT erwarten, dass dies irgendwo funktioniert.
Masukomi

9
Warum, oh, warum mussten wir etwas standardisieren , das so standardlos und halbherzig ist wie Markdown? Ich kann es kaum erwarten, dass AsciiDoc die Führung übernimmt.
Hmijail trauert um die Rücktritte

1
GitHub fügt Benutzerinhalte vor dem Namen des Headers hinzu:[Link](user-content-the-header)
Melvin Witte

137

Entnommen aus dem Multimarkdown-Benutzerhandbuch (danke an @MultiMarkdown auf Twitter für den Hinweis)

[Some Text][]wird mit einem Header namens "Some Text" verknüpft,
z

### Some Text ###

Ein optionales Etikett Ihrer Wahl, um Fälle zu unterscheiden, in denen mehrere Überschriften denselben Titel haben:

### Overview [MultiMarkdownOverview] ##

Auf diese Weise können Sie mit [MultiMarkdownOverview] speziell auf diesen Abschnitt verweisen und nicht auf einen anderen Abschnitt mit dem Namen Übersicht. Dies funktioniert mit atx- oder settext-artigen Headern.

Wenn Sie bereits einen Anker mit derselben ID definiert haben, die von einem Header verwendet wird, hat der definierte Anker Vorrang.

Zusätzlich zu den Überschriften im Dokument können Sie Beschriftungen für Bilder und Tabellen bereitstellen, die dann auch für Querverweise verwendet werden können.


FWIW, es funktioniert nicht mit dem Markdown-Modus von Emacs ab 23.4.1.
Attila Lendvai

5
Markdown unterstützt keine Fußnoten. Als solches funktioniert es in den meisten "Markdown" -Modi nicht. MultiMarkdown unterstützt jedoch eine Reihe von Erweiterungen, die Schriftstellern das Leben erleichtern.
Masukomi

11
Github scheint keine Beschriftungen in Headern zu unterstützen?
andig

1
Dies funktioniert nicht (zumindest bei codepen.io), wenn der Header ':' enthält.
Xiao Peng - ZenUML.com

2
Dieser Link ist die Dokumentation des Mannes, der MultiMarkdown geschrieben hat. Ich bin mir nicht sicher, was Sie in codepen.io tun, aber ich bin zuversichtlich, dass die Dokumente korrekt sind. Denken Sie daran, MULTI Markdown NICHT Markdown.
Masukomi

100

Ich habe Github Flavored Markdown eine Weile getestet und kann es mit vier Regeln zusammenfassen:

  1. Satzzeichen werden entfernt
  2. führende Leerzeichen werden gelöscht
  3. Großbuchstaben werden in Kleinbuchstaben umgewandelt
  4. Leerzeichen zwischen Buchstaben werden in konvertiert -

Wenn Ihr Abschnitt beispielsweise so heißt:

## 1.1 Hello World

Erstellen Sie auf diese Weise einen Link dazu:

[Link](#11-hello-world)

Was ist, wenn der Name Bindestriche enthält? Was konvertiert es? Beachten Sie, dass zwischen den Wörtern und den Bindestrichen Leerzeichen stehen. Beispiel: `` `- [Mein - Header] (# mein --- Header) # Mein - Header` `` Wäre das richtig?
Spencer Pollock

stackoverflow.com/a/17820138/2908724 für die Terminologie zu diesem Stil. Ich bevorzuge "Kebab-Fall".
Bischof

22

Der beste Weg, um interne Links (in Bezug auf Abschnitte) zu erstellen, ist das Erstellen einer Liste. Geben Sie jedoch anstelle des Links #section oder # section-title ein, wenn die Kopfzeile Leerzeichen enthält.

---- MARKDOWN ------------------------

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

---- LISTENVORSCHAU ------------------------

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>

Es spielt keine Rolle, ob es sich um den Header h1, h2, h3 usw. handelt. Sie beziehen sich immer nur auf einen #.
Alle Verweise in der Abschnittsliste sollten in Kleinbuchstaben konvertiert werden, wie im obigen Beispiel gezeigt.

Der Link zum Abschnitt sollte klein geschrieben sein. Auf andere Weise wird es nicht funktionieren.
Diese Technik funktioniert sehr gut für alle Markdown-Varianten, auch MultiMarkdown.

Derzeit verwende ich den Pandoc , um das Dokumentformat zu konvertieren. Es ist viel besser als MultiMarkdown.
Testen Sie Pandoc hier


6
wie in anderen Kommentaren hier angegeben. Das funktioniert in keinem Markdown -> HTML-Konverter, der tatsächlich dem Standard folgt. Das Erstellen von Ankertags in Überschriften erfolgt nur in einigen Konvertern. Darüber hinaus werden nicht alle Leerzeichen in Bindestriche umgewandelt. Darauf kann man nicht zählen.
Masukomi

1
Ich verwende GitHub Markdown im Atom- Code-Editor, der ein integriertes Paket namens "Markdown Preview" enthält. Im Vorschaumodus erstelle ich eine HTML-Datei über das Kontextmenü "Als HTML speichern ...".
rafr3

Ja, mein Punkt ist, dass Sie sich nicht darauf verlassen können, dass Ihre Technik irgendwo anders funktioniert, und weder die Frage noch Ihre Antwort beziehen sich speziell auf Markdown in Atom. Die Frage betrifft nicht einmal Markdown, sondern MultiMarkdown.
Masukomi

Ich verwende diese Linkmethode, aber sie funktioniert bei mir nicht. nicht zum Abschnitt / dieser Überschrift gleiten.
Tom Kustermans

Geben Sie der Groß- und Kleinschreibung die Hand. Wenn Sie ein definieren ## Hello, sollten Sie es als[Whatever you want](#Hello)
Victor Augusto

9

In mdcharm ist es so:

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

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

2

Hier ist meine Lösung (abgeleitet aus SaraubhMder Antwort)

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

Welches gibt Ihnen:

Wechseln zu : Hotkeys & Markers / Radii / Route Wizard 2.0

Beachten Sie die Änderungen von und .nach -sowie den Verlust der &in den Links.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.