web-dev-qa-db-fra.com

Markdown pour créer des pages et une table des matières?

J'ai commencé à utiliser le mardown pour prendre des notes.

J'utilise marqué pour voir mes notes de démarques et sa beauté.

Mais comme mes notes s'allongent, j'ai du mal à trouver ce que je veux.

Je sais que markdown peut créer des tableaux, mais est-il capable de créer une table des matières qui saute à des sections ou de définir des sections de page dans Markdown?

Sinon, y a-t-il des lecteurs/rédacteurs Markdown qui pourraient faire de telles choses. La recherche serait une bonne chose à avoir aussi.

En bref, je veux en faire mon formidable outil de prise de notes et fonctionne un peu comme écrire un livre, etc.

211
resting

MultiMarkdown Composer semble générer une table des matières pour vous aider lors de l'édition. 

Il peut également y avoir l'une ou l'autre bibliothèque capable de générer des tables des matières: voir Extension de la table des matières de Python Markdown .

19
mxro

Vous pouvez essayer ceci. 

# Table of Contents
1. [Example](#example)
2. [Example2](#example2)
3. [Third Example](#third-example)

## Example
## Example2
## Third Example
243
Rick

Voici une méthode utile. Devrait produire des références cliquables dans n’importe quel éditeur MarkDown.

# Table of contents
1. [Introduction](#introduction)
2. [Some paragraph](#paragraph1)
    1. [Sub paragraph](#subparagraph1)
3. [Another paragraph](#paragraph2)

## This is the introduction <a name="introduction"></a>
Some introduction text, formatted in heading 2 style

## Some paragraph <a name="paragraph1"></a>
The first paragraph text

### Sub paragraph <a name="subparagraph1"></a>
This is a sub paragraph, formatted in heading 3 style

## Another paragraph <a name="paragraph2"></a>
The second paragraph text

Produit:

Table des matières

  1. Introduction
  2. Quelques paragraphes
    1. Sous paragraphe
  3. Un autre paragraphe

C'est l'introduction 

Quelques textes d'introduction, formatés dans le style du titre 2

Certains paragraphe 

Le texte du premier paragraphe

Sous paragraphe 

Ceci est un sous-paragraphe, formaté en style titre 3

Un autre paragraphe 

Le texte du deuxième paragraphe

125
Tum

Pour les utilisateurs de code Visual Studio , une bonne idée est d'utiliser le plugin Markdown TOC .

Pour l’installer, lancez le logiciel VS Code Quick Open (Ctrl+P), collez la commande suivante et appuyez sur Entrée.

ext install markdown-toc

Et pour générer la table des matières, ouvrez la palette de commandes (Ctrl+Shift+P) et sélectionnez le Markdown TOC:Insert/Update option ou utilisez Ctrl+MT.

23
coderade

Vous pouvez essayer ce script Ruby pour générer la table des matières à partir d’un fichier de démarquage.

 #!/usr/bin/env Ruby

fileName = ARGV[0]
fileName = "README.md" if !fileName

File.open(fileName, 'r') do |f|
  inside_code_snippet = false
  f.each_line do |line|
    forbidden_words = ['Table of contents', 'define', 'pragma']
    inside_code_snippet = !inside_code_snippet if line.start_with?('```')
    next if !line.start_with?("#") || forbidden_words.any? { |w| line =~ /#{w}/ } || inside_code_snippet

    title = line.gsub("#", "").strip
    href = title.gsub(" ", "-").downcase
    puts "  " * (line.count("#")-1) + "* [#{title}](\##{href})"
  end
end
21
albertodebortoli
# Table of Contents
1. [Example](#example)
2. [Example2](#example2)
3. [Third Example](#third-example)

## Example [](#){name=example}
## Example2 [](#){name=example2}
## [Third Example](#){name=third-example}

Si vous utilisez markdown supplémentaire, n'oubliez pas que vous pouvez ajouter des attributs spéciaux aux liens, en-têtes, clôtures de code et images.
https://michelf.ca/projects/php-markdown/extra/#spe-attr

20
Greg Bosen

Il existe 2 façons de créer votre TOC (résumé) dans votre document de démarquage.

1. manuellement

# My Table of content
- [Section 1](#id-section1)
- [Section 2](#id-section2)

<div id='id-section1'/>
## Section 1
<div id='id-section2'/>
## Section 2

2. par programme

Vous pouvez utiliser par exemple un script qui génère un résumé pour vous, jetez un coup d’œil à mon projet sous github - summaryMD -

J'ai aussi essayé d'autres modules script/npm (par exemple doctoc ) mais personne ne reproduit une table des matières avec des ancres actives.

16
Luca Davanzo

Pour le bénéfice de ceux d'entre nous qui fabriquons des fichiers README.md dans Atom (comment j'ai trouvé ce fil):

apm install markdown-toc

https://atom.io/packages/markdown-toc

8
msanford

Si vous souhaitez utiliser un outil javascript/node.js, consultez markdown-toc

7
jonschlinkert

J'ai écrit un script python qui analyse un fichier de réduction et génère une table des matières sous forme de liste de réduction: md-to-toc

Contrairement aux autres scripts que j'ai trouvés, md-to-toc prend correctement en charge les titres en double. De plus, il ne nécessite pas de connexion Internet, il fonctionne donc sur tous les fichiers md, pas seulement ceux disponibles dans un dépôt public. 

5
Antonio Maiorano

Je viens de coder une extension pour python-markdown, qui utilise son analyseur pour extraire les en-têtes et génère une table des matières sous forme de liste non ordonnée au format Markdown avec des liens locaux. Le fichier est 

... et il devrait être placé dans le répertoire markdown/extensions/ de l'installation de démarquage. Ensuite, tout ce que vous avez à faire est de taper des balises anchor <a> avec un attribut id="..." comme référence - donc pour un texte d’entrée comme celui-ci:

$ cat test.md 
Hello
=====

## <a id="sect one"></a>SECTION ONE ##

something here

### <a id='sect two'>eh</a>SECTION TWO ###

something else

#### SECTION THREE

nothing here

### <a id="four"></a>SECTION FOUR

also...

... l'extension peut s'appeler comme ceci: 

$ python -m markdown -x md_toc test.md 
* Hello
    * [SECTION ONE](#sect one)
        * [SECTION TWO](#sect two)
            * SECTION THREE
        * [SECTION FOUR](#four)

... et vous pouvez ensuite coller cette toc dans votre document de démarquage (ou avoir un raccourci dans votre éditeur de texte, qui appelle le script sur le document actuellement ouvert, puis insère la table des matières résultante dans le même document). 

Notez que les anciennes versions de python-markdown ne possèdent pas de module __main__.py et que, de ce fait, l’appel en ligne de commande ci-dessus ne fonctionnera pas pour ces versions. 

5
sdaau

Vous pouvez le générer en utilisant cette bash one-liner. Suppose que votre fichier de démarquage s'appelle FILE.md.

echo "## Contents" ; echo ; 
cat FILE.md | grep '^## ' | grep -v Contents | sed 's/^## //' | 
  while read -r title ; do 
    link=$(echo $title | tr 'A-Z ' 'a-z-') ; 
    echo "- [$title](#$link)" ; 
    done
5
Asim Jalis

Les balises d'ancrage générées par différents analyseurs syntaxiques Markdown ne sont pas paires.

Si vous travaillez avec les analyseurs GFM (GitHub Flavored Markdown) ou Redcarpet de Markdown, j'ai écrit un plugin Vim pour gérer la table des matières.

Caractéristiques

  1. Générer une table des matières pour les fichiers Markdown.

    Analyseurs Markdown pris en charge:

    • GFM (GitHub Flavored Markdown)
    • Tapis rouge
  2. Mettre à jour la table des matières existante.

  3. Mise à jour automatique de la table des matières existante lors de l'enregistrement.

Captures d'écran

vim-markdown-toc

Usage

Générer une table des matières

Déplacez le curseur sur la ligne que vous souhaitez ajouter à la table des matières, puis tapez une commande ci-dessous qui vous convient. La commande générera des en-têtes après le curseur dans la table des matières.

  1. :GenTocGFM

    Générer une table des matières dans le style de lien GFM.

    Cette commande convient aux fichiers Markdown dans les référentiels GitHub, tels que les fichiers README.md et Markdown pour GitBook.

  2. :GenTocRedcarpet

    Générez la table des matières dans le style de lien Redcarpet.

    Cette commande convient à Jekyll ou n’importe où ailleurs utilise Redcarpet comme analyseur syntaxique Markdown.

    Vous pouvez visualiser ici pour connaître les différences entre les liens toc de style GFM et Redcarpet.

Mettre à jour manuellement la table des matières existante

Généralement, vous n'avez pas besoin de le faire, la table des matières existante sera mise à jour automatiquement lors de l'enregistrement par défaut. Si vous voulez le faire manuellement, utilisez simplement la commande :UpdateToc.

Téléchargements et documents

https://github.com/mzlogin/vim-markdown-toc

5
Zhuang Ma

Je viens de commencer à faire la même chose (prendre des notes dans Markdown). J'utilise Sublime Text 2 avec le plugin MarkdownPreview . L'analyseur de démarquage intégré prend en charge [TOC].

3
Martin

Vous pouvez également utiliser pandoc, le "couteau suisse" pour convertir "un format de balise en un autre" . Il peut générer automatiquement une table des matières dans le document de sortie si vous fournissez l'argument --toc.

Conseil: Si vous voulez une table des matières dans la sortie html, vous devez également fournir -s qui génère un document autonome.

Exemple de ligne de commande Shell:

./pandoc -s --toc input.md -o output.html
3
M.Geiger

Typora génère Table of Content en ajoutant [TOC] à votre document.

3
Paul Jurczak

MultiMarkdown 4.7 a une macro {{TOC}} qui insère une table des matières.

2
Michael R

Basé sur albertodebortoli answer a créé la fonction avec des vérifications supplémentaires et la substitution des signes de ponctuation.

# @fn       def generate_table_of_contents markdown # {{{
# @brief    Generates table of contents for given markdown text
#
# @param    [String]  markdown Markdown string e.g. File.read('README.md')
#
# @return   [String]  Table of content in markdown format.
#
def generate_table_of_contents markdown
  table_of_contents = ""
  i_section = 0
  # to track markdown code sections, because e.g. Ruby comments also start with #
  inside_code_section = false
  markdown.each_line do |line|
    inside_code_section = !inside_code_section if line.start_with?('```')

    forbidden_words = ['Table of contents', 'define', 'pragma']
    next if !line.start_with?('#') || inside_code_section || forbidden_words.any? { |w| line =~ /#{w}/ }

    title = line.gsub("#", "").strip
    href = title.gsub(/(^[!.?:\(\)]+|[!.?:\(\)]+$)/, '').gsub(/[!.,?:; \(\)-]+/, "-").downcase

    bullet = line.count("#") > 1 ? " *" : "#{i_section += 1}."
    table_of_contents << "  " * (line.count("#") - 1) + "#{bullet} [#{title}](\##{href})\n"
  end
  table_of_contents
end
2
dmigous

Utilisez toc.py qui est un petit script python qui génère une table des matières pour votre démarque.

Usage:

  • Dans votre fichier Markdown, ajoutez <toc> à l'endroit où vous souhaitez placer la table des matières.
  • $python toc.py README.md (Utilisez votre nom de fichier de démarquage au lieu de README.md)

À votre santé!

1
Dhruv Batheja

En fonction de votre flux de travail, vous voudrez peut-être regarder strapdown

C'est un fork de l'original ( http://strapdownjs.com ) qui ajoute la génération de la table des matières.

Il y a un fichier de configuration Apache sur le référentiel (il est possible que la mise à jour ne soit pas encore correctement mise à jour), si vous préférez ne pas écrire dans des fichiers HTML.

1
dgn

Je ne suis pas sûr de savoir quelle est la documentation officielle de Markdown . La référence croisée peut être écrite juste entre crochets [Heading], ou avec des crochets vides [Heading][].

Les deux fonctionnent avec pandoc . J'ai donc créé un script rapide bash, qui remplacera $ TOC dans le fichier md par sa table des matières. (Vous aurez besoin d'envsubst, cela pourrait ne pas faire partie de votre distribution)

#!/bin/bash
filename=$1
__TOC__=$(grep "^##" $filename | sed -e 's/ /1. /;s/^##//;s/#/   /g;s/\. \(.*\)$/. [\1][]/')
export __TOC__
envsubst '$__TOC__' < $filename
1
dosmanak

Dans Visual Studio Code (VSCode), vous pouvez utiliser l’extension Markdown All in One .

Une fois installé, suivez les étapes ci-dessous:

  1. Presse CTRL+SHIFT+P
  2. Sélectionnez Markdown: créer une table des matières
1
Marco Lackovic

Si vous utilisez Eclipse, vous pouvez utiliser le Ctrl+O (contour), cela affichera l’équivalent de la table des matières et permettra de chercher dans les titres de section (autocomplete).

Vous pouvez également ouvrir la vue Structure (Fenêtre -> Afficher la vue -> Structure), mais la recherche ne s’effectue pas automatiquement.

1
Christophe Roussy

Il existe un script Ruby appelé gen_markdown_toc.rb qui peut générer automatiquement une table des matières GFM Markdown. Il est similaire mais légèrement différent de certains autres scripts publiés ici.

Étant donné un fichier d'entrée Markdown comme:

# Lorem Ipsum

Lorem ipsum dolor sit amet, mei alienum adipiscing te, has no possit delicata. Te nominavi suavitate sed, quis alia cum no, has an malis dictas explicari. At mel nonumes eloquentiam, eos ea dicat nullam. Sed eirmod gubergren scripserit ne, mei timeam nonumes te. Qui ut tale sonet consul, vix integre oportere an. Duis ullum at ius.

## Et cum

Et cum affert dolorem habemus. Sale malis at mel. Te pri copiosae hendrerit. Cu nec agam iracundia necessitatibus, tibique corpora adipisci qui cu. Et vix causae consetetur deterruisset, ius ea inermis quaerendum.

### His ut

His ut feugait consectetuer, id mollis nominati has, in usu insolens tractatos. Nemore viderer torquatos qui ei, corpora adipiscing ex nec. Debet vivendum ne nec, ipsum zril choro ex sed. Doming probatus euripidis vim cu, habeo apeirian et nec. Ludus pertinacia an pro, in accusam menandri reformidans nam, sed in tantas semper impedit.

### Doctus voluptua

Doctus voluptua his eu, cu ius mazim invidunt incorrupte. Ad maiorum sensibus mea. Eius posse sonet no vim, te paulo postulant salutatus ius, augue persequeris eum cu. Pro omnesque salutandi evertitur ea, an mea fugit gloriatur. Pro ne menandri intellegam, in vis clita recusabo sensibus. Usu atqui scaevola an.

## Id scripta

Id scripta alterum pri, nam audiam labitur reprehendunt at. No alia putent est. Eos diam bonorum oportere ad. Sit ad admodum constituto, vide democritum id eum. Ex singulis laboramus vis, ius no minim libris deleniti, euismod sadipscing vix id.

Il génère cette table des matières:

$ gen_markdown_toc.rb FILE.md 
#### Table of contents

1. [Et cum](#et-cum)
    * [His ut](#his-ut)
    * [Doctus voluptua](#doctus-voluptua)
2. [Id scripta](#id-scripta)

Voir aussi mon blog post à ce sujet.

1
Alex Harvey

Vous pouvez utiliser la [TOC] à la première ligne puis, en bas, la seule chose à faire est de vous assurer que les titres sont dans la même police plus grande. La table des matières sortirait automatiquement. (Mais cela n'apparaît que dans certains éditeurs Markdown, je n'ai pas tout essayé) 

0
Cecilé

J'ai utilisé https://github.com/ekalinin/github-markdown-toc qui fournit un utilitaire de ligne de commande qui génère automatiquement la table des matières à partir d'un document de démarquage.

Aucun plugin, ou macros ou autres dépendances. Une fois l’utilitaire installé, collez simplement la sortie de cet utilitaire à l’emplacement du document où vous souhaitez que la table des matières se trouve. Très simple à utiliser.

$ cat README.md | ./gh-md-toc -
0
mmccabe

Sur Gitlab, Markdown supporte ceci: [[_TOC_]]

0
Nicolas Thery

Si votre fichier Markdown doit être affiché dans un référentiel sur bitbucket.org, vous devez ajouter [TOC] à l'emplacement où vous souhaitez que votre table des matières. Il sera ensuite généré automatiquement. Plus d'infos ici:

https://confluence.atlassian.com/bitbucket/add-a-table-of-contents-to-a-wikiwiki222551163.html

0
Jannik

Pour moi, la solution proposée par @Tum fonctionne à merveille pour une table des matières à 2 niveaux. Cependant, pour le 3ème niveau cela n'a pas fonctionné. Il n'affichait pas le lien comme pour les 2 premiers niveaux, mais plutôt le texte en clair 3.5.1. [bla bla bla](#blablabla) <br>.

Ma solution est un ajout à la solution de @Tum (qui est très simple) pour les personnes qui ont besoin d’une table des matières à 3 niveaux ou plus. 

Au deuxième niveau, un simple onglet fera le retrait correctement pour vous. Mais il ne supporte pas 2 onglets. Au lieu de cela, vous devez utiliser un onglet et ajouter vous-même autant de &nbsp; que nécessaire afin d'aligner correctement le 3ème niveau.

Voici un exemple utilisant 4 niveaux (les niveaux les plus élevés deviennent terribles):

# Table of Contents
1. [Title](#title) <br>
    1.1. [sub-title](#sub_title) <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.1.1. [sub-sub-title](#sub_sub_title)
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.1.1.1. [sub-sub-sub-title](#sub_sub_sub_title)

# Title <a name="title"></a>
Heading 1

## Sub-Title <a name="sub_title"></a>
Heading 2

### Sub-Sub-Title <a name="sub_sub_title"></a>
Heading 3

#### Sub-Sub-Sub-Title <a name="sub_sub_sub_title"></a>
Heading 4

Cela donne le résultat suivant où chaque élément de la table des matières est un lien vers la section correspondante. Notez également le <br> afin d’ajouter une nouvelle ligne au lieu d’être sur la même ligne.

Table des matières

  1. Titre 
    1.1. Sous-titre 
    1.1.1. Sous-sous-titre 
    1.1.1.1. Sous-sous-sous-titre

Titre 

Titre 1

Sous-titre 

Rubrique 2

Sous-sous-titre 

Rubrique 3

Rubrique 4

0
Gabriel L.

Il suffit d'ajouter le nombre de diapositives! ça marche avec markdown ioslides et la révélation

## Table of Contents

 1. [introduction](#3)
 2. [section one](#5)
0
Abdelali Amghar