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>
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.)
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
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).
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.
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)
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).
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 .
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'}