Référence croisée (ancre nommée) dans markdown

Existe-t-il une syntaxe markdown pour l'équivalent de:

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

... 

<a name="pookie">this is pookie</a>
400
demandé sur bostaf 2011-03-16 03:41:44

8 réponses

Take me to [pookie](#pookie)

Devrait être la syntaxe de démarquage correcte pour passer 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 à l'esprit où vous mettez le point d'ancrage. Un endroit utile pour le mettre est dans un en-tête. Par exemple:

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

Fonctionne très bien. (Je démontrerais ici mais le moteur de rendu supprime L'ancre.)

Note sur les balises à fermeture automatique et id= versus name=

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

XHTML permet à toute balise d'être 'vide' et 'auto-fermée'. C'est-à-dire que <tag /> est une main courte pour <tag></tag>, une paire de balises appariées avec un corps vide. La plupart des navigateurs acceptent XHTML, mais certains ne le font pas. Pour éviter les problèmes entre navigateurs, fermez la balise explicitement en utilisant <tag></tag>, comme recommandé ci-dessus.

Enfin, l'attribut name= était obsolète en XHTML, donc je utilisé à l'origine id=, que tout le monde reconnaît. Cependant, HTML5 crée maintenant une variable globale en JavaScript lors de l'utilisation de id=, et ce n'est peut-être pas nécessairement ce que vous voulez. Donc, l'utilisation de name= est maintenant susceptible d'être plus conviviale.

(Merci à Slipp Douglas pour m'avoir expliqué XHTML, et nailer pour avoir souligné l'effet secondaire HTML5-voir les commentaires etNailer réponse pour plus de détails. name= semble fonctionner partout, bien qu'il soit obsolète en XHTML.)

531
répondu Steve Powell 2017-05-23 12:34:36

Utilisez 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 navigation vers un identificateur de fragment - id et name sont utilisés.

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

Exemple utilisant un nom:

Take me to [pookie](#pookie)

Et l'ancre de destination:

### <a name="pookie"></a>Some heading
53
répondu mikemaccana 2017-01-12 11:28:52

Sur bitbucket.org la solution votée ne fonctionnerait pas. Au lieu de cela, lorsque vous utilisez des en-têtes (avec ##), il est possible de les référencer comme 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 d'en-tête inférieur avec des tirets remplaçant les espaces.

Exemple

## My paragraph title

Produira une ancre implicite comme ceci

#markdown-header-my-paragraph-title

L'URL entière avant chaque référence d'ancrage 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 dans la même page.

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

52
répondu La Muerte Peluda 2017-07-02 22:54:23

Il N'y a pas de syntaxe facilement disponible pour le faire dans la syntaxe originale de Markdown, mais Markdown Extra fournit un moyen d'attribuer au moins Des Id aux en-têtes-que vous pouvez ensuite lier facilement. Notez également que vous pouvez utiliser du HTML normal dans Markdown et Markdown Extra, et que l'attribut name a été remplacé par l'attribut id dans les versions plus récentes de HTML.

16
répondu You 2011-03-16 00:50:44

Markdown Ancre prend en charge la hashmark, donc un lien vers une ancre dans la page serait tout simplement [Pookie](#pookie)

La génération de l'ancre n'est pas réellement prise en charge dans Gruber Markdown, mais dans d'autres implémentations, telles que Markdown Extra.

Dans Markdown Extra, l'ID d'ancrage est ajouté à un en-tête ou à un sous-en-tête avec {#pookie}.

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

  • id="user-content-HEADERTEXT"
  • class="anchor"
  • href="#HEADERTEXT"
  • aria-hidden="true" (Ceci est pour une icône de lien svg qui s'affiche sur mouseover)

Excluant l'icône Aria / svg, quand 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 ne faut rien faire pour créer les liens d'en-tête, et peut toujours les lier avec:

  • lien vers le [Header Title](#header-title)
7
répondu jeffmcneill 2017-08-29 11:49:33

En retard à la fête, mais je pense que cet ajout pourrait être utile pour les personnes travaillant avec rmarkdown. Dans rmarkdown, Il existe un support intégré pour les références aux en-têtes dans votre document.

Tout en-tête défini par

# Header

Peut être référencé par

get me back to that header(#header)

Ce qui suit est un fichier .rmd autonome minimal qui montre ce comportement. Il peut être tricoté à .pdf et .html.

---
title: "references in rmarkdown"
output:
  html_document: default
  pdf_document: default
---

# Header

Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. 

Go back to that [header](#header).
4
répondu symbolrush 2017-02-01 11:01:50

Pour les générateurs de démarque les plus courants. Vous avez une ancre auto-générée simple dans chaque en-tête. Par exemple avec pandoc , l'ancre générée sera une limace kebab case de votre en-tête.

 echo "# Hello, world\!" | pandoc
 # => <h1 id="hello-world">Hello, world!</h1>

Selon l'analyseur markdown que vous utilisez, l'ancre peut changer (prenez l'exemple de symbolrush et les réponses de la muerte Peluda, elles sont différentes!). Voir ceci babelmark où vous pouvez voir les ancres générées en fonction de votre implémentation markdown .

2
répondu Ulysse BN 2016-11-26 18:24:55

En utilisant la dernière démarque, vous devriez pouvoir utiliser la syntaxe suivante:

[](){:name='anchorName'}

Cela devrait créer le code HTML suivant:

<a name="anchorName"></a>

Si vous voulez que l'ancre ait du texte, ajoutez simplement le test entre crochets:

`du Texte{:nom='anchorName'}

0
répondu Ryan McGuinness 2017-06-22 21:57:04