github-flavoured-markdownの自動目次


215

Github Flavored Markdownを使用して自動目次を生成することは可能ですか?


2
mark-tocを試してみてください、それはそれほど簡単にはなりません。
jonschlinkert 2014

1
Linuxを使用していて、追加のソフトウェアをインストールしたくない場合は、github-markdown-tocを試してください(内部的にはawkのみ)。
恐ろしい

jadeテンプレート内の複数のマークダウンファイルをhtmlにレンダリングしています。したがって、1つのマークダウンファイルにあるよりも多くの情報をTOCに含める必要があります。私の解決策は、node.jsライブラリを使用してHTMLコード自体からTOCを生成することですtoc
Plato

2
上記のmarked-tocを含め、「正しく理解しよう」とする3つの異なるマークダウンTOCジェネレーターを作成しました。markdown-tocは私のお気に入りです。実際の
マークダウン

回答:


141

github-flavored-markdownのtocを生成する2つのオプションを作成しました。

DocTocコマンドラインツール(ソース)には node.js

インストール:

npm install doctoc

使用法:

npx doctoc . 現在およびすべてのサブディレクトリ内のすべてのマークダウンファイルに目次を追加します。

DocToc WebApp

最初にオンラインで試してみたい場合は、doctocサイトにアクセスし、マークダウンページのリンクを貼り付けると、マークダウンファイルの上部に挿入できるコンテンツのテーブルが生成されます。

Github Wikiとアンカー

以下のコメントでMatthew Flaschenが指摘したように、そのWikiページでは、GitHubは以前はdoctoc依存するアンカーを生成しませんでした。

更新:ただし、この問題は修正されました


3
TOCは正常に見えますが、GitHubは実際のセクションのアンカーを生成しないため、リンクが壊れます。今は手動で追加します。これはGitHub wikiです。
Matthew Flaschenが2012

2
これは、GitHubの問題として記録されています。wikiの見出しの自動アンカーです
Matthew Flaschen、2012

1
これが私と同じように煩わしいと感じた場合は、@ MatthewFlaschenのコメントのリンクにアクセスして、この問題を+1してください。
blak3r 2012年

2
@MatthewFlaschenリンクが壊れました-新しいアドレスはgithub.com/gollum/gollum/issues/380です
Adam

3
DocToc Webアプリが機能しない。markdown-toc
DynamicDan

23

GitHub Pages(基本的にはJekyllのラッパー)は、Marukuのすべて実装するkramdownを使用しているように見えるため、属性を介して自動的に生成される目次をサポートしています。toc

* auto-gen TOC:
{:toc}

最初の行は、順序付けられていないリストを開始するだけで、実際には破棄されます。

これにより、ドキュメントのヘッダーを使用して、ネストされた順序なしリストのセットが生成されます。

注:これは、コメントやWikiページで使用されているGitHub Flavored Markdown(GFM)ではなく、GitHubページで機能するはずです。私の知る限り、そのためのソリューションは存在しません。


1
これは機能しません。そのテキストをレンダリングするだけです。そのような目次を使用するファイルをリンクできますか?
Geoffrey De Smet


2
これはMarukuの機能であり、Markdown自体ではなく、GHフレーバーマークダウンでさえないことに注意してください。GH-pagesはMarukuを使用しています。
レベッカスコット

@KevinSuttleよろしいですか?Jekyllにはレッドカーペットが含まれていますが、Marukuはデフォルトのように見えます(GHが別のjekyll構成を使用しない限り)github.com/mojombo/jekyll/blob/master/lib/jekyll.rb#L66
Rebecca Scott

10
@BenScottあなたのソリューションはgithubページでのみ機能するようです。github wikiのソリューションを知っていますか?

13

VimでMarkdownファイルを編集する場合は、このプラグインvim-markdown-tocを試すことができます

使い方は簡単で、目次を追加したい場所にカーソルを移動して実行するだけです :GenTocGFMです。

スクリーンショット:

vim-markdown-toc

特徴:

  1. Markdownファイルのtocを生成します。(GitHubフレーバーマークダウンとレッドカーペットをサポート)

  2. 既存の目次を更新します。

  3. 保存時にtocを自動更新します。


他のすべてのコミットでTOCの変更を取得しないようにするために、.mdファイルでコラボレーションし、別のエディター/プラグインが関与している場合に備えて、共通のTOCスタイルを見つけてください。これに可能な追加~/.vimrc:でリスト文字を変更しlet g:vmt_list_item_char = "-"、TOCの前に見出しを含めますlet g:vmt_include_headings_before = 1。フェンステキストの変更方法など、詳細については、ドキュメントオプションのセクションをご覧ください。
Wolfson

9

自動ではありませんが、Notepad ++正規表現を使用しています。

すべてを最初から2番目に置き換えます(ヘッダーのないすべての行を削除します)

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

次に(ヘッダーIIIをスペースに変換します)

-##
        -

次に(ヘッダーIIをスペースに変換します)

-#
    -

次に(リンクタイトルの最初と最後にある未使用の文字を削除します)

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

次に(最後のトークンをスペースではなく小文字とダッシュに変換します)

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

未使用の最後のポンドと最初のダッシュを削除します。

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

リンクの不要な文字を削除します。

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

最後に、最終的なリンクを括弧で囲みます。

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

そして、ほら!十分な時間繰り返しれば、これをグローバルマクロに入れることもできます。


9

提案された回避策を除いて、それは不可能です。

Kramdown TOC拡張とsupport@github.comとStevenへの他の可能性を提案しました!ラグナロクはいつもと答えた:

提案とリンクをありがとう。チームが確認できるように、それを社内の機能リクエストリストに追加します。

それが起こるまでこの質問を賛成しましょう。

もう1つの回避策は、目次をレンダリングする Markdownの代わりにAsciidocを使用することです。私は最近、自分のコンテンツに対してこのアプローチに移行しました。


私はGFMがいつかそれを提供することを望みます。SourceForgeのMarkdownにはデフォルトでこのTOCを生成する構文がありますが、それは私にとっては本当にお勧めです。
チェタバハナ2015年

8

Github Flavored Markdownは、MarkCarpetエンジンとしてRedCarpetを使用しています。RedCarpetリポジトリから:

:with_toc_data-各セクションにリンクできるように、出力HTMLの各ヘッダーにHTMLアンカーを追加します。

このフラグを設定するにはレンダラーレベルで取得する必要があるようですが、これは明らかにGithubでは不可能です。ただし、Githubページの最新の更新では、ヘッダーの自動アンカーがオンになっていて、リンク可能な見出しが作成されているようです。正確には望みどおりではありませんが、ドキュメントの目次を(手動ではありますが)少し簡単に作成できる場合があります。


5

Visual Studio Codeで作業するときにmardownファイルの目次を作成する非常に便利な方法は、Markdown-TOC拡張機能です。です。

既存のマークダウンファイルに目次を追加し、保存時に目次を最新の状態に保つこともできます。

ここに画像の説明を入力してください


もう1つの優れたVSコードプラグイン(GitHubやGitLab風味のTOCなどの優れた機能を備えた優れた.mdサポート)は、markdown -all-in-oneです。
Wolfson


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と私はTOCボタンの左側に新しいボタンをインストールするGreaseMonkeyスクリプトを作成しました。このスクリプトh1は、優れたmarkdown-jsライブラリを使用して目次を追加/更新します。

doctocのようなソリューションに対する利点は、GitHubのwikiエディターに統合され、ユーザーがコマンドラインで作業する必要がない(そしてユーザーが次のようなツールをインストールする必要がある)ことです。 node.js)ことです。Chromeでは、拡張機能ページにドラッグアンドドロップすることで機能します。Firefoxでは、GreaseMonkey拡張機能をインストールする必要があります。

プレーンマークダウンで機能します(つまり、マークダウンのGitHub拡張であるため、コードブロックを正しく処理しません)。貢献を歓迎します。


どうもありがとう!Chromeにインストールするには、この回答で提案されているようにTampermonkeyを使用する必要がありました。githubリポジトリで通常のマークダウンファイルのTOCをスクリプトで生成するにはどうすればよいですか?
ライフバランス'19

1

多くの人々が回避策を提供しているので、これはこの質問に対する直接の回答ではありません。TOCの生成がGithubによって公式にサポートされているとはまだ思っていません。GitHubのGFMプレビューページに目次を自動的に表示させたい場合は、機能のリクエストに関する公式の問題に関するディスカッションに参加してください。


0

現在、マークダウン構文を使用することはできませんGitHubで進行中のディスカッションを参照)。ただし、次のような外部ツールを使用できます。


または、AsciiDoc代わりに(例README.adoc)を使用してください。

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

## A

### A2

## B

### B2

このコメントで示唆されているようにこちらのデモを確認してください


上(raychenon /プレイ目次)コンテンツ生成器のオンライン表のホスティング tableofcontent.eu AWSのコストのために停止した」。
マイケルFreidgeim

0

GithubのTexteditor Atomについては、この素晴らしいプラグイン(またはAtom-lingoの「パッケージ」)をチェックしてください。このプラグインは、「解析済みマークダウンから見出しのTOC(目次)」ファイルを生成します。

マークダウン目次

Atomパッケージとしてインストールしたら、ショートカットctrl-alt-cを使用して、markdown-doc-structureに基づく目次を現在のカーソル位置に挿入できます...

スクリーンショット:

ここに画像の説明を入力してください

Atomキーバインド

markdown-tocは、Atomのプラグインを制御するための次のデフォルトのキーバインディングを提供します。

  • ctrl-alt-c =>カーソル位置に目次を作成
  • ctrl-alt-u => TOCを更新
  • ctrl-alt-r => TOCを削除

プラグインの機能(プロジェクトのREADMEから)

  • アンカータグによる自動リンク、例えば # A 1#a-1
  • depthFrom:1およびによる深度制御[1-6]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アクションがあります。

https://github.com/marketplace/actions/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にあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.