Comment créer un lien vers une ancre nommée dans Multimarkdown?

573

J'ai rencontré un certain nombre de mentions de la prise en charge de MultiMarkdown pour les liens internes / ancres nommées, mais je ne parviens pas à trouver un seul exemple de la façon de le faire.

Alors, quelle est la syntaxe pour désigner l'ancre nommée, et quelle est la syntaxe pour y lier la même chose que pour un lien vers d'autres URL (en utilisant uniquement #foo au lieu de http://....)?

masukomi
la source
Si vous faites cela pour créer une table des matières, je recommanderais doctoc pour automatiser cela (nécessite node.js ). Doctoc génère le code de démarque afin qu'il fournisse également un exemple de lien vers les en-têtes du document (comme décrit dans la réponse de @ user1789493).
James Owers
3
Copie possible de référence croisée (ancre nommée) dans la démarque
Organic Advocate

Réponses:

659

Dans Markdown standard, placez une ancre à l' <a name="abcd"></a>endroit où vous souhaitez créer un lien et faites-y référence sur la même page par [link text](#abcd).

(Cela utilise name=et non id=, pour les raisons expliquées dans cette réponse .)

Les références à distance peuvent [link text](http://...#abcd)bien sûr utiliser .

Cela fonctionne comme un rêve, à condition que vous ayez le contrôle sur les textes source et cible. L'ancre peut même apparaître dans un en-tête, donc:

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

produit:

Un titre dans cette entrée SO!

et nous pouvons même créer un lien vers celui-ci:

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

(Sous SO, le lien ne fonctionne pas car l'ancre est supprimée.)

Steve Powell
la source
11
@ jj1bdx Je le fais maintenant - la <a id="id"></a>forme est la meilleure. Voir cette question / réponse SO .
Steve Powell
Belle addition Steve. Je le marquerais comme la réponse, sauf que la question concernait MultiMarkdown. De toute évidence, les votes des gens indiquent que c'était un ajout utile. Donc merci.
masukomi
3
Fyi: Le markdown de Github s'attend à ce que vous utilisiez name = au lieu de id, semble-t-il.
Dieter
@Dieter: a name=été déconseillé en XHTML, mais maintenant je trouve que cela id=a un effet secondaire en HTML5, donc je reviens à name=cette réponse.
Steve Powell
3
Fonctionne sur la démarque aromatisée au github (la gemme rubis la rend comme prévu)
Kedar Mhaswade
462

Si vous avez des en-têtes dans les fichiers de démarque, vous pouvez les lier directement dans le fichier.

En-tête de démarque -

## The Header

cela générera un identifiant implicite #the-header(remplacez les espaces internes par des tirets et réduisez les minuscules).

Pour accéder à cet identifiant, vous pouvez créer le lien comme ceci:

[Link to Header](#the-header)

Cela équivaut à:

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

Veuillez noter que le nom de la référence est en minuscule #header.

SaurabhM
la source
30
BitBucket semble préfixer l'ID d'ancre avec "markdown-header-". Donc, si votre en-tête est ## This Header ##, le lien serait [To This Header](#markdown-header-this-header). Si vous n'êtes pas sûr de l'ID de votre en-tête, utilisez un inspecteur de page pour voir les valeurs HTML.
Vinney Kelly
N'a pas fonctionné pour moi dans le démarquage étendu de Pandoc, pourrait fonctionner ailleurs.
Zelphir Kaltstahl
9
@SaurabhM cela fonctionnera UNIQUEMENT SI votre démarque en convertisseur html N'EST PAS conforme à la norme. La norme ne crée pas de balises d'ancrage. Maintenant, beaucoup n'adhèrent pas, mais vous ne devriez PAS vous attendre à ce que cela fonctionne n'importe où.
masukomi
9
Pourquoi oh pourquoi avons-nous dû standardiser quelque chose d'aussi standard et à moitié cuit que Markdown. J'ai hâte qu'AsciiDoc prenne les devants.
hmijail pleure les démissionnaires le
1
GitHub ajoute du contenu utilisateur avant le nom de l'en-tête:[Link](user-content-the-header)
Melvin Witte
137

Tiré du Guide de l'utilisateur de Multimarkdown (merci à @MultiMarkdown sur Twitter de l'avoir signalé)

[Some Text][]sera lié à un en-tête nommé «Some Text»,
par exemple

### Some Text ###

Une étiquette facultative de votre choix pour aider à lever l'ambiguïté lorsque plusieurs en-têtes ont le même titre:

### Overview [MultiMarkdownOverview] ##

Cela vous permet d'utiliser [MultiMarkdownOverview] pour faire référence à cette section en particulier, et non à une autre section nommée Overview. Cela fonctionne avec les en-têtes de style atx ou settext.

Si vous avez déjà défini une ancre en utilisant le même identifiant que celui utilisé par un en-tête, alors l'ancre définie est prioritaire.

En plus des en-têtes dans le document, vous pouvez fournir des étiquettes pour les images et les tableaux qui peuvent également être utilisées pour les références croisées.

masukomi
la source
FWIW, cela ne fonctionne pas avec le mode Markdown d'emacs à partir de 23.4.1.
Attila Lendvai
5
Markdown ne prend pas en charge les notes de bas de page. En tant que tel, il ne fonctionnera pas dans la plupart des modes "Markdown". MultiMarkdown, cependant, prend en charge un certain nombre d'extensions qui facilitent la vie des écrivains.
masukomi
11
Github ne semble pas prendre en charge les étiquettes dans les en-têtes?
andig
1
Cela ne fonctionne pas (au moins sur codepen.io) quand il y a ':' dans l'en-tête.
Xiao Peng - ZenUML.com
2
ce lien est la documentation du gars qui a écrit MultiMarkdown. Je ne sais pas ce que vous faites dans codepen.io mais je suis convaincu que les documents sont exacts. Gardez à l'esprit MULTI Markdown PAS Markdown.
masukomi
100

J'ai testé Github Flavored Markdown pendant un certain temps et je peux résumer avec quatre règles:

  1. les signes de ponctuation seront supprimés
  2. les principaux espaces blancs seront supprimés
  3. les majuscules seront converties en minuscules
  4. les espaces entre les lettres seront convertis en -

Par exemple, si votre section est nommée ceci:

## 1.1 Hello World

Créez un lien vers celui-ci de cette façon:

[Link](#11-hello-world)
longkai
la source
Et s'il y a des tirets dans le nom? En quoi est-il converti? Notez qu'il y a des espaces entre les mots et les tirets. exemple: `` `- [My - Header] (# my --- header) # My - Header` `` Serait-ce correct?
Spencer Pollock
stackoverflow.com/a/17820138/2908724 pour la terminologie de ce style. Je préfère "kebab-case".
évêque le
22

La meilleure façon de créer des liens internes (liés aux sections) est de créer une liste mais au lieu de lien, mettez #section ou # section-title si l'en-tête comprend des espaces.

---- REMBOURSEMENT ------------------------

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

---- APERÇU DE LA LISTE ------------------------

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>

Peu importe que ce soit l'en-tête h1, h2, h3, etc., vous vous y référez toujours en utilisant un seul #.
Toutes les références dans la liste des sections doivent être converties en texte en minuscules, comme indiqué dans l'exemple ci-dessus.

Le lien vers la section doit être en minuscules. Sinon, cela ne fonctionnera pas.
Cette technique fonctionne très bien pour toutes les variantes de Markdown, également MultiMarkdown.

Actuellement, j'utilise Pandoc pour convertir le format des documents. C'est beaucoup mieux que MultiMarkdown.
Testez Pandoc ici

rafr3
la source
6
comme indiqué dans d'autres commentaires ici. cela ne fonctionnera dans aucun démarque -> convertisseur html qui suit réellement la norme. La création de balises d'ancrage dans les en-têtes ne se produit que dans CERTAINS convertisseurs. De plus, ils ne convertiront pas tous les espaces en tirets. CELA NE PEUT PAS être compté.
masukomi
1
J'utilise GitHub Markdown dans l' éditeur de code Atom qui a un package intégré nommé "Markdown Preview". Du mode aperçu, je crée un fichier html en utilisant le menu contextuel "Enregistrer au format HTML ...".
rafr3
oui, mon point est que vous ne pouvez pas compter sur votre technique pour travailler ailleurs, et ni la question, ni votre réponse ne concerne spécifiquement le démarque dans Atom. La question ne concerne même pas Markdown, il s'agit de MultiMarkdown.
masukomi du
J'utilise cette méthode de lien mais cela ne fonctionne pas pour moi. ne pas glisser vers la section / cet en-tête.
Tom Kustermans
Faites attention à la casse. Si vous définissez un, ## Hellovous devez vous y référer comme[Whatever you want](#Hello)
Victor Augusto
9

Dans mdcharm, c'est comme ça:

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

### Descripción {#descripcion}
### Funcionamiento {#funcionamiento}
### Instalación {#instalacion}
### Configuración {#configuracion}
Gonen09
la source
2

Voici ma solution (dérivée de SaraubhMla réponse de)

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

Ce qui vous donne:

Aller à : Raccourcis clavier et marqueurs / Radii / Route Wizard 2.0

Notez les changements de et .vers -et aussi la perte de &dans les liens.

Peet
la source