versuchen Sie es mit markiertem Toc , es kann nicht viel einfacher werden.
Jonschlinkert
1
Wenn Sie Linux verwenden und keine zusätzliche Software installieren möchten, versuchen Sie es mit github-markdown-toc (nur awk unter der Haube).
Shorrty
Ich rendere mehrere Markdown-Dateien in Jade-Vorlagen in HTML. Daher muss mein Inhaltsverzeichnis mehr Informationen enthalten, als in einer Markdown-Datei enthalten sind. Meine Lösung besteht darin, das Inhaltsverzeichnis aus dem HTML-Code selbst mit der Bibliothek node.js zu generierentoc
Plato
2
Ich habe drei verschiedene Markdown-Inhaltsverzeichnisgeneratoren erstellt, die versuchen, "es richtig zu machen", einschließlich des oben aufgeführten Markierungs-Inhaltsverzeichnisses. markdown-toc ist mein Favorit, es verwendet einen echten Markdown-Parser ( bemerkenswert , der der Spezifikation [commonmark] (commonmark.org) folgt, ermöglicht die Aktualisierung von Inhaltsverzeichnissen, verfügt über eine CLI und eine API und wird jetzt in Tausenden von Projekten verwendet
jonschlinkert
Antworten:
141
Ich habe zwei Optionen erstellt, um ein Toc für Markdown mit Github-Geschmack zu generieren:
npx doctoc . Hinzufügen eines Inhaltsverzeichnisses zu allen Markdown-Dateien im aktuellen und allen Unterverzeichnissen.
DocToc WebApp
Wenn Sie es zuerst online ausprobieren möchten, gehen Sie zur Doctoc- Site, fügen Sie den Link der Markdown-Seite ein und es wird ein Inhaltsverzeichnis generiert, das Sie oben in Ihre Markdown-Datei einfügen können.
Github Wikis und Anker
Wie Matthew Flaschen in den Kommentaren unten hervorhob, hat GitHub für seine Wiki-Seiten zuvor nicht die Anker generiert, die davon doctocabhängen.
Das Inhaltsverzeichnis sieht gut aus, aber GitHub generiert keine Anker für die tatsächlichen Abschnitte, sodass die Links unterbrochen werden. Ich werde sie vorerst manuell hinzufügen. Dies ist ein GitHub-Wiki.
Die erste Zeile startet nur eine ungeordnete Liste und wird tatsächlich weggeworfen.
Dies führt zu einem verschachtelten Satz ungeordneter Listen unter Verwendung der Überschriften im Dokument.
Hinweis: Dies sollte für GitHub-Seiten funktionieren, nicht für GitHub Flavored Markdown (GFM), wie es in Kommentaren oder Wiki-Seiten verwendet wird. AFAIK dafür gibt es keine Lösung.
Beachten Sie, dass dies eine Maruku-Funktion ist, nicht Markdown an sich und wahrscheinlich nicht einmal GH Flavored Markdown. GH-Seiten verwenden jedoch Maruku.
Rebecca Scott
@ KevinSuttle bist du sicher? Jekyll enthält Redcarpet, aber Maruku sieht immer noch wie die Standardeinstellung aus (es sei denn, GH verwendet eine andere Jekyll-Konfiguration). Github.com/mojombo/jekyll/blob/master/lib/jekyll.rb#L66
Rebecca Scott
10
@ BenScott Es sieht so aus, als ob Ihre Lösung nur für Github-Seiten funktioniert. Kennen Sie eine Lösung für das Github-Wiki?
Reprogrammierer
13
Wenn Sie Markdown-Dateien mit Vim bearbeiten, können Sie dieses Plugin vim-markdown-toc ausprobieren .
Die Verwendung ist einfach. Bewegen Sie den Cursor einfach an die Stelle, an der Sie das Inhaltsverzeichnis anhängen und ausführen möchten :GenTocGFM . Fertig!
Screenshots:
Eigenschaften:
Generieren Sie toc für Markdown-Dateien. (Unterstützt GitHub Flavored Markdown und Redcarpet)
Stellen Sie sicher, dass Sie einen gemeinsamen Inhaltsverzeichnisstil finden, falls Sie an MD-Dateien zusammenarbeiten und verschiedene Editoren / Plugins beteiligt sind, damit nicht bei jedem anderen Commit Änderungen am Inhaltsverzeichnis vorgenommen werden. Mögliche Ergänzungen ~/.vimrcdazu: Listenzeichen ändern mit let g:vmt_list_item_char = "-", Überschriften vor Inhaltsverzeichnis mit einfügen let g:vmt_include_headings_before = 1. Weitere Informationen finden Sie im Abschnitt mit den Dokumentoptionen , z. B. zum Ändern des Zauntextes.
Wolfson
9
Es ist nicht automatisch, verwendet jedoch reguläre Notepad ++ - Ausdrücke:
Ersetzen Sie alle zuerst durch die zweiten (entfernt alle Zeilen ohne Überschriften)
Danke für den Vorschlag und die Links. Ich werde es unserer internen Funktionsanforderungsliste hinzufügen, damit das Team es sehen kann.
Lassen Sie uns diese Frage positiv bewerten, bis es passiert.
Eine andere Problemumgehung besteht darin, Asciidoc anstelle von Markdown zu verwenden, wodurch Inhaltsverzeichnisse gerendert werden . Ich bin heutzutage für meinen Inhalt zu diesem Ansatz übergegangen.
Ich würde eher hoffen, dass GFM es eines Tages zur Verfügung stellt. Es ist wirklich eine Courius-Sache für mich, während SourceForges Markdown die Syntax hat, um dieses Inhaltsverzeichnis standardmäßig zu generieren .
Chetabahana
8
Github Flavored Markdown verwendet RedCarpet als Markdown-Engine. Aus dem RedCarpet-Repo :
: with_toc_data - Fügen Sie jedem Header im Ausgabe-HTML HTML-Anker hinzu, um die Verknüpfung mit jedem Abschnitt zu ermöglichen.
Es scheint, dass Sie auf Renderer-Ebene gehen müssen, um dieses Flag zu setzen, was auf Github offensichtlich nicht möglich ist. Beim neuesten Update von Github Pages scheint die automatische Verankerung für Header aktiviert zu sein, wodurch verknüpfbare Überschriften erstellt werden. Nicht genau das, was Sie wollen, aber es könnte Ihnen helfen, ein Inhaltsverzeichnis für Ihr Dokument etwas einfacher zu erstellen (wenn auch manuell).
Eine sehr bequeme Möglichkeit, ein Inhaltsverzeichnis für eine Mardown-Datei zu erstellen, wenn Sie mit Visual Studio Code arbeiten, ist die Erweiterung Markdown-TOC .
Es kann vorhandenen Markdown-Dateien einen Toc hinzufügen und den Toc beim Speichern sogar auf dem neuesten Stand halten.
Ein weiteres nettes VS-Code-Plugin (großartige .md-Unterstützung mit netten Funktionen, einschließlich GitHub & GitLab-TOC) ist Markdown-All-in-One .
Wolfson
4
Es ist möglich, automatisch eine Webseite mit http://documentup.com/ aus der README.mdDatei zu generieren . Es wird kein Inhaltsverzeichnis erstellt, aber für viele könnte es den Grund für die Erstellung eines Inhaltsverzeichnisses lösen.
Mein Kollege @schmiedc und ich haben ein GreaseMonkey-Skript erstellt , das eine neue TOCSchaltfläche links von der h1Schaltfläche installiert, die die hervorragende markdown-jsBibliothek zum Hinzufügen / Aktualisieren eines Inhaltsverzeichnisses verwendet.
Der Vorteil gegenüber Lösungen wie doctoc besteht darin, dass es in den Wiki-Editor von GitHub integriert ist und keine Benutzer an ihrer Befehlszeile arbeiten müssen (und dass Benutzer Tools wie installieren müssen node.js). In Chrome funktioniert dies durch Ziehen und Ablegen auf die Seite "Erweiterungen". In Firefox müssen Sie die Erweiterung "GreaseMonkey" installieren.
Es funktioniert mit einfachem Markdown (dh es werden Codeblöcke nicht korrekt behandelt, da dies eine GitHub-Erweiterung für Markdown ist). Beiträge willkommen.
Vielen Dank! Ich musste Tampermonkey verwenden, wie in dieser Antwort vorgeschlagen , um es in Chrome zu installieren, und es funktionierte! Was würde es brauchen, damit Ihr Skript Inhaltsverzeichnisse für normale Markdown-Dateien im Github-Repo generiert?
Lebensbalance
1
Dies ist keine direkte Antwort auf diese Frage, da so viele Leute Problemumgehungen bereitgestellt haben. Ich glaube nicht, dass die Erstellung eines Inhaltsverzeichnisses bisher offiziell von Github unterstützt wurde. Wenn Sie möchten, dass GitHub automatisch ein Inhaltsverzeichnis auf den GFM-Vorschauseiten rendert, nehmen Sie an der Diskussion zum offiziellen Problem mit Funktionsanfragen teil .
Derzeit ist die Verwendung der Markdown-Syntax nicht möglich (siehe die laufende Diskussion bei GitHub ). Sie können jedoch einige externe Tools verwenden, z.
Das Hosting des Online-Inhaltsverzeichnisses (raychenon / play-table-of- content ) auf tableofcontent.eu wurde aufgrund der Kosten von AWS eingestellt.
Michael Freidgeim
0
Für Githubs Texteditor Atom sehen Sie sich dieses fantastische Plugin (oder "Paket" in Atom-lingo) an, das "Inhaltsverzeichnis) von Überschriften aus analysierten Markdown- Dateien generiert :
Einmal als Atom-Paket installiert, können Sie über die Verknüpfung ctrl-alt-cein Inhaltsverzeichnis basierend auf Ihrer Markdown-Doc-Struktur an der aktuellen Cursorposition einfügen ...
Screenshots:
Atom-Tastenkombinationen
markdown-toc bietet Ihnen die folgenden Standard-Tastenkombinationen zur Steuerung des Plugins in Atom:
ctrl-alt-c => Erstellen Sie das Inhaltsverzeichnis an der Cursorposition
ctrl-alt-u => Inhaltsverzeichnis aktualisieren
ctrl-alt-r => Inhaltsverzeichnis löschen
Plugin-Funktionen (aus der README-Datei des Projekts)
Automatische Verknüpfung über Ankertags, z. B. # A 1→#a-1
Tiefenkontrolle [1-6] mit depthFrom:1 unddepthTo:6
Aktivieren oder deaktivieren Sie Links mit withLinks:1
Liste beim Speichern mit aktualisieren updateOnSave:1
Verwenden Sie die geordnete Liste (1. ..., 2. ...) mit orderedList:0
Hier ist ein Shell-Skript, das ich heute dafür zusammengestellt habe. Möglicherweise müssen Sie es an Ihre Bedürfnisse anpassen, aber es sollte ein guter Ausgangspunkt sein.
cat README.md \
| sed -e '/```/ r pf' -e '/```/,/```/d' \
| grep "^#" \
| tail -n +2 \
| tr -d '`' \
| sed 's/# \([a-zA-Z0-9`. -]\+\)/- [\1](#\L\1)/' \
| awk -F'(' '{for(i=2;i<=NF;i++)if(i==2)gsub(" ","-",$i);}1' OFS='(' \
| sed 's/^####/ /' \
| sed 's/^###/ /' \
| sed 's/^##/ /' \
| sed 's/^#//'
Wenn jemand einen besseren Weg kennt, um diese endgültigen # Ersetzungen vorzunehmen, fügen Sie bitte einen Kommentar hinzu. Ich habe verschiedene Dinge ausprobiert und war mit keinem zufrieden, also habe ich es nur brutal erzwungen.
Die meisten anderen Antworten erfordern die Installation eines Tools. Ich habe eine schnelle und einfache Online-Lösung gefunden: https://imthenachoman.github.io/nGitHubTOC .
Für jede Markdown-Eingabe wird ein Inhaltsverzeichnis generiert. Sie können die minimale und maximale Überschriftenebene angeben.
toc
Antworten:
Ich habe zwei Optionen erstellt, um ein Toc für Markdown mit Github-Geschmack zu generieren:
DocToc Command Line Tool ( Quelle ) erfordert node.js
Installation:
Verwendung:npm install doctoc
npx doctoc .
Hinzufügen eines Inhaltsverzeichnisses zu allen Markdown-Dateien im aktuellen und allen Unterverzeichnissen.DocToc WebAppWenn Sie es zuerst online ausprobieren möchten, gehen Sie zur Doctoc- Site, fügen Sie den Link der Markdown-Seite ein und es wird ein Inhaltsverzeichnis generiert, das Sie oben in Ihre Markdown-Datei einfügen können.Github Wikis und Anker
Wie Matthew Flaschen in den Kommentaren unten hervorhob, hat GitHub für seine Wiki-Seiten zuvor nicht die Anker generiert, die davon
doctoc
abhängen.UPDATE: Sie haben dieses Problem jedoch behoben .
quelle
GitHub Pages (im Grunde genommen ein Wrapper für Jekyll) scheint kramdown zu verwenden , das Maruku vollständig implementiert , und unterstützt daher ein automatisch generiertes Inhaltsverzeichnis über ein
toc
Attribut:Die erste Zeile startet nur eine ungeordnete Liste und wird tatsächlich weggeworfen.
Dies führt zu einem verschachtelten Satz ungeordneter Listen unter Verwendung der Überschriften im Dokument.
Hinweis: Dies sollte für GitHub-Seiten funktionieren, nicht für GitHub Flavored Markdown (GFM), wie es in Kommentaren oder Wiki-Seiten verwendet wird. AFAIK dafür gibt es keine Lösung.
quelle
Wenn Sie Markdown-Dateien mit Vim bearbeiten, können Sie dieses Plugin vim-markdown-toc ausprobieren .
Die Verwendung ist einfach. Bewegen Sie den Cursor einfach an die Stelle, an der Sie das Inhaltsverzeichnis anhängen und ausführen möchten
:GenTocGFM
. Fertig!Screenshots:
Eigenschaften:
Generieren Sie toc für Markdown-Dateien. (Unterstützt GitHub Flavored Markdown und Redcarpet)
Aktualisieren Sie das vorhandene toc.
Auto Update toc beim Speichern.
quelle
~/.vimrc
dazu: Listenzeichen ändern mitlet g:vmt_list_item_char = "-"
, Überschriften vor Inhaltsverzeichnis mit einfügenlet g:vmt_include_headings_before = 1
. Weitere Informationen finden Sie im Abschnitt mit den Dokumentoptionen , z. B. zum Ändern des Zauntextes.Es ist nicht automatisch, verwendet jedoch reguläre Notepad ++ - Ausdrücke:
Ersetzen Sie alle zuerst durch die zweiten (entfernt alle Zeilen ohne Überschriften)
Dann (konvertiert Header III in Leerzeichen)
Dann (konvertiert Header II in Leerzeichen)
Dann (entfernen Sie nicht verwendete Zeichen am Anfang und am Ende des Link-Titels)
Dann (letzte Token in Kleinbuchstaben umwandeln und anstelle von Leerzeichen streichen)
Entfernen Sie nicht verwendete letzte Pfund und anfängliche Striche:
Entfernen Sie nutzlose Zeichen in Links:
Und schließlich fügen Sie Klammern um die letzten Links hinzu:
Und voilà! Sie können dies sogar in ein globales Makro einfügen, wenn Sie es genügend oft wiederholen.
quelle
Es ist nicht möglich, außer für die vorgeschlagenen Problemumgehungen.
Ich schlug [email protected] und Steven die Erweiterung des TOC von Kramdown und andere Möglichkeiten vor ! Ragnarök antwortete mit dem Üblichen:
Lassen Sie uns diese Frage positiv bewerten, bis es passiert.
Eine andere Problemumgehung besteht darin, Asciidoc anstelle von Markdown zu verwenden, wodurch Inhaltsverzeichnisse gerendert werden . Ich bin heutzutage für meinen Inhalt zu diesem Ansatz übergegangen.
quelle
Github Flavored Markdown verwendet RedCarpet als Markdown-Engine. Aus dem RedCarpet-Repo :
Es scheint, dass Sie auf Renderer-Ebene gehen müssen, um dieses Flag zu setzen, was auf Github offensichtlich nicht möglich ist. Beim neuesten Update von Github Pages scheint die automatische Verankerung für Header aktiviert zu sein, wodurch verknüpfbare Überschriften erstellt werden. Nicht genau das, was Sie wollen, aber es könnte Ihnen helfen, ein Inhaltsverzeichnis für Ihr Dokument etwas einfacher zu erstellen (wenn auch manuell).
quelle
Eine sehr bequeme Möglichkeit, ein Inhaltsverzeichnis für eine Mardown-Datei zu erstellen, wenn Sie mit Visual Studio Code arbeiten, ist die Erweiterung Markdown-TOC .
Es kann vorhandenen Markdown-Dateien einen Toc hinzufügen und den Toc beim Speichern sogar auf dem neuesten Stand halten.
quelle
Es ist möglich, automatisch eine Webseite mit http://documentup.com/ aus der
README.md
Datei zu generieren . Es wird kein Inhaltsverzeichnis erstellt, aber für viele könnte es den Grund für die Erstellung eines Inhaltsverzeichnisses lösen.Eine weitere Alternative zu Documentup ist Flatdoc: http://ricostacruz.com/flatdoc/
quelle
Gitdown ist ein Markdown-Präprozessor für Github.
Mit Gitdown können Sie:
Gitdown optimiert allgemeine Aufgaben im Zusammenhang mit der Verwaltung einer Dokumentationsseite für ein GitHub-Repository.
Die Verwendung ist unkompliziert:
Sie können es entweder als separates Skript oder als Teil der Build-Skript-Routine (z. B. Gulp ) verwenden.
quelle
Verwenden Sie coryfklein / doctoc , eine Abzweigung von thlorenz / doctoc , die nicht jedem Inhaltsverzeichnis " mit DocToc generiert " hinzufügt .
quelle
Mein Kollege @schmiedc und ich haben ein GreaseMonkey-Skript erstellt , das eine neue
TOC
Schaltfläche links von derh1
Schaltfläche installiert, die die hervorragendemarkdown-js
Bibliothek zum Hinzufügen / Aktualisieren eines Inhaltsverzeichnisses verwendet.Der Vorteil gegenüber Lösungen wie doctoc besteht darin, dass es in den Wiki-Editor von GitHub integriert ist und keine Benutzer an ihrer Befehlszeile arbeiten müssen (und dass Benutzer Tools wie installieren müssen
node.js
). In Chrome funktioniert dies durch Ziehen und Ablegen auf die Seite "Erweiterungen". In Firefox müssen Sie die Erweiterung "GreaseMonkey" installieren.Es funktioniert mit einfachem Markdown (dh es werden Codeblöcke nicht korrekt behandelt, da dies eine GitHub-Erweiterung für Markdown ist). Beiträge willkommen.
quelle
Dies ist keine direkte Antwort auf diese Frage, da so viele Leute Problemumgehungen bereitgestellt haben. Ich glaube nicht, dass die Erstellung eines Inhaltsverzeichnisses bisher offiziell von Github unterstützt wurde. Wenn Sie möchten, dass GitHub automatisch ein Inhaltsverzeichnis auf den GFM-Vorschauseiten rendert, nehmen Sie an der Diskussion zum offiziellen Problem mit Funktionsanfragen teil .
quelle
Derzeit ist die Verwendung der Markdown-Syntax nicht möglich (siehe die laufende Diskussion bei GitHub ). Sie können jedoch einige externe Tools verwenden, z.
Alternativ können Sie
AsciiDoc
stattdessen (z. B.README.adoc
) zwie in diesem Kommentar vorgeschlagen . Überprüfen Sie die Demo hier .
quelle
Für Githubs Texteditor Atom sehen Sie sich dieses fantastische Plugin (oder "Paket" in Atom-lingo) an, das "Inhaltsverzeichnis) von Überschriften aus analysierten Markdown- Dateien generiert :
Markdown-toc
Einmal als Atom-Paket installiert, können Sie über die Verknüpfung
ctrl-alt-c
ein Inhaltsverzeichnis basierend auf Ihrer Markdown-Doc-Struktur an der aktuellen Cursorposition einfügen ...Screenshots:
Atom-Tastenkombinationen
markdown-toc bietet Ihnen die folgenden Standard-Tastenkombinationen zur Steuerung des Plugins in Atom:
ctrl-alt-c
=> Erstellen Sie das Inhaltsverzeichnis an der Cursorpositionctrl-alt-u
=> Inhaltsverzeichnis aktualisierenctrl-alt-r
=> Inhaltsverzeichnis löschenPlugin-Funktionen (aus der README-Datei des Projekts)
# A 1
→#a-1
depthFrom:1
unddepthTo:6
withLinks:1
updateOnSave:1
orderedList:0
quelle
Hier ist ein Shell-Skript, das ich heute dafür zusammengestellt habe. Möglicherweise müssen Sie es an Ihre Bedürfnisse anpassen, aber es sollte ein guter Ausgangspunkt sein.
Wenn jemand einen besseren Weg kennt, um diese endgültigen # Ersetzungen vorzunehmen, fügen Sie bitte einen Kommentar hinzu. Ich habe verschiedene Dinge ausprobiert und war mit keinem zufrieden, also habe ich es nur brutal erzwungen.
quelle
Es gibt jetzt eine GitHub-Aktion, die dies erreicht:
https://github.com/marketplace/actions/toc-generator
README.md
.github/workflows/toc.yml
quelle
Die meisten anderen Antworten erfordern die Installation eines Tools. Ich habe eine schnelle und einfache Online-Lösung gefunden: https://imthenachoman.github.io/nGitHubTOC .
Für jede Markdown-Eingabe wird ein Inhaltsverzeichnis generiert. Sie können die minimale und maximale Überschriftenebene angeben.
Der Quellcode befindet sich unter https://github.com/imthenachoman/nGitHubTOC
quelle