632 votes

Référence croisée (ancre nommée) dans un document de synthèse

Y a-t-il démarque pour l'équivalent de :

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

... 

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

854voto

Steve Powell Points 4722
Take me to [pookie](#pookie)

devrait être la syntaxe correcte pour sauter au point d'ancrage nommé pookie.

Pour insérer un point d'ancrage de ce nom, utilisez HTML :

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

Markdown ne semble pas se préoccuper de l'endroit où vous placez le point d'ancrage. Il est utile de le placer dans un en-tête. Par exemple :

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

fonctionne très bien. (Je ferais bien une démonstration ici, mais le moteur de rendu de SO supprime l'ancre).

Note sur les étiquettes à fermeture automatique et id= par rapport à name=

Une version antérieure de ce billet suggérait d'utiliser <a id='tith' /> en utilisant la syntaxe de fermeture automatique pour le XHTML, et en utilisant la syntaxe de fermeture automatique pour le id au lieu de name .

Le XHTML permet à toute balise d'être "vide" et "auto-fermée". En d'autres termes, le XHTML permet à toute balise d'être "vide" et "fermée", <tag /> est un raccourci pour <tag></tag> une paire de balises appariées avec un corps vide. La plupart des navigateurs acceptent le XHTML, mais certains ne l'acceptent pas. Pour éviter les problèmes entre navigateurs, fermez la balise explicitement à l'aide de la commande <tag></tag> comme recommandé ci-dessus.

Enfin, l'attribut name= était obsolète dans le XHTML, et j'ai donc utilisé à l'origine la fonction id= que tout le monde reconnaît. Cependant, HTML5 crée désormais une variable globale en JavaScript lors de l'utilisation de id= et ce n'est pas forcément ce que vous souhaitez. Ainsi, l'utilisation de name= est désormais susceptible d'être plus amicale.

(Merci à Slipp Douglas pour m'avoir expliqué le langage XHTML, et cloueuse pour avoir signalé l'effet de bord du HTML5 - voir les commentaires et cloueuse 's répondre pour plus de détails. name= semble fonctionner partout, bien qu'il soit déprécié dans le XHTML).

2 votes

Vous ne pouvez pas voir comment créer un lien vers votre démo d'en-tête après que StackOverflow ait rendu le HTML parce que leur rendu supprime votre <a> tag. C'est-à-dire que vous ne pouvez pas dans StackOverflow Markdown.

2 votes

Cependant, cela fonctionnera avec d'autres moteurs de rendu Markdown plus libéraux, mais vous aurez besoin d'une fermeture <a> ; la balise <a> ne permet pas la fermeture automatique. De plus, j'ai constaté que mon navigateur sautait l'en-tête à moins que la balise <a> se trouve avant le contenu de l'en-tête. Des corrections ont été apportées à vos exemples.

1 votes

Slipp : Merci pour l'explication. Les balises <a> qui se ferment d'elles-mêmes fonctionnent bien pour moi. Pouvez-vous donner une référence ?

121voto

Sur bitbucket.org, la solution votée ne fonctionnerait pas. Au lieu de cela, lorsque l'on utilise des en-têtes (avec ##), il est possible de les référencer comme des ancres en les préfixant comme #markdown-header-my-header-name, où #markdown-header- est un préfixe implicite généré par le moteur de rendu, et le reste est le titre de l'en-tête en minuscules, les espaces étant remplacés par des tirets.

Exemple

## My paragraph title

produira une ancre implicite comme celle-ci

#markdown-header-my-paragraph-title

L'URL complète précédant chaque référence d'ancre est facultative, c'est-à-dire

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

est équivalent à

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

à condition qu'ils soient sur la même page.

Source : https://bitbucket.org/tutorials/markdowndemo/overview (éditer la source de ce fichier .md et regarder comment les ancres sont faites).

1 votes

Cela peut aussi faire l'affaire. D'après ceci : confluence.atlassian.com/bitbucket/ bitbucket supporte l'extension Table des matières qui permet de générer automatiquement des liens. y sur la base des en-têtes du document. L'extension TOC est documentée ici : pythonhosted.org/Markdown/extensions/toc.html Ajoutez le texte "[TOC]" au début du document pour qu'il soit généré.

13 votes

Dans Github, ## My paragraph title produira l'ancre suivante user-content-my-paragraph-title Vous pouvez donc y faire référence avec [Some text](#user-content-my-paragraph-title). Cependant, je n'ai pas trouvé de documentation officielle à ce sujet.

0 votes

Cela m'a aidé sur Bitbucket également - cela fonctionne comme un charme.

72voto

mikemaccana Points 7470

Utiliser un name . L'utilisation d'un id n'est pas nécessaire en HTML 5 et créera des variables globales dans votre JavaScript

Voir la spécification HTML 5, 5.9.8 Naviguer vers un identifiant de fragment - à la fois id y name sont utilisés.

Il est important de savoir que la plupart des navigateurs transforment encore les ID en variables globales . Voici un test rapide . L'utilisation d'un name évite la création de globaux et les conflits qui peuvent en résulter.

Exemple d'utilisation d'un nom :

Take me to [pookie](#pookie)

Et l'ancre de destination :

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

6 votes

Le vote négatif. L'argument de la variable globale est faible puisque vous ne devriez pas définir (directement) des variables globales dans votre JS de toute façon, donc aucun conflit ne se produira. De plus, la sémantique de name y id sont différents.

11 votes

@MarnenLaibow-Koser Personne ne discute de la définition de variables globales en JS. La création d'un identifiant en HTML crée une fenêtre globale window.someid dans la plupart des navigateurs.

1 votes

Je sais. Mais à moins que votre propre JS définit des variables globales, le window.someID Les variables ne font pas de mal.

25voto

jeffmcneill Points 15

Ancre Markdown prend en charge le hashmark, de sorte qu'un lien vers une ancre dans la page serait simplement [Pookie](#pookie)

La génération de l'ancre n'est pas prise en charge par Gruber Markdown, mais elle l'est dans d'autres implémentations, telles que Démonstration supplémentaire .

Dans Markdown Extra, l'identifiant de l'ancre est ajouté à l'en-tête ou au sous-titre avec la mention {#pookie} .

Markdown à la sauce Github dans les pages du dépôt Git (mais pas dans les Gists) génère automatiquement des ancres avec plusieurs balises sur tous les en-têtes (h1, h2, h3, etc.), y compris :

  • id="user-content-HEADERTEXT"
  • class="anchor"
  • href="#HEADERTEXT"
  • aria-hidden="true" (il s'agit d'une icône de lien svg qui s'affiche au survol de la souris)

A l'exception de l'icône aria/svg, lorsqu'on écrit :

  • # Header Title

Github génère :

  • <h1><a id="user-content-header-title" class="anchor" href="#header-title">Header Title</a></h1>

Par conséquent, il n'est pas nécessaire de créer les liens d'en-tête, et il est toujours possible d'y faire référence à l'aide d'un lien :

  • Lien vers le site [Header Title](#header-title)

22voto

keyoxy Points 3681

Pour tous ceux qui cherchent une solution à ce problème dans GitBook. Voici comment je l'ai fait fonctionner (dans GitBook). Vous devez baliser votre en-tête explicitement, comme ceci :

# My Anchored Heading {#my-anchor}

Créez ensuite un lien vers cette ancre comme suit

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

La solution, ainsi que d'autres exemples, sont disponibles ici : https://seadude.gitbooks.io/learn-gitbook/

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