816 votes

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

J'ai trouvé plusieurs mentions du support de MultiMarkdown pour les liens internes / ancres nommées mais je ne parviens pas à trouver un seul exemple de comment le faire en réalité.

Alors, quelle est la syntaxe pour indiquer l'ancre nommée, et quelle est la syntaxe pour y faire référence de la même manière que l'on ferait pour tout autre URL (en utilisant uniquement #foo au lieu de http://....) ?

0 votes

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 markdown, il fournira donc un exemple de comment créer des liens vers les en-têtes à travers le document également (comme décrit dans la réponse de @user1789493).

3 votes

836voto

Steve Powell Points 4722

Dans Markdown standard, placez une ancre où vous voulez créer un lien et référez-vous à celle-ci sur la même page avec [texte du lien](#abcd).

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

Les références distantes peuvent utiliser [texte du lien](http://...#abcd) bien sûr.

Cela fonctionne parfaitement, à condition que vous ayez le contrôle sur les textes sources et cibles. L'ancre peut même apparaître dans un titre, comme ceci :

### Un titre dans cette entrée SO !

produit :

Un titre dans cette entrée SO !

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

et nous pouvons même [créer un lien](#head1234) vers celui-ci :

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

27 votes

@jj1bdx Maintenant je le fais -- la forme est la meilleure. Voir cette question/réponse SO.

0 votes

Belle addition Steve. Je le marquerais comme réponse, sauf que la question portait sur MultiMarkdown. Visiblement, les votes des gens indiquent que cette addition était utile. Donc, merci.

5 votes

Fyi: Le balisage Github attend que vous utilisiez name= au lieu de id, apparemment.

786voto

user1789493 Points 305

Si vous avez des en-têtes dans les fichiers Markdown, vous pouvez directement les lier dans le fichier.

En-tête Markdown :

## L'en-tête

cela générera un identifiant implicite #l-en-tête (remplacez les espaces internes par des tirets et mettez en minuscules).

Pour naviguer vers cet identifiant, vous pouvez créer le lien comme ceci :

[Lien vers l'en-tête](#l-en-tête)

Ceci est équivalent à :

Lien vers l'en-tête

Veuillez noter que le nom de la référence est en minuscules #en-tête.

48 votes

BitBucket semble préfixer l'identifiant de l'ancre avec "markdown-header-". Donc, si votre en-tête est ## Cet en-tête ##, le lien serait [Vers cet en-tête] (#markdown-header-cet-en-tête). Si vous n'êtes pas sûr de l'identifiant de votre en-tête, utilisez un inspecteur de page pour voir les valeurs HTML.

2 votes

N'a pas fonctionné pour moi en Pandoc Markdown étendu, pourrait fonctionner ailleurs.

23 votes

@SaurabhM cela fonctionnera SEULEMENT SI votre convertisseur de markdown en html NE respecte PAS la norme. La norme ne crée pas de balises d'ancre. Maintenant, beaucoup ne respectent pas, mais vous ne devriez PAS vous attendre à ce que cela fonctionne n'importe où.

151voto

masukomi Points 982

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

[Some Text][]renverra à un en-tête nommé « Some Text »
Par exemple,

### Some Text ###

Une étiquette facultative de votre choix pour aider à dissocier les cas où plusieurs en-têtes ont le même titre :

### Vue d'ensemble [MultiMarkdownOverview] ##

Cela vous permet d'utiliser [MultiMarkdownOverview] pour vous référer spécifiquement à cette section, et non à une autre section nommée Vue d'ensemble. Cela fonctionne avec des 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 prend le dessus.

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

1 votes

FWIW, ça ne fonctionne pas avec le mode markdown d'emacs tel qu'il est en 23.4.1.

7 votes

Markdown ne supporte pas les notes de bas de page. En tant que tel, cela 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.

13 votes

Github ne semble pas prendre en charge les étiquettes dans les en-têtes?

141voto

longkai Points 1956

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 espaces blancs en début de ligne 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 comme ceci:

## 1.1 Bonjour le Monde

Créez un lien vers cela de cette manière:

[Lien](#11-bonjour-le-monde)

0 votes

Que se passe-t-il s'il y a des tirets dans le nom ? A quoi cela se convertit-il ? Notez qu'il y a des espaces entre les mots et les tirets. exemple: ```- [Mon - En-Tête](#my---header) # Mon - En-Tête ``` Serait-ce correct ?

0 votes

stackoverflow.com/a/17820138/2908724 pour la terminologie sur ce style. Je préfère "kebab-case".

1 votes

Toutes ces conversions signifient qu'il est un peu risqué de compter sur ce que fait le formatteur markdown pour les titres. Beaucoup mieux, à mon avis, d'utiliser des ancres (comme le recommande la réponse la plus votée), de cette façon les liens ne se cassent pas parce que quelqu'un corrige la grammaire/l'orthographe d'un titre et casse des milliers de liens internes (et externes).

52voto

rflw Points 1444

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

Markdown

Aller à la section
* [Hello](#hello)  
* [Hello World](#hello-world)
* [Another section](#new-section) <-- c'est appelé 'Another section' dans cette liste mais se réfère à 'New section'

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

Aperçu de la liste

Aller à la section
Hello           <-- [Hello](#hello)                 -- aller à la section `Hello`
Hello World     <-- [Hello World](#hello world)     -- aller à la section `Hello World`
Another section <-- [Another section](#new-section) -- aller à la section `New section`

HTML

Aller à la section

    Hello
    Hello World
    Another section <– c'est appelé ‘Another section’ dans cette liste mais se réfère à ‘New section’

Hello
Hello World
New section

Peu importe s'il s'agit d'un en-tête h1, h2, h3, etc., vous vous y référer toujours en utilisant juste un #.
Toutes les références dans la liste des sections doivent être converties en texte en minuscules comme le montre l'exemple ci-dessus.

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

Actuellement, j'utilise le Pandoc pour convertir les documents. C'est bien mieux que MultiMarkdown.
Tester Pandoc ici

8 votes

Comme indiqué dans d'autres commentaires ici. cela ne fonctionnera pas dans n'importe quel convertisseur markdown -> html qui suit réellement la norme. La création de balises d'ancre dans les en-têtes se produit uniquement dans CERTAINS convertisseurs. En outre, ils ne vont pas tous convertir les espaces en tirets. CECI NE PEUT PAS être compté sur.

1 votes

Je suis en train d'utiliser GitHub Markdown dans l'éditeur de code Atom qui dispose d'un package intégré appelé "Markdown Preview". À partir du mode de prévisualisation, je crée des fichiers html en utilisant le menu contextuel "Enregistrer sous HTML...".

0 votes

Oui, mon point est que vous ne pouvez pas compter sur votre technique fonctionnant ailleurs, et ni la question, ni votre réponse ne sont spécifiquement sur le balisage dans Atom. La question n'est même pas sur Markdown, c'est sur MultiMarkdown.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X