Markdown do tworzenia stron i spisu treści?

357

Zacząłem używać Markdown do robienia notatek.

Używam zaznaczonego, aby przeglądać moje notatki przeceny i jego piękne.

Ale kiedy moje notatki stają się dłuższe, trudno mi znaleźć to, czego chcę.

Wiem, że wyprzedaż może tworzyć tabele, ale czy jest w stanie stworzyć spis treści, który przeskakuje do sekcji lub definiuje sekcje strony w Markdown?

Alternatywnie, są czytelnicy / redaktorzy przecen, którzy mogliby robić takie rzeczy. Wyszukiwanie byłoby również dobrą opcją.

Krótko mówiąc, chcę, aby stało się to moim niesamowitym narzędziem do robienia notatek i funkcjami podobnymi do pisania książki itp.

spoczynkowy
źródło
2
jeśli chcesz użyć narzędzia javascript / node.js, spróbuj oznaczone-toc
jonschlinkert
@jonschlinkert Powinieneś przesłać to jako odpowiedź! Obecnie odpowiedzi sugerują tylko narzędzia, które albo nie są wolne, albo Python. Niezbyt duży wybór.
Domi
8
Powinienem chyba wspomnieć, że w LaTeX można to osiągnąć \tableofcontents. Jeśli koło zostanie wymyślone na nowo, lepiej byłoby skopiować dobre części.
Eero Aaltonen,
2
Markdown
Podobnie reStructuredText ma wbudowaną dyrektywę dla spisu treści, która w najprostszej formie wygląda jak .. contents::.
saaj

Odpowiedzi:

37

Wydaje się, że MultiMarkdown Composer generuje spis treści, który pomaga podczas edycji.

Może być też jedna lub druga biblioteka, która może generować spis treści: patrz Rozszerzenie TOC Python Markdown .

MXRO
źródło
17
MultiMarkdown Composer jest tylko MacOS
chmike
1
Działający link do Python Markdown TOC: python-markdown.github.io/extensions/toc
Jan
2
Aplikacja nie jest dostępna w regionie Wielkiej Brytanii.
kenorb
Rozszerzenie TOC produkuje toki HTML, a nie Markdown. To niezwykłe, że to trudne.
rjurney
394

Możesz spróbować.

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


## Example
## Example2
## Third Example
## [Fourth Example](http://www.fourthexample.com) 
Stóg
źródło
10
Trzeci przykład powyżej nie działa. ## Example ## "Example2" ## Third Example<a name="third-example" /> to jedyny sposób, w jaki do tej pory mogłem go połknąć. Z pewnością trzeci znacznik zostałby zinterpretowany jako - #Thirdpo którym następuje spacja - a następnie słowo Przykład - we fragmencie powyżej? Łączniki w ogóle nie działają. Dzięki
twobob,
Ten przykład ma służyć jako przykład dla więcej niż jednego słowa. Wszystkie słowa są podzielone na bez blokowania wielkich liter i bez spacji.
Rick,
6
Działa dobrze w RStudio. Chcę tylko dodać, że niemieccy umlaut np. Ü muszą być napisani bez umlaut w kotwicy tj.1. [Einführung](#einfuhrung)
steinbock
4
Zakotwiczenia nie są tworzone automatycznie dla nagłówków w Bitbucket v4.5.2
Mike Rylander,
1
Czwarty przykład jest tym, czego szukałem. Dzięki!
kenecaswell
219

Oto przydatna metoda. Powinny generować klikalne odniesienia w dowolnym edytorze 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

Produkuje:

Spis treści

  1. Wprowadzenie
  2. Niektóre akapity
    1. Akapit
  3. Kolejny akapit

To jest wprowadzenie

Trochę tekstu wprowadzającego, sformatowanego w stylu nagłówka 2

Niektóre akapity

Tekst pierwszego akapitu

Akapit

To jest akapit, sformatowany w stylu nagłówka 3

Kolejny akapit

Tekst drugiego akapitu

Tum
źródło
22
Lubię umieszczać tag zakotwiczenia w linii nad nagłówkiem, więc po kliknięciu linku nagłówek pojawia się na stronie.
mgarey
4
To był jedyny użyteczny dla mnie. W przypadku długich tytułów nie można tego zrobić bez tagów zakotwiczenia.
Matt Fletcher,
To jest naprawdę miłe. Zacząłem umieszczać spis treści we wszystkich moich notatnikach Jupyter, aby szybko nawigować między sekcjami.
jackdbd
@mgarey Po prostu postaw kotwicę na pierwszym miejscu:## <a name="foo" /> Foo
tobias_k
40

Dla użytkowników Visual Studio Code dobrym pomysłem jest użycie wtyczki Markdown TOC .

Aby go zainstalować, uruchom VS Code Quick Open ( Control/⌘+ P), wklej następujące polecenie i naciśnij enter.

ext install markdown-toc

Aby wygenerować spis treści, otwórz paletę poleceń ( Control/⌘+ Shift+ P) i wybierz Markdown TOC:Insert/Update optionlub użyj Control/⌘+ MT.

valdeci
źródło
7
Uwaga: Właśnie odkryłem, że przy użyciu standardowego kodu VSCode możesz tworzyć łącza do znaczników do nagłówków: [Section Foo](#foo-header-title)i działa nawet poza trybem podglądu (tj. W zwykłym znaczniku).
kitsu.eb,
4
Inną alternatywą dla VSCode jest vscode-Przecena który ma wiele możliwości, OWO włączone
ciprian Tomoiagă
26

Możesz wypróbować ten skrypt ruby, aby wygenerować spis treści z pliku przeceny.

 #!/usr/bin/env ruby

require 'uri'

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 = URI::encode title.gsub(" ", "-").downcase
    puts "  " * (line.count("#")-1) + "* [#{title}](\##{href})"
  end
end
albertodebortoli
źródło
Świetny! Tylko uwaga, może chcesz dodać ifndef, includei endif, między innymi dyrektywami preprocesora, do listy zakazanego słowa. Ponadto zdefiniowanie listy poza zakresem pętli pozwala uniknąć konieczności jej ponownego włączania przy każdej iteracji. Spowoduje to również zbieranie komentarzy w dowolnym języku, który używa #składni komentarzy, w tym Ruby, co nie jest dobre. Jestem gotów edytować, jeśli chcesz. Jest to jednak dobry początek i działało dobrze dla moich celów. Dzięki wielkie!
Jeff Klein
Działa to tylko z nagłówkami ATX (tj. #Tymi, które zaczynają się od ), a nie z nagłówkami setext (podkreślone).
gozzilli,
dzięki za to, jeśli używasz tego do redcarpet na szynach, powinieneś pójść title.parameterizena href, dzięki!
Alexis,
25

Istnieją dwa sposoby utworzenia spisu treści (podsumowania) w dokumencie przeceny.

1. Ręcznie

# 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. Programowo

Można użyć na przykład skrypt, który generuje podsumowanie dla ciebie, spojrzeć na mojego projektu na github - summarizeMD -

Próbowałem także innego modułu skryptu / npm (na przykład doctoc ), ale nikt nie odtwarzał spisu treści z działającymi kotwicami.

Luca Davanzo
źródło
`` <div id = ... `nie jest rozpoznawany przez MarkdownPad2 (Windows)
chmike,
Działa tylko w tym samym folderze, nie działa również w przypadku nagłówków setext.
gozzilli,
25
# 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}

Jeśli użyjesz dodatkowej zniżki, nie zapomnij, że możesz dodać specjalne atrybuty do linków, nagłówków, ogrodzeń kodu i obrazów.
https://michelf.ca/projects/php-markdown/extra/#spe-attr

Greg Bosen
źródło
11

Tagi zakotwiczenia generowane przez różne parsery Markdown nie są nawet.

Jeśli pracujesz z parserami Markdown GFM (GitHub Flavored Markdown) lub Redcarpet, napisałem wtyczkę Vima do obsługi spisu treści.

funkcje

  1. Wygeneruj spis treści dla plików Markdown.

    Obsługiwane parsery Markdown:

    • GFM (GitHub Flavored Markdown)
    • Czerwony dywan
  2. Zaktualizuj istniejący spis treści.

  3. Automatycznie aktualizuj istniejący spis treści po zapisaniu.

Zrzuty ekranu

vim-markdown-toc

Stosowanie

Wygeneruj spis treści

Przesuń kursor do linii, do której chcesz dołączyć spis treści, a następnie wpisz poniżej odpowiednie polecenie. Polecenie wygeneruje nagłówki po kursorze do spisu treści.

  1. :GenTocGFM

    Wygeneruj spis treści w stylu łącza GFM.

    To polecenie jest odpowiednie dla plików Markdown w repozytoriach GitHub, takich jak README.md, i plików Markdown dla GitBook.

  2. :GenTocRedcarpet

    Wygeneruj spis treści w stylu linku Redcarpet.

    To polecenie jest odpowiednie dla Jekyll lub gdziekolwiek indziej użyj Redcarpet jako parsera Markdown.

    Możesz wyświetlić tutaj, aby poznać różnice między łączami TOC w stylu GFM i Redcarpet.

Zaktualizuj istniejący spis treści ręcznie

Zasadniczo nie musisz tego robić, istniejący spis treści domyślnie aktualizuje się automatycznie po zapisaniu. Jeśli chcesz zrobić to ręcznie, wystarczy użyć :UpdateTocpolecenia.

Pliki do pobrania i dokumenty

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

Zhuang Ma
źródło
10

Można również użyć pandoc, ten „nóż swiss-army” konwersji „jednego formatu na inny znaczników” . Może automatycznie wygenerować spis treści w dokumencie wyjściowym, jeśli podasz --tocargument.

Wskazówka: Jeśli chcesz uzyskać spis treści w htmldanych wyjściowych, musisz również podać, -sktóry generuje samodzielny dokument.

Przykładowy wiersz poleceń powłoki:

./pandoc -s --toc input.md -o output.html
Goforhistory
źródło
7

Jeśli chcesz użyć narzędzia javascript / node.js, spójrz na markdown-toc .

jonschlinkert
źródło
7

Możesz go wygenerować za pomocą tego bash one-liner. Zakłada, że ​​twoja nazwa pliku nazywa się 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
Asim Jalis
źródło
To jest świetne. Byłoby warte przepisania go jako prawidłowego skryptu z nazwą pliku jako argumentem, a może z obsługą podsekcji.
MasterScrat
6

Właśnie kodowałem rozszerzenie dla python-markdown, które używa parsera do pobierania nagłówków, i wysyła spis treści jako nieuporządkowaną listę w formacie Markdown z lokalnymi linkami. Plik jest

... i powinien zostać umieszczony w markdown/extensions/katalogu w instalacji Markdown. Następnie wszystko, co musisz zrobić, to wpisać <a>tagi kotwicy z id="..."atrybutem jako odniesieniem - dla takiego tekstu wejściowego:

$ 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...

... rozszerzenie można nazwać tak:

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

... a następnie możesz wkleić to toc do dokumentu przeceny (lub mieć skrót w edytorze tekstu, który wywołuje skrypt na aktualnie otwartym dokumencie, a następnie wstawia wynikowy spis treści do tego samego dokumentu).

Zauważ, że starsze wersje python-markdownnie mają __main__.pymodułu i jako takie wywołanie linii poleceń jak wyżej nie będzie działać dla tych wersji.

sdaau
źródło
6

Jak wspomniano w innych odpowiedziach, istnieje wiele sposobów automatycznego generowania spisu treści. Większość z nich to oprogramowanie typu open source i można je dostosować do własnych potrzeb.

Brakowało mi jednak atrakcyjnego wizualnie formatowania spisu treści, wykorzystującego ograniczone opcje, które zapewnia Markdown. Wymyśliliśmy następujące:

Kod

## Content

**[1. Markdown](#heading--1)**

  * [1.1. Markdown formatting cheatsheet](#heading--1-1)
  * [1.2. Markdown formatting details](#heading--1-2)

**[2. BBCode formatting](#heading--2)**

  * [2.1. Basic text formatting](#heading--2-1)

      * [2.1.1. Not so basic text formatting](#heading--2-1-1)

  * [2.2. Lists, Images, Code](#heading--2-2)
  * [2.3. Special features](#heading--2-3)

----

W swoim dokumencie umieściłbyś docelowe znaczniki podpunktów w następujący sposób:

<div id="heading--1-1"/>
### 1.1. Markdown formatting cheatsheet

W zależności od tego, gdzie i jak używasz Markdown, poniższe elementy powinny również działać i zapewniać ładniejszy kod Markdown:

### 1.1. Markdown formatting cheatsheet <a name="heading--1-1"/>

Przykładowe renderowanie

Zadowolony

1. Markdown

2. Formatowanie BBCode


Zalety

  • Możesz dodać tyle poziomów rozdziałów i podrozdziałów, ile potrzebujesz. W spisie treści byłyby one wyświetlane jako zagnieżdżone nieuporządkowane listy na głębszych poziomach.

  • Bez użycia list uporządkowanych. Tworzyłyby one wcięcia, nie łączyłyby liczby i nie można ich używać do tworzenia dziesiętnej numeracji klasyfikacyjnej, takiej jak „1.1”.

  • Brak użycia list na pierwszym poziomie. W tym przypadku korzystanie z nieuporządkowanej listy jest możliwe, ale nie konieczne: wcięcie i wypunktowanie dodają jedynie wizualnego bałaganu i żadnej funkcji, więc nie używamy listy dla pierwszego poziomu ToC.

  • Nacisk wizualny na sekcje pierwszego poziomu w spisie treści pogrubionym drukiem.

  • Krótkie znaczące znaczniki podpunktów, które wyglądają „pięknie” na pasku adresu przeglądarki, takie jak #heading--1-1znaczniki zawierające przekształcone fragmenty rzeczywistego nagłówka.

  • Kod używa nagłówków H2 ( ## …) dla sekcji, nagłówków H3 ( ### …) dla podtytułów itp. To sprawia, że ​​kod źródłowy jest łatwiejszy do odczytania, ponieważ ## …zapewnia silniejszą wskazówkę wizualną podczas przewijania w porównaniu do przypadku, w którym sekcje zaczynałyby się od nagłówków H1 ( # …). Jest nadal logicznie spójny, gdy używasz nagłówka H1 dla samego tytułu dokumentu.

  • Na koniec dodajemy ładną regułę poziomą, aby oddzielić spis treści od rzeczywistej treści.

Aby uzyskać więcej informacji na temat tej techniki i jej wykorzystania w dyskursie oprogramowania forum , zobacz tutaj .

Tanius
źródło
5

Napisałem skrypt Pythona, który analizuje plik Markdown i wyświetla spis treści jako listę Markdown: md-to-toc

W przeciwieństwie do innych skryptów, które znalazłem, md-to-toc poprawnie obsługuje zduplikowane tytuły. Nie wymaga również połączenia z Internetem, więc działa na każdym pliku MD, nie tylko na tych dostępnych z publicznego repozytorium.

Antonio Maiorano
źródło
5

W Visual Studio Code (VSCode) możesz użyć rozszerzenia Markdown All in One .

Po zainstalowaniu wykonaj następujące czynności:

  1. Naciśnij CTRL+ SHIFT+P
  2. Wybierz Markdown: Utwórz spis treści
Marco Lackovic
źródło
4

Typora generuje spis treści , dodając [TOC]do dokumentu.

Paweł Jurczak
źródło
Wielkie dzięki! Oto także link do
pliku
4

W Gitlab, markdown obsługuje to: [[_TOC_]]

Nicolas Thery
źródło
1
To rozwiązanie już nie działa, prawdopodobnie odkąd GitLab migrował z Redcarpet do kramdown, zobacz także jego listę TODO: gitlab.com/gitlab-org/gitlab-docs/merge_requests/108
Amadeu Barbosa
Działa również w Gollum v5.
user2394284
4

Wystarczy użyć edytora tekstu z wtyczką.

Twój edytor najprawdopodobniej ma pakiet / wtyczkę do obsługi tego za Ciebie. Na przykład w Emacsie możesz zainstalować generator TOC markdown-toc . Następnie podczas edycji po prostu kilkakrotnie zadzwoń M-x markdown-toc-generate-or-refresh-toc. Jest to warte przypisania klucza, jeśli chcesz to robić często. Jest dobry w generowaniu prostego spisu treści bez zanieczyszczania dokumentu zakotwiczeniami HTML.

Inne edytory mają podobne wtyczki, więc popularna lista przypomina:

Micah Elliott
źródło
2

Na podstawie odpowiedzi albertodebortoli utworzono funkcję z dodatkowymi kontrolami i zamianą znaków interpunkcyjnych.

# @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
dmigous
źródło
2

MultiMarkdown 4.7 ma makro {{TOC}}, które wstawia spis treści.

Michael R.
źródło
2

Dla mnie rozwiązanie zaproponowane przez @Tum działa jak urok dla spisu treści z 2 poziomami. Jednak na 3. poziomie nie działało. Nie wyświetlał linku jak dla pierwszych 2 poziomów, 3.5.1. [bla bla bla](#blablabla) <br>zamiast tego wyświetla zwykły tekst .

Moje rozwiązanie jest dodatkiem do rozwiązania @Tum (które jest bardzo proste) dla osób, które potrzebują spisu treści z co najmniej 3 poziomami.

Na drugim poziomie prosta zakładka wykona dla Ciebie wcięcie poprawnie. Ale nie obsługuje 2 kart. Zamiast tego musisz użyć jednej karty i dodać tyle, &nbsp;ile potrzebujesz, aby prawidłowo wyrównać 3. poziom.

Oto przykład z użyciem 4 poziomów (wyższe poziomy, okropnie się to staje):

# 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

Daje to następujący wynik, w którym każdy element spisu treści jest linkiem do odpowiedniej sekcji. Zwróć także uwagę na to <br>, aby dodać nową linię zamiast być w tej samej linii.

Spis treści

  1. Tytuł
    1.1. Podtytuł
           1.1.1. Sub-sub-Tytuł
                     1.1.1.1. Sub-Sub-Sub-Title

Tytuł

Nagłówek 1

Podtytuł

Nagłówek 2

Podtytuł

Nagłówek 3

Sub-Sub-Sub-Title

Nagłówek 4

Gabriel L.
źródło
1

W zależności od przepływu pracy warto przyjrzeć się strapdown

To rozwidlenie oryginalnej ( http://strapdownjs.com ), która dodaje generowanie spisu treści.

Na repozytorium znajduje się plik konfiguracyjny Apache (może nie być jeszcze odpowiednio zaktualizowany), aby zawinąć zwykłe obniżanie cen w locie, jeśli wolisz nie pisać w plikach HTML.

dgn
źródło
1

Nie jestem pewien, jaka jest oficjalna dokumentacja wyprzedaży. Odsyłacz można zapisać tylko w nawiasach [Heading]lub pustymi nawiasami [Heading][].

Oba działają przy użyciu pandoc . Stworzyłem więc szybki skrypt bash, który zastąpi $ TOC w pliku md ze swoim TOC. (Będziesz potrzebował envsubst, który może nie być częścią twojej dystrybucji)

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

Jeśli zdarzy ci się używać Eclipse , możesz użyć skrótu Ctrl+ O(kontur), pokaże to odpowiednik spisu treści i pozwoli na wyszukiwanie w tytułach sekcji (autouzupełnianie).

Możesz także otworzyć widok konspektu (Okno -> Pokaż widok -> konspektu), ale nie ma on funkcji autouzupełniania.

Christophe Roussy
źródło
1

Użyj toc.py, który jest małym skryptem Pythona, który generuje spis treści dla twojego markdown.

Stosowanie:

  • W pliku Markdown dodaj miejsce, w <toc>którym chcesz umieścić spis treści.
  • $python toc.py README.md(Użyj swojej nazwy pliku zamiast README.md )

Twoje zdrowie!

Dhruv Batheja
źródło
Twój skrypt jest fajny, ale nie tworzy kotwicy przed każdym tytułem. Niezbędne przynajmniej w bitbucket.
Paul Rougieux,
1

Użyłem https://github.com/ekalinin/github-markdown-toc, który zapewnia narzędzie wiersza poleceń, które automatycznie generuje spis treści z dokumentu przeceny.

Brak wtyczek, makr i innych zależności. Po zainstalowaniu narzędzia wystarczy wkleić dane wyjściowe narzędzia do lokalizacji w dokumencie, w której ma być spis treści. Bardzo prosty w użyciu.

$ cat README.md | ./gh-md-toc -
mmccabe
źródło
1

Istnieje skrypt Ruby o nazwie mdtoc.rb, który może automatycznie wygenerować spis treści GFM Markdown, i jest podobny, ale nieco inny niż niektóre inne skrypty zamieszczone tutaj.

Biorąc pod uwagę wejściowy plik Markdown, taki jak:

# 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.

Generuje następujący spis treści:

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

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

Zobacz także mój post na blogu na ten temat.

Alex Harvey
źródło