Jeśli używasz Linuksa i nie chcesz instalować żadnego dodatkowego oprogramowania, spróbuj github-markdown-toc (tylko awk pod maską).
shorrty
Renderuję wiele plików przecen w szablonach Jade do HTML. Potrzebuję więc, aby mój spis treści zawierał więcej informacji niż znajduje się w jednym pliku przeceny. Moim rozwiązaniem jest wygenerowanie spisu treści z samego kodu HTML za pomocą biblioteki node.jstoc
Plato,
2
Stworzyłem trzy różne generatory TOC z obniżką cenową, które próbują „zrobić to dobrze”, w tym wymienione powyżej zaznaczone-toc. markdown-toc jest moim ulubionym, wykorzystuje prawdziwy parser Markdown ( niezwykłe , zgodne ze specyfikacją [commonmark] (commonmark.org), pozwala na aktualizację spisów treści, ma CLI i API i jest teraz używany w tysiącach projektów
jonschlinkert
Odpowiedzi:
141
Stworzyłem dwie opcje generowania toc dla github-flavored-markdown:
Narzędzie wiersza polecenia DocToc ( źródło ) wymaga node.js
Instalacja:
npm install doctoc
Stosowanie:
npx doctoc . aby dodać spis treści do wszystkich plików przecen w bieżącym i we wszystkich podkatalogach.
DocToc WebApp
Jeśli chcesz najpierw wypróbować online, przejdź do strony doctoc , wklej link na stronie Markdown , a wygeneruje spis treści, który możesz wstawić u góry pliku Markdown.
Wiki i kotwice Github
Jak zauważył Matthew Flaschen w komentarzach poniżej, na swoich stronach wiki GitHub wcześniej nie generował kotwic, które doctoczależą.
Spis treści wygląda dobrze, ale GitHub nie generuje kotwic dla rzeczywistych sekcji, więc łącza się psują. Na razie dodam je ręcznie. To jest wiki GitHub.
Pierwszy wiersz po prostu rozpoczyna nieuporządkowaną listę i jest faktycznie wyrzucany.
Powoduje to zagnieżdżenie zestawu nieuporządkowanych list przy użyciu nagłówków w dokumencie.
Uwaga: to powinno działać na stronach GitHub, a nie na GitHub Flavored Markdown (GFM), jak to jest używane w komentarzach lub stronach wiki. AFAIK rozwiązanie nie istnieje.
upewnij się, że znajdziesz wspólny styl spisu treści na wypadek współpracy z plikami .md i różnymi edytorami / wtyczkami, aby nie otrzymywać zmian w spisie treści przy każdym innym zatwierdzeniu. Możliwe dodatki ~/.vimrc: zmień znak listy za pomocą let g:vmt_list_item_char = "-", dołącz nagłówki przed Spis treści za pomocą let g:vmt_include_headings_before = 1. Aby uzyskać więcej informacji, zobacz rozdział Opcje dokumentów , np. Jak zmienić tekst ogrodzenia.
Wolfson
9
To nie jest automatyczne, ale używa wyrażeń regularnych Notepad ++:
Zamień wszystkie pierwsze na drugie (usuwa wszystkie wiersze bez nagłówków)
Dzięki za sugestię i linki. Dodam go do naszej wewnętrznej listy żądań funkcji, aby zespół mógł to zobaczyć.
Głosujmy za tym pytaniem, aż to się stanie.
Innym obejściem jest użycie Asciidoc zamiast Markdown, który renderuje spis treści . Przeszedłem do tego podejścia do moich treści w dzisiejszych czasach.
Wolałbym mieć nadzieję, że GFM kiedyś to zapewni. To jest naprawdę kwestia courius, podczas gdy Markdown SourceForge'a ma domyślną składnię do generowania tego spisu treści .
Chetabahana,
8
Github Flavored Markdown używa RedCarpet jako silnika Markdown. Z repozytorium RedCarpet :
: with_toc_data - dodaj zakotwiczenia HTML do każdego nagłówka wyjściowego HTML, aby umożliwić połączenie z każdą sekcją.
Wygląda na to, że trzeba ustawić poziom renderera, aby ustawić tę flagę, co oczywiście nie jest możliwe w Github. Jednak najnowsza aktualizacja stron Github wydaje się, że automatyczne nagłówki są włączone dla nagłówków, tworząc nagłówki możliwe do połączenia. Nie do końca to, czego chcesz, ale może ci to ułatwić tworzenie spisu treści dla twojego dokumentu (choć ręcznie).
Inną ładną wtyczką kodu VS (świetna obsługa .md z ładnymi funkcjami, takimi jak GitHub i GitLab o smaku TOC) jest markdown-all-in-one .
Wolfson
4
Możliwe jest automatyczne wygenerowanie strony internetowej z http://documentup.com/ z README.mdpliku. Nie tworzy spisu treści, ale dla wielu może rozwiązać powód, dla którego chcesz utworzyć spis treści.
Mój kolega @schmiedc i ja stworzyliśmy skrypt GreaseMonkey, który instaluje nowy TOCprzycisk po lewej stronie h1przycisku, który używa doskonałej markdown-jsbiblioteki do dodawania / odświeżania spisu treści.
Przewagą nad rozwiązaniami takimi jak doctoc jest to, że integruje się z edytorem wiki GitHub i nie wymaga od użytkowników pracy przy użyciu wiersza poleceń (i wymaga od użytkowników instalowania narzędzi takich jak node.js ). W Chrome działa poprzez przeciągnięcie i upuszczenie na stronie Rozszerzenia, w przeglądarce Firefox musisz zainstalować rozszerzenie GreaseMonkey.
Będzie działał z prostym markdown (tzn. Nie będzie poprawnie obsługiwał bloków kodu, ponieważ jest to rozszerzenie GitHub do markdown). Wkłady mile widziane.
Dzięki wielkie! Musiałem użyć Tampermonkey zgodnie z sugestią zawartą w tej odpowiedzi, aby zainstalować go w Chrome i działało! Czego potrzeba, aby skrypt wygenerował spis treści dla normalnych plików przecen w repozytorium github?
lifebalance
1
To nie jest bezpośrednia odpowiedź na to pytanie, ponieważ tak wiele osób zapewniło obejścia. Nie sądzę, aby generowanie spisu treści było dotychczas oficjalnie wspierane przez Github. Jeśli chcesz, aby GitHub automatycznie renderował spis treści na swoich stronach podglądu GFM, weź udział w dyskusji na temat oficjalnego żądania funkcji .
Hosting Online Table of Content Generator (raychenon / play-table-of- content ) na tableofcontent.eu „zatrzymał się z powodu kosztów AWS.
Michael Freidgeim
0
W przypadku Texteditor Atom Githuba sprawdź tę niesamowitą wtyczkę (lub „pakiet” w Atom-lingo), która generuje „TOC (spis treści) nagłówków z przeanalizowanych plików przecen” :
Po zainstalowaniu jako pakiet Atom możesz użyć skrótu, ctrl-alt-caby wstawić spis treści w oparciu o strukturę docdown-doc w bieżącej pozycji kursora ...
Zrzuty ekranu:
Wiązania klawiszy Atom
markdown-toc daje następujące domyślne powiązania klawiszy do kontrolowania wtyczki w Atom:
ctrl-alt-c => utwórz spis treści w pozycji kursora
ctrl-alt-u => aktualizacja spisu treści
ctrl-alt-r => usuń spis treści
Funkcje wtyczek (z README projektu)
Automatyczne łączenie za pomocą znaczników kotwicy, np. # A 1→#a-1
Kontrola głębokości [1-6] za pomocą depthFrom:1idepthTo:6
Włącz lub wyłącz linki za pomocą withLinks:1
Odśwież listę po zapisaniu za pomocą updateOnSave:1
Użyj listy uporządkowanej (1. ..., 2. ...) za pomocą orderedList:0
Oto skrypt powłoki, który dzisiaj do tego przygotowałem. Może trzeba go dostosować do własnych potrzeb, ale powinien to być dobry punkt wyjścia.
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/^#//'
Jeśli ktoś zna lepszy sposób na wykonanie tych # ostatnich wymian, dodaj komentarz. Próbowałem różnych rzeczy i nie byłem z nich zadowolony, więc brutalnie to wymusiłem.
toc
Odpowiedzi:
Stworzyłem dwie opcje generowania toc dla github-flavored-markdown:
Narzędzie wiersza polecenia DocToc ( źródło ) wymaga node.js
Instalacja:
Stosowanie:npm install doctoc
npx doctoc .
aby dodać spis treści do wszystkich plików przecen w bieżącym i we wszystkich podkatalogach.DocToc WebAppJeśli chcesz najpierw wypróbować online, przejdź do strony doctoc , wklej link na stronie Markdown , a wygeneruje spis treści, który możesz wstawić u góry pliku Markdown.Wiki i kotwice Github
Jak zauważył Matthew Flaschen w komentarzach poniżej, na swoich stronach wiki GitHub wcześniej nie generował kotwic, które
doctoc
zależą.AKTUALIZACJA: Naprawili jednak ten problem .
źródło
Strony GitHub (które są zasadniczo opakowaniem dla Jekylla) wydają się używać kramdown , który implementuje wszystkie Maruku , a zatem ma obsługę automatycznie generowanego spisu treści za pomocą
toc
atrybutu:Pierwszy wiersz po prostu rozpoczyna nieuporządkowaną listę i jest faktycznie wyrzucany.
Powoduje to zagnieżdżenie zestawu nieuporządkowanych list przy użyciu nagłówków w dokumencie.
Uwaga: to powinno działać na stronach GitHub, a nie na GitHub Flavored Markdown (GFM), jak to jest używane w komentarzach lub stronach wiki. AFAIK rozwiązanie nie istnieje.
źródło
Jeśli edytujesz pliki Markdown za pomocą Vima, możesz wypróbować tę wtyczkę vim-markdown-toc .
Użycie jest proste, wystarczy przesunąć kursor w miejsce, w którym chcesz dołączyć spis treści i uruchomić
:GenTocGFM
, gotowe!Zrzuty ekranu:
Cechy:
Wygeneruj toc dla plików Markdown. (Wsparcie GitHub Flavored Markdown i Redcarpet)
Zaktualizuj istniejące toc.
Automatyczna aktualizacja do zapisania.
źródło
~/.vimrc
: zmień znak listy za pomocąlet g:vmt_list_item_char = "-"
, dołącz nagłówki przed Spis treści za pomocąlet g:vmt_include_headings_before = 1
. Aby uzyskać więcej informacji, zobacz rozdział Opcje dokumentów , np. Jak zmienić tekst ogrodzenia.To nie jest automatyczne, ale używa wyrażeń regularnych Notepad ++:
Zamień wszystkie pierwsze na drugie (usuwa wszystkie wiersze bez nagłówków)
Następnie (konwertuje nagłówki III na spacje)
Następnie (konwertuje nagłówki II na spacje)
Następnie (usuń nieużywane znaki na początku i na końcu tytułu linku)
Następnie (zamień ostatnie tokeny małymi i myślnikami zamiast spacji)
Usuń nieużywane końcowe funty i początkowe myślniki:
Usuń niepotrzebne znaki w linkach:
I wreszcie dodaj nawias wokół końcowych linków:
I voila! Możesz nawet umieścić to w makro globalnym, jeśli powtórzysz to wystarczająco długo.
źródło
Nie jest to możliwe, z wyjątkiem proponowanych obejść.
I zaproponował rozszerzenie Kramdown TOC i inne możliwości [email protected] i Steven! Ragnarök odpowiedział zwykłym:
Głosujmy za tym pytaniem, aż to się stanie.
Innym obejściem jest użycie Asciidoc zamiast Markdown, który renderuje spis treści . Przeszedłem do tego podejścia do moich treści w dzisiejszych czasach.
źródło
Github Flavored Markdown używa RedCarpet jako silnika Markdown. Z repozytorium RedCarpet :
Wygląda na to, że trzeba ustawić poziom renderera, aby ustawić tę flagę, co oczywiście nie jest możliwe w Github. Jednak najnowsza aktualizacja stron Github wydaje się, że automatyczne nagłówki są włączone dla nagłówków, tworząc nagłówki możliwe do połączenia. Nie do końca to, czego chcesz, ale może ci to ułatwić tworzenie spisu treści dla twojego dokumentu (choć ręcznie).
źródło
Bardzo wygodnym sposobem na uzyskanie spisu treści dla pliku mardown podczas pracy z Visual Studio Code jest rozszerzenie Markdown-TOC .
Może dodawać toc do istniejących plików przecen, a nawet aktualizować toc przy zapisywaniu.
źródło
Możliwe jest automatyczne wygenerowanie strony internetowej z http://documentup.com/ z
README.md
pliku. Nie tworzy spisu treści, ale dla wielu może rozwiązać powód, dla którego chcesz utworzyć spis treści.Inną alternatywą dla Documentup jest Flatdoc: http://ricostacruz.com/flatdoc/
źródło
Gitdown jest preprocesorem obniżania cen dla Github.
Korzystając z Gitdown możesz:
Gitdown usprawnia typowe zadania związane z utrzymywaniem strony dokumentacji dla repozytorium GitHub.
Korzystanie z niego jest proste:
Możesz mieć go jako osobny skrypt lub jako część procedury skryptu kompilacji (na przykład Gulp ).
źródło
Użyj coryfklein / doctoc , rozwidlenia thlorenz / doctoc , który nie dodaje „ wygenerowanego z DocToc ” do każdego spisu treści.
źródło
Mój kolega @schmiedc i ja stworzyliśmy skrypt GreaseMonkey, który instaluje nowy
TOC
przycisk po lewej stronieh1
przycisku, który używa doskonałejmarkdown-js
biblioteki do dodawania / odświeżania spisu treści.Przewagą nad rozwiązaniami takimi jak doctoc jest to, że integruje się z edytorem wiki GitHub i nie wymaga od użytkowników pracy przy użyciu wiersza poleceń (i wymaga od użytkowników instalowania narzędzi takich jak
node.js
). W Chrome działa poprzez przeciągnięcie i upuszczenie na stronie Rozszerzenia, w przeglądarce Firefox musisz zainstalować rozszerzenie GreaseMonkey.Będzie działał z prostym markdown (tzn. Nie będzie poprawnie obsługiwał bloków kodu, ponieważ jest to rozszerzenie GitHub do markdown). Wkłady mile widziane.
źródło
To nie jest bezpośrednia odpowiedź na to pytanie, ponieważ tak wiele osób zapewniło obejścia. Nie sądzę, aby generowanie spisu treści było dotychczas oficjalnie wspierane przez Github. Jeśli chcesz, aby GitHub automatycznie renderował spis treści na swoich stronach podglądu GFM, weź udział w dyskusji na temat oficjalnego żądania funkcji .
źródło
Obecnie nie jest możliwe użycie składni Markdown (patrz bieżąca dyskusja na GitHub ), jednak możesz użyć niektórych narzędzi zewnętrznych, takich jak:
Alternatywnie użyj
AsciiDoc
zamiast tego (np.README.adoc
), Npzgodnie z sugestią w tym komentarzu . Sprawdź wersję demo tutaj .
źródło
W przypadku Texteditor Atom Githuba sprawdź tę niesamowitą wtyczkę (lub „pakiet” w Atom-lingo), która generuje „TOC (spis treści) nagłówków z przeanalizowanych plików przecen” :
markdown-toc
Po zainstalowaniu jako pakiet Atom możesz użyć skrótu,
ctrl-alt-c
aby wstawić spis treści w oparciu o strukturę docdown-doc w bieżącej pozycji kursora ...Zrzuty ekranu:
Wiązania klawiszy Atom
markdown-toc daje następujące domyślne powiązania klawiszy do kontrolowania wtyczki w Atom:
ctrl-alt-c
=> utwórz spis treści w pozycji kursoractrl-alt-u
=> aktualizacja spisu treścictrl-alt-r
=> usuń spis treściFunkcje wtyczek (z README projektu)
# A 1
→#a-1
depthFrom:1
idepthTo:6
withLinks:1
updateOnSave:1
orderedList:0
źródło
Oto skrypt powłoki, który dzisiaj do tego przygotowałem. Może trzeba go dostosować do własnych potrzeb, ale powinien to być dobry punkt wyjścia.
Jeśli ktoś zna lepszy sposób na wykonanie tych # ostatnich wymian, dodaj komentarz. Próbowałem różnych rzeczy i nie byłem z nich zadowolony, więc brutalnie to wymusiłem.
źródło
Teraz dostępna jest akcja GitHub:
https://github.com/marketplace/actions/toc-generator
README.md
.github/workflows/toc.yml
źródło
Większość innych odpowiedzi wymaga zainstalowania jakiegoś narzędzia. Znalazłem szybkie i łatwe rozwiązanie online https://imthenachoman.github.io/nGitHubTOC .
Dla każdego wejścia obniżki generuje tabelę treści wyjściowych. Możesz określić minimalny i maksymalny poziom nagłówka.
Kod źródłowy znajduje się na https://github.com/imthenachoman/nGitHubTOC
źródło