Github Flavored Markdown を使用して自動目次を生成することは可能ですか?
Github-flavored-markdownのtocを生成する2つのオプションを作成しました。
npm install -g doctoc
doctoc .
は、現在およびすべてのサブディレクトリ内のすべてのマークダウンファイルに目次を追加します。
最初にオンラインで試してみたい場合は、 doctoc サイトに移動して、マークダウンページのリンクを貼り付けます。マークダウンファイルの上部に挿入できる目次が生成されます。
Matthew Flaschenが以下のコメントで指摘したように、Wikiページについては、GitHubは以前doctoc
が依存するアンカーを生成していませんでした。
更新:ただし、修正された この問題 。
GitHub Pages(これは基本的にJekyllのラッパーです) kramdownを使用しているようです 、これは Marukuのすべてを実装 であり、したがって 自動生成されたテーブル内容 atoc
属性経由:
* auto-gen TOC:
{:toc}
最初の行は、順序付けられていないリストを開始するだけで、実際には破棄されます。
これにより、ドキュメント内のヘッダーを使用して、順序付けられていないリストのネストされたセットが作成されます。
注:これは、コメントまたはWikiページで使用されるGitHub Flavored Markdown(GFM)ではなく、GitHub Pagesで機能するはずです。知る限り、そのためのソリューションは存在しません。
自動ではありませんが、Notepad ++正規表現を使用します。
最初をすべて2番目に置き換える(ヘッダーのないすべての行を削除する)
^##(#?)(#?)(.*?)$(.|\r|\n)*?(?=^##|\z)
-\1\2 [\3](#\3)\n
次に(ヘッダーIIIをスペースに変換します)
-##
-
次に(ヘッダーIIをスペースに変換します)
-#
-
次に(リンクタイトルの最初と最後にある未使用の文字を削除します)
\[ *((?:(?![ .:#!\?;]*\])[^#])*)[ #:!\?;]*\]
[\1]
次に(最後のトークンを小文字に変換し、スペースではなくダッシュ)
\]([^ \r\n]*) ([^\r\n ]*)
]\L\1-\2
未使用の最終ポンドと最初のダッシュを削除します。
(?:()[-:;!\?#]+$|(\]#)-)
\1\2
リンク内の不要な文字を削除します。
(\].*?)(?:\(|\))
\1
最後に、最終リンクの周りに括弧を追加します。
\](?!\()(.*?)$
\]\(\1\)
そしてほら!十分な時間を繰り返す場合、これをグローバルマクロに入れることもできます。
VimでMarkdownファイルを編集する場合、このプラグイン vim-markdown-toc を試すことができます。
使い方は簡単です。目次を追加したい場所にカーソルを移動し、:GenTocGFM
を実行してください!
スクリーンショット:
特徴:
Markdownファイルのtocを生成します。 (GitHub Flavored MarkdownおよびRedcarpetをサポート)
既存のTOCを更新します。
保存時にTOCを自動更新します。
Github Flavored Markdownは、MarkdownエンジンとしてRedCarpetを使用します。 RedCarpetリポジトリ から:
:with_toc_data-出力HTMLの各ヘッダーにHTMLアンカーを追加して、各セクションへのリンクを許可します。
このフラグを設定するには、レンダラーレベルで取得する必要があるようですが、これは明らかにGithubでは不可能です。ただし、Github Pagesの 最新の更新 では、ヘッダーの自動アンカーがオンになっており、リンク可能な見出しが作成されているようです。必要なものではありませんが、ドキュメントの目次を作成するのに少し手間がかかる場合があります(手動ではありますが)。
提案された回避策を除き、それは不可能です。
I 提案 Kramdown TOC拡張と[email protected]のその他の可能性、および Steven!Ragnarök 通常の応答:
提案とリンクをありがとう。チームが確認できるように、内部機能要求リストに追加します。
それが起こるまでこの質問に賛成しましょう。
別の(一般に受け入れられない)回避策は、Markdownの代わりにasciidocを使用することです TOCをレンダリングします 。
README.md
ファイルから http://documentup.com/ を使用して、Webページを自動的に生成することができます。 TOCを作成することではありませんが、多くの場合、TOCを作成する理由を解決するかもしれません。
Documentupの別の代替手段はFlatdocです: http://ricostacruz.com/flatdoc/
Visual Studio Codeを使用してmardownファイルの目次を作成する非常に便利な方法は、拡張子 Markdown-TOC です。
既存のマークダウンファイルにTOCを追加し、保存時にTOCを最新の状態に保つこともできます。
Gitdown はGithubのマークダウンプリプロセッサーです。
Gitdownを使用すると、次のことができます。
Gitdownは、GitHubリポジトリのドキュメントページの管理に関連する一般的なタスクを合理化します。
それを使用するのは簡単です:
var Gitdown = require('gitdown');
Gitdown
// Gitdown flavored markdown.
.read('.gitdown/README.md')
// GitHub compatible markdown.
.write('README.md');
別のスクリプトとして使用することも、ビルドスクリプトルーチンの一部として使用することもできます( Gulp など)。
coryfklein/doctoc 、 thlorenz/doctoc のフォークを使用し、「generated with」を追加しない DocToc "すべての目次へ。
npm install -g coryfklein/doctoc
同僚の@schmiedcと私は、優れたh1
ライブラリを使用してmarkdown-js
ボタンの左側に新しいTOC
ボタンをインストールする GreaseMonkeyスクリプト を作成しました。目次を更新します。
Doctocのようなソリューションに対する利点は、GitHubのwikiエディターに統合され、ユーザーがコマンドラインで作業する必要がないことです(そして、ユーザーにnode.js
などのツールをインストールする必要があります)。 Chromeでは、拡張機能ページにドラッグアンドドロップすることで機能します。Firefoxでは、GreaseMonkey拡張機能をインストールする必要があります。
プレーンマークダウンで動作します(つまり、マークダウンのGitHub拡張機能であるため、コードブロックを正しく処理しません)。寄付を歓迎します。
現在は 不可能 マークダウン構文を使用しています(進行中の GitHubでの議論 を参照)が、次のような外部ツールを使用できます。
または、代わりにAsciiDoc
を使用します(例:README.adoc
)。
:toc: macro
:toc-title:
:toclevels: 99
# Title
## A
### A2
## B
### B2
GithubのTexteditor Atomのために、この素晴らしいプラグイン(またはAtom-lingoの「パッケージ」)をチェックして、「解析されたマークダウンからの見出しのTOC(目次)」ファイル:
Atomパッケージとしてインストールすると、ショートカットctrl-alt-c
を使用して、現在のカーソル位置にあるmarkdown-doc-structureに基づいてTOCを挿入できます...
スクリーンショット:
Atomキーバインド
markdown-tocは、Atomのプラグインを制御するために次のデフォルトのキーバインディングを提供します。
ctrl-alt-c
=>カーソル位置に目次を作成ctrl-alt-u
=>目次を更新ctrl-alt-r
=>目次を削除プラグイン機能(プロジェクトのREADMEから)
# A 1
→#a-1
depthFrom:1
およびdepthTo:6
を使用した深さ制御[1-6]withLinks:1
を使用してリンクを有効または無効にしますupdateOnSave:1
で保存時にリストを更新orderedList:0
で順序付きリスト(1. ...、2 ...)を使用しますこれを実現するために今日一緒に投げたシェルスクリプトを次に示します。ニーズに合わせて微調整する必要があるかもしれませんが、良い出発点になるはずです。
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/^#//'
これらの最終的な#置換を行うより良い方法を誰かが知っているなら、コメントを追加してください。私はいろいろなことを試してみましたが、どれにも満足していなかったので、私はそれを強引に強制しました。
多くの人が回避策を提供しているため、これはこの質問に対する直接的な答えではありません。 TOCの生成は、これまでにGithubによって公式にサポートされているとは思わない。 GitHubでGFMプレビューページに目次を自動的に表示する場合は、公式の 機能要求の問題 のディスカッションに参加してください。