Автоматичне TOC у відмітці з ароматом github


215

Чи можливо генерувати автоматичну таблицю змісту за допомогою Github Flavored Markdown ?


2
спробуйте позначити -c , це не може бути набагато простіше.
jonschlinkert

1
Якщо ви використовуєте Linux та не хочете інсталювати додаткове програмне забезпечення, спробуйте github-markdown-toc (лише awk під кришкою).
шорти

Я перетворюю кілька файлів розмітки всередині шаблонів нефриту в HTML. Тому мені потрібно, щоб мій TOC містив більше інформації, ніж це знайдено в одному файлі розмітки. Моє рішення - генерувати TOC з самого коду HTML за допомогою бібліотеки node.jstoc
Платон

2
Я створив три різні генератори TOC для відмітки, які намагаються "виправити це", включаючи зазначений вище маркер-toc. markdown-toc - мій улюблений, він використовує справжній аналізатор розмітки ( примітно, що слідує специфікації [commonmark] (commonmark.org), дозволяє оновити
TOC

Відповіді:


141

Я створив два варіанти для генерування току для розмітки з ароматом github:

Інструмент командного рядка DocToc ( джерело ) вимагає node.js

Установка:

npm install doctoc

Використання:

npx doctoc . щоб додати зміст до всіх файлів розмітки в поточному та всіх підкаталогах.

DocToc WebApp

Якщо ви хочете спробувати його в Інтернеті спочатку, перейдіть на сайт doctoc , вставте посилання сторінки розмітки , і він створить зміст, який ви можете вставити вгорі файлу розмітки.

Гітхуб Вікі і якорі

Як зазначив Меттью Флашен в коментарях нижче, для своїх вікі-сторінок GitHub раніше не створював якір, doctocвід якого залежить.

ОНОВЛЕННЯ: Однак вони вирішили цю проблему .


3
TOC виглядає добре, але GitHub не генерує якір для фактичних розділів, тому посилання розриваються. Я зараз додаю їх вручну. Це вікі GitHub.
Метью Флашен


1
Якщо ви вважаєте це дратівливим, як і я, перейдіть за посиланням у коментарі @ MatthewFlaschen і поставіть +1 цьому питанню.
blak3r

2
@MatthewFlaschen Ваше посилання зірвало - нова адреса github.com/gollum/gollum/isissue/380
Adam

3
веб-додаток DocToc не працює. Я використовував markdown-toc
DynamicDan

23

Сторінки GitHub (яка в основному є обгорткою для Джекілла), як видається, використовує крамдаун , який реалізує всю Maruku , і тому має підтримку автоматично створеної таблиці вмісту за допомогою tocатрибута:

* auto-gen TOC:
{:toc}

Перший рядок просто починає невпорядкований список і насправді викидається.

Це призводить до створення вкладеного набору не упорядкованих списків із використанням заголовків у документі.

Примітка. Це повинно працювати для GitHub Pages, а не GitHub Flavored Markdown (GFM), як використовується в коментарях або на сторінках вікі. AFAIK для цього не існує рішення.


1
Це не працює. Це справедливо робить цей текст. Чи можете ви зв'язати файл, який використовує такий TOC?
Джеффрі Де Смет


2
Зауважте, що це особливість Maruku, а не Markdown per se, і, мабуть, навіть не GH з ароматом Markdown. GH-сторінки все ж використовують Maruku.
Ребекка Скотт

@KevinSuttle ви впевнені? Jekyll включає redcarpet, але маруку все ще виглядає як за замовчуванням (якщо GH не використовує інший конфігурацію jekyll) github.com/mojombo/jekyll/blob/master/lib/jekyll.rb#L66
Ребекка Скотт

10
@BenScott Схоже, що ваше рішення працює лише для сторінок github. Чи знаєте ви про рішення для вікі Github?
перепрограміст

13

Якщо ви редагуєте файли Markdown за допомогою Vim, ви можете спробувати цей плагін vim-markdown-toc .

Використання просте, просто перемістіть курсор на місце, до якого потрібно додати Зміст, та запустіть :GenTocGFM, готово!

Скріншоти:

vim-markdown-toc

Особливості:

  1. Створення toc для файлів Markdown. (Підтримка GitHub Flavored Markdown та Redcarpet)

  2. Оновіть існуючий ток.

  3. Автоматичне оновлення Toc при збереженні.


переконайтеся, що ви знайдете загальний стиль TOC у випадку, якщо ви співпрацюєте з .md файлами та різними редакторами / плагінами, щоб не отримувати змін у TOC в будь-якому іншому комітеті. Можливі доповнення до ~/.vimrcцього: змінити символ списку на let g:vmt_list_item_char = "-", включити заголовки перед TOC на let g:vmt_include_headings_before = 1. Докладніше див. У розділі параметрів документів , наприклад, як змінити текст огорожі.
Вольфсон

9

Це не автоматично, але він використовує регулярні вирази Notepad ++:

Замініть все першим на друге (видаляє всі рядки без заголовків)

^##(#?)(#?)(.*?)$(.|\r|\n)*?(?=^##|\z)
-\1\2 [\3](#\3)\n

Потім (перетворює заголовки III у пробіли)

-##
        -

Потім (перетворює заголовки II у пробіли)

-#
    -

Потім (видаліть невикористані символи на початку та в кінці заголовка посилання)

\[ *((?:(?![ .:#!\?;]*\])[^#])*)[ #:!\?;]*\]
[\1]

Потім (конвертуйте останні символи в малі та тире замість пробілів)

\]([^ \r\n]*) ([^\r\n ]*)
]\L\1-\2

Видаліть невикористані кінцеві кілограми та початкові тире:

(?:()[-:;!\?#]+$|(\]#)-)
\1\2

Видаліть непотрібні символи у посиланнях:

(\].*?)(?:\(|\))
\1

І нарешті додайте дужки навколо кінцевих посилань:

\](?!\()(.*?)$
\]\(\1\)

І вуаля! Ви навіть можете помістити це в глобальний макрос, якщо повторите його достатньо часу.


9

Це неможливо, за винятком запропонованих обхідних шляхів.

Я запропонував розширення TOC Kramdown та інші можливості для support@github.com та Steven! Рагнарок відповів звичайним:

Дякуємо за пропозицію та посилання. Я додаю його до нашого внутрішнього списку запитів щодо функцій для команди.

Давайте підкреслимо це питання, поки воно не відбудеться.

Іншим способом вирішення проблеми є використання Asciidoc замість Markdown, який надає TOC . Я сьогодні перейшов до цього підходу для свого вмісту.


Я б швидше сподівався, що GFM надасть це якийсь день. Це дійсно кур'єрська річ для мене, тоді як у Markdown SourceForge є синтаксис для створення цього TOC за замовчуванням.
Четабахана

8

Github Flavored Markdown використовує RedCarpet в якості двигуна Markdown. Від репортажу RedCarpet :

: with_toc_data - додайте HTML-якорі до кожного заголовка у вихідному HTML-коді, щоб дозволити посилання на кожен розділ.

Схоже, вам потрібно буде на рівні візуалізації встановити цей прапор, що очевидно неможливо на Github. Однак, за останнім оновленням сторінок Github, схоже, що автоматичне прив’язування увімкнено для заголовків, створюючи сполучні заголовки. Не зовсім те, що ви хочете, але це може допомогти вам створити TOC для свого документа трохи простіше (хоча і вручну).


5

Дуже зручним способом досягнення вмісту для файлу, що перебуває у стані виходу при роботі з Visual Studio Code, є розширення Markdown-TOC .

Він може додати ток до існуючих файлів розмітки і навіть підтримувати оновлення в тоці щодо збереження.

введіть тут опис зображення


Ще один приємний плагін VS-коду (чудова підтримка .md з хорошими функціями, включаючи GitHub & GitLab з ароматизованим TOC) - це відмітка "все-в-одному" .
Вольфсон

4

Можна створити веб-сторінку автоматично за допомогою http://documentup.com/ з README.mdфайлу. Це не створення TOC, але для багатьох це може вирішити причину бажання створити TOC.

Ще одна альтернатива Documentup - Flatdoc: http://ricostacruz.com/flatdoc/


3

Gitdown - препроцесор розмітки для Github.

За допомогою Gitdown ви можете:

  • Створити зміст
  • Знайдіть мертві URL-адреси та ідентифікатори фрагментів
  • Включити змінні
  • Включити файли
  • Отримати розмір файлу
  • Створення значків
  • Дата друку
  • Роздрукуйте інформацію про сам сховище

Gitdown упорядковує поширені завдання, пов'язані із підтримкою сторінки документації для сховища GitHub.

Використовувати це просто:

var Gitdown = require('gitdown');

Gitdown
    // Gitdown flavored markdown.
    .read('.gitdown/README.md')
    // GitHub compatible markdown.
    .write('README.md');

Ви можете мати його як окремий сценарій або мати його як частину звичайного сценарію побудови (наприклад, Gulp ).



1

Мій колега @schmiedc і я створили сценарій GreaseMonkey, який встановлює нову TOCкнопку зліва від h1кнопки, яка використовує відмінну markdown-jsбібліотеку для додавання / оновлення змісту.

Перевага перед такими рішеннями, як doctoc, полягає в тому, що він інтегрується у вікі-редактор GitHub і не потребує того, щоб користувачі працювали в їх командному рядку (і вимагали від користувачів встановлення таких інструментів node.js). У Chrome він працює, перетягуючи його на сторінку розширень, у Firefox вам потрібно буде встановити розширення GreaseMonkey.

Він буде працювати з простою розміткою (тобто він не обробляє кодові блоки правильно, оскільки це розширення GitHub до розмітки). Внески


Велике спасибі! Мені довелося використовувати Tampermonkey, як запропонувала ця відповідь, щоб встановити його в Chrome, і він працював! Що потрібно, щоб ваш сценарій генерував TOC для нормальних файлів розмітки у рефінансі github?
життєвий баланс

1

Це не є прямою відповіддю на це питання, оскільки так багато людей забезпечили обхідні шляхи. Я не думаю, що генерація TOC до цього часу офіційно не підтримується Github. Якщо ви хочете, щоб GitHub автоматично надавав зміст на своїх сторінках попереднього перегляду GFM, будь ласка, прийміть участь в обговоренні питання щодо офіційного запиту на функції .


0

Наразі неможливо використовувати синтаксис розмітки (див. Триваючу дискусію на GitHub ), проте ви можете використовувати деякі зовнішні інструменти, такі як:


Альтернативно використовувати AsciiDocзамість цього (наприклад README.adoc), наприклад

:toc: macro
:toc-title:
:toclevels: 99
# Title

## A

### A2

## B

### B2

як запропоновано в цьому коментарі . Перевірте демонстрацію тут .


Хостинг Інтернет-генератора таблиць вмісту (raychenon / play-table-of-content) на tableofcontent.eu "припинився через витрати AWS.
Michael Freidgeim

0

Для Texthitor Atom Github ознайомтеся з цим дивовижним плагіном (або "пакунком" в Atom-lingo), який генерує "TOC (зміст) заголовків з розбору файлів розмітки" :

відмітка-toc

Після установки Atom-пакету ви можете скористатися ярликом ctrl-alt-cдля вставки TOC на основі вашої markdown-doc-структури в поточній позиції курсору ...

Скріншоти:

введіть тут опис зображення

Атомні клавіатури

markdown-toc надає наступні прив'язки ключів за замовчуванням для управління плагіном в Atom:

  • ctrl-alt-c => створити TOC у позиції курсору
  • ctrl-alt-u => оновити TOC
  • ctrl-alt-r => видалити TOC

Особливості плагіна (з проекту README)

  • Автоматичне посилання через теги прив’язки, наприклад # A 1#a-1
  • Контроль глибини [1-6] з depthFrom:1таdepthTo:6
  • Увімкнути або вимкнути посилання за допомогою withLinks:1
  • Оновити список для збереження за допомогою updateOnSave:1
  • Використовуйте упорядкований список (1. ..., 2. ...) з orderedList:0

0

Ось скрипт оболонки, який я сьогодні для цього зібрав разом. Можливо, потрібно підправити це для ваших потреб, але це повинно бути гарним відправною точкою.

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/^#//'

Якщо хтось знає кращий спосіб зробити ці остаточні # заміни, будь ласка, додайте коментар. Я пробував різні речі і не був задоволений жодною, тому я просто змусив це.


0

Зараз GitHub Action виконує це:

https://github.com/marketplace/action/toc-generator

  1. Вкажіть місце TOC (опція), наприклад README.md
<!-- START doctoc -->
<!-- END doctoc -->
  1. Налаштування робочого процесу, наприклад .github/workflows/toc.yml
on: push
name: TOC Generator
jobs:
  generateTOC:
    name: TOC Generator
    runs-on: ubuntu-latest
    steps:
      - uses: technote-space/toc-generator@v2

0

Більшість інших відповідей вимагають встановити якийсь інструмент. Я знайшов швидке та просте онлайн-рішення https://imthenachoman.github.io/nGitHubTOC .

Для будь-якого введення розмітки він створює таблицю виведення вмісту. Ви можете вказати мінімальний та максимальний рівень заголовка.

Вихідний код знаходиться за адресою https://github.com/imthenachoman/nGitHubTOC

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.