web-dev-qa-db-fra.com

Comment créer un lien vers une partie du même document dans Markdown?

Je suis en train d’écrire un gros document Markdown et je voudrais placer au début une table des matières qui fournira des liens vers divers emplacements du document. Comment puis-je faire ceci?

J'ai essayé d'utiliser

[a link](# MyTitle)

MyTitle est un titre dans le document et cela n'a pas fonctionné.

417

Dans pandoc , si vous utilisez l'option --toc pour produire du HTML, une table des matières, contenant des liens vers les sections, sera produite, et retourne à la table des matières des en-têtes de section. Il en est de même avec les autres formats écrits par Pandoc, tels que LaTeX, RTF, rst, etc. Ainsi, avec la commande

pandoc --toc happiness.txt -o happiness.html

ce peu de démarque:

% True Happiness

Introduction
------------

Many have posed the question of true happiness.  In this blog post we propose to
solve it.

First Attempts
--------------

The earliest attempts at attaining true happiness of course aimed at pleasure. 
Soon, though, the downside of pleasure was revealed.

cédera ceci comme le corps du html:

    <h1 class="title">
        True Happiness
    </h1>
    <div id="TOC">
        <ul>
            <li>
                <a href="#introduction">Introduction</a>
            </li>
            <li>
                <a href="#first-attempts">First Attempts</a>
            </li>
        </ul>
    </div>
    <div id="introduction">
        <h2>
            <a href="#TOC">Introduction</a>
        </h2>
        <p>
            Many have posed the question of true happiness. In this blog post we propose to solve it.
        </p>
    </div>
    <div id="first-attempts">
        <h2>
            <a href="#TOC">First Attempts</a>
        </h2>
        <p>
            The earliest attempts at attaining true happiness of course aimed at pleasure. Soon, though, the downside of pleasure was revealed.
        </p>
    </div>
38
applicative

Github analyse automatiquement les balises d'ancrage de vos en-têtes. Donc, vous pouvez faire ce qui suit:

[Custom foo description](#foo)

# Foo

Dans le cas ci-dessus, l'en-tête Foo a généré une balise d'ancrage avec le nom foo

Note: un seul # pour toutes les tailles d'en-tête, aucun espace entre # et le nom de l'ancre, les noms de balises d'ancrage doivent être en minuscules et délimités par des tirets s'il y a plusieurs mots.

[click on this link](#my-multi-Word-header)

### My Multi Word Header

Mise à jour

Fonctionne hors de la boîte avec pandoc aussi.

682
uberllama

En expérimentant, j'ai trouvé une solution en utilisant <div…/>, mais une solution évidente consiste à placer votre propre point d'ancrage dans la page où vous le souhaitez, ainsi:

<a name="abcde">

avant et

</a>

after la ligne à laquelle vous souhaitez vous "lier". Puis un lien de démarcation comme:

[link text](#abcde)

n'importe où dans le document vous y emmène.

La solution <div…/> insère une division "fictive" juste pour ajouter la propriété id, ce qui peut potentiellement perturber la structure de la page, mais la solution <a name="abcde"/> devrait être relativement inoffensive.

(PS: vous pouvez peut-être placer l'ancre in la ligne vers laquelle vous souhaitez créer un lien, comme suit:

## <a name="head1">Heading One</a>

mais cela dépend de la façon dont Markdown traite cela. Je remarque, par exemple, que le formateur de réponse Stack Overflow est satisfait de cela!)

101
Steve Powell

Ce fil peut être obsolète, mais pour créer des liens de document internes dans Markdown dans Github, utilisez ...
(NOTE: #title minuscule)

    # Contents
     - [Specification](#specification) 
     - [Dependencies Title](#dependencies-title) 

    ## Specification
    Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. 

    ## Dependencies Title
    Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. Example text blah. Example text blah. 
Example text blah. Example text blah. 

Une bonne question a été posée alors j'ai corrigé ma réponse;

Un lien interne peut être créé vers n'importe quelle taille de titre à l'aide de - #, ##, ###, #### J'ai créé un exemple rapide ci-dessous ... https: //github.com/aogilvie/markdownLinkTest

71
Ally

oui, c'est ce que fait Markdown, mais vous devez spécifier le nom ancre <a name='xyx'>.

un exemple complet,

cela crée le lien
[tasks](#tasks)

plus tard dans le document, vous créez l’ancre nommée (quelle que soit sa dénomination).

<a name="tasks">
   my tasks
</a>

notez que vous pouvez aussi l'enrouler autour de l'en-tête.

<a name="tasks">
### Agile tasks (created by developer)
</a>
19
davidj411

Le manuel pandoc explique comment créer un lien vers vos en-têtes, en utilisant leur identifiant. Je n'ai pas vérifié le support de ceci par d'autres analyseurs, mais il a été rapporté que cela ne fonctionne pas sur github .

L'identifiant peut être spécifié manuellement:

## my heading text {#mht}
Some normal text here,
including a [link to the header](#mht).

ou vous pouvez utiliser l'identifiant généré automatiquement (dans ce cas, #my-heading-text). Les deux sont expliqués en détail dans le manuel de pandoc .

NOTE: Ceci seulement fonctionne lors de la conversion en HTML, LaTex , ConTeXt , Textile ou AsciiDoc .

11
hoijui

Il n'y a pas de telle directive dans la spécification Markdown. Pardon.

6
Nick Gerakines

Gitlab utilise GitLab Flavored Markdown (GFM)

Ici "tous les en-têtes rendus par Markdown ont automatiquement un identifiant"

On peut utiliser la souris pour:

  • passer la souris sur l'en-tête
  • passez la souris sur le sélecteur de survol qui devient visible à gauche de l'en-tête
  • copier et enregistrer le lien en utilisant le clic droit de la souris

    Par exemple, dans le fichier README.md, j'ai un en-tête:

## series expansion formula of the Boettcher function

qui donne un lien:

https://gitlab.com/adammajewski/parameter_external_angle/blob/master/README.md#series-expansion-formula-of-the-boettcher-function

Le préfixe peut être supprimé, le lien est simplement ici

file#header

ce qui signifie ici:

README.md#series-expansion-formula-of-the-boettcher-function

Maintenant, il peut être utilisé comme:

[series expansion formula of the Boettcher function](README.md#series-expansion-formula-of-the-boettcher-function)

On peut aussi le faire manuellement: remplacez les espaces par un trait d'union.

Exemple en direct: ici

4
Adam

Quelques points supplémentaires à garder à l’esprit si vous obtenez une fantaisie avec des symboles dans les en-têtes vers lesquels vous voulez naviguer ...

_# What this is about


------


#### Table of Contents


- [About](#what-this-is-about)

- [&#9889; Sunopsis](#9889-tldr)

- [:gear: Grinders](#it-grinds-my-gears)

- [Attribution]


------


## &#9889; TLDR


Words for those short on time or attention.


___


## It Grinds my :gear:s


Here _`:gear:`_ is not something like &#9881; or &#9965;


___


## &#9956; Attribution


Probably to much time at a keyboard



[Attribution]: #9956-attribution
_

... des choses comme _#_, _;_, _&_ et _:_ dans les chaînes d'en-tête sont généralement ignorées/rayées au lieu d'échappés, et on peut aussi utiliser citation des liens de style pour faciliter l'utilisation rapide.

Notes

GitHub supporte la syntaxe :Word: dans les commits, les fichiers Lisez-moi, etc. Voir Gist (de rxaviers) si leur utilisation y est intéressante .

Et pour à peu près partout ailleurs, décimal ou hexadécimal peut être utilisé pour les navigateurs modernes; la feuille de triche de w3schools est très pratique , en particulier si vous utilisez des pseudo-éléments CSS _::before_ ou _::after_ avec symboles plus ton style.

Points bonus?

Juste au cas où quelqu'un se demanderait comment les images et autres liens d'un titre sont analysés dans un id ...

_- [Imaged](#alt-textbadge__examplehttpsexamplecom-to-somewhere)


## [![Alt Text][badge__example]](https://example.com) To Somewhere


[badge__example]:
  https://img.shields.io/badge/Left-Right-success.svg?labelColor=brown&logo=stackexchange
  "Eeak a mouse!"
_

Mises en garde

Le rendu MarkDown diffère d'un endroit à l'autre, alors ...

_## methodName([options]) => <code>Promise</code>
_

... sur GitHub aura un élément avec id tel que ...

_id="methodnameoptions--promise"
_

... où comme l'assainissement à la vanille entraînerait un id de ...

_id="methodnameoptions-codepromisecode"
_

... signifiant que l'écriture ou la compilation de fichiers MarkDown à partir de modèles nécessite soit de cibler une méthode de slugifeing , soit d'ajouter des configurations et une logique de script pour les différents malins moyens qui permettent de nettoyer le texte de l'en-tête.

4
S0AndS0

Depuis MultiMarkdown a été mentionné comme une option dans les commentaires.

Dans MultiMarkdown , la syntaxe d'un lien interne est simple.

Pour toute en-tête du document, indiquez simplement le nom de l'en-tête dans ce format [heading][] pour créer un lien interne.

Lisez plus ici: MultiMarkdown-5 Cross-references .

Références croisées

Une fonctionnalité souvent demandée était la possibilité pour Markdown de gérer automatiquement les liens au sein d'un document aussi facilement que de gérer les liens externes. À cette fin, j'ai ajouté la possibilité d'interpréter [Some Text] [] comme un lien croisé, si un en-tête nommé "Some Text" existe.

Par exemple, [Metadata] [] vous mènera à # Metadata (ou à ## Metadata, ## Metadata, #### Metadata, ##### Metadata, ###### Metadata).

Vous pouvez également inclure une étiquette facultative de votre choix pour aider à lever l'ambiguïté des cas où 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 appelé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 à l'aide du même identifiant que celui utilisé par un en-tête, 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 ensuite être utilisées pour les références croisées.

1
jwpfox

En utilisant kramdown, il semble que cela fonctionne bien:

[I want this to link to foo](#foo)
....
....
{: id="foo"}
### Foo are you?

Je vois qu'il a été mentionné que

[foo][#foo]
....
#Foo

fonctionne efficacement, mais le premier peut être une bonne alternative pour des éléments autres que les en-têtes ou les en-têtes comportant plusieurs mots.

1
kevin change

Quelques tours supplémentaires sur l'astuce <a name="">:

<a id="a-link"></a> Title
------
#### <a id="a-link"></a> Title (when you wanna control the h{N} with #'s)
0
laggingreflex