マークダウンでページと目次を作成しますか?


358

私はマークダウンを使用してメモを取り始めました。

私が使う マークダウンマークダウンノートとその美しを表示します。

しかし、私のノートが長くなるにつれて、自分が欲しいものを見つけるのが難しくなります。

マークダウンでテーブルを作成できることは知っていますが、目次を作成したり、セクションにジャンプしたり、マークダウンでページセクションを定義したりできますか?

あるいは、そのようなことを行うことができるマークダウンリーダー/エディタはありますか?検索もいい機能だと思います。

要するに、私はそれを私の素晴らしいメモ取りツールにして、本を書くようなものと同じようにしたいです。


2
javascript / node.jsツールを使用したい場合は、marked-tocを
jonschlinkert

@jonschlinkert回答として提出してください!現在、回答は無料またはPythonではないツールのみを提案しています。本当に素晴らしい選択肢ではありません。
ドミ2014

8
LaTeXではこれがで実現されることを私は多分言及すべき\tableofcontentsです。ホイールを再発明する場合は、良品をコピーすることをお勧めします。
Eero Aaltonen


同様に、reStructuredTextには、最も簡単な形式ではのように見える目次用の組み込みディレクティブがあります.. contents::
saaj

回答:


37

MultiMarkdown Composerは、編集中に役立つ目次を生成するようです。

TOCを生成できるライブラリが存在する場合もあります。PythonMarkdown TOC Extensionを参照してください。


17
MultiMarkdown ComposerはMacOSのみです
2015

1
作業中のPython Markdown TOCリンク:python-markdown.github.io/extensions/toc
John

2
アプリは英国の地域では利用できません。
ケノーブ

TOC拡張機能は、MarkdownではなくHTML tocを生成します。これが難しいのは驚くべきことです。
rjurney

394

あなたはこれを試してみることができます。

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

10
上記の3番目の例は機能しません。 ## Example ## "Example2" ## Third Example<a name="third-example" /> これまでにスペースを飲み込むことができる唯一の方法です。確かに、3番目のタグは#Third、上記のスニペットで--スペースが続き、次に「例」という単語として解釈されますか?ハイフンはまったく機能しません。ありがとう
twobob

この例は、複数の単語の例として機能するためのものです。すべての単語は、大文字のロック、スペースなしに分解されます。
Rick

6
RStudioで正常に動作します。ただ、ドイツ語のウムラウトなどü必要がアンカーIEのウムラウトなしに書き込まれることを追加したい1. [Einführung](#einfuhrung)
シュタイン

4
Bitbucket v4.5.2の見出しのアンカーは自動的に作成されません
Mike Rylander

1
その4番目の例は私が探していたものです。ありがとう!
kenecaswell

220

ここに便利な方法があります。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

生成する:

目次

  1. 前書き
  2. いくつかの段落
    1. サブパラグラフ
  3. 別の段落

はじめに

見出し2スタイルでフォーマットされたいくつかの導入テキスト

いくつかの段落

最初の段落のテキスト

サブパラグラフ

これは見出し3スタイルでフォーマットされたサブ段落です

別の段落

2番目の段落のテキスト


22
アンカータグを見出しの上の行に配置して、リンクをクリックすると見出しがページに表示されるようにします。
mgarey 2017

4
これは私にとって唯一の便利なものでした。タイトルが長い場合、アンカータグがないと不可能です。
マットフレッチャー

これは本当にいいです。すべてのJupyterノートブックに目次を配置し、セクション間をすばやく移動しました。
jackdbd

@mgareyだけでは、最初のアンカーを置く:## <a name="foo" /> Foo
tobias_k

40

以下のためのVisual Studioのコードのユーザー、良いアイデアが使用され値下げTOCのプラグインを。

これをインストールするには、VS Code Quick Open(Control/⌘+ P)を起動し、次のコマンドを貼り付けてEnterキーを押します。

ext install markdown-toc

そして、TOCを生成するために、コマンドパレットを開きます(Control/⌘+ Shift+ P)を選択Markdown TOC:Insert/Update optionまたは使用Control/⌘+をMT


7
注:ストックVSCodeを使用すると、ヘッダーへのマークダウンリンクを作成できることがわかりました。[Section Foo](#foo-header-title)プレビューモード以外でも機能します(つまり、プレーンマークダウンで)。
kitsu.eb 2017

4
VSCodeのもう1つの代替手段は、複数の機能を備えたvscode- markdownで、ToCが含まれます
CiprianTomoiagăOct

26

このルビスクリプトを試し、マークダウンファイルから目次を生成できます。

 #!/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

すごい!ただ、ノート、追加することができますifndefincludeendif禁じられた単語のリストに、他のプリプロセッサディレクティブの中で、。また、ループのスコープ外でリストを定義すると、反復ごとにリストを再インスタンス化する必要がなくなります。また、これは#コメント構文を使用するすべての言語のコメントをピックアップし、Rubyを含みますが、これは良くありません。よろしければ編集させていただきます。しかし、これは素晴らしいスタートであり、私の目的のためにうまくいきました。本当にありがとう!
ジェフクライン

これはatxの見出し(つまり、で始まる見出し)でのみ機能し、setextの見出し#(下線付き)では機能しません。
gozzilli

おかげで、これをレールのレッドカーペットに使用している場合はtitle.parameterize、href を使用する必要があります 。ありがとう!
Alexis

25

マークダウンドキュメントでTOC(概要)を作成する方法は2つあります。

1.手動で

# 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.プログラムで

-あなたはgithubの上の私のプロジェクトに見て、たとえばあなたのための要約を生成するスクリプトを使用することができますsummarizeMDを -

他のscript / npmモジュール(たとえばdoctoc)も試しましたが、アンカーが機能しているTOCを再現する人はいません。


= ... `MarkdownPad2(Windowsの場合)で認識されていない` `<div要素のid
chmike

同じフォルダでのみ機能し、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}

markdown extraを使用する場合は、リンク、ヘッダー、コードフェンス、画像に特別な属性を追加できることを忘れないでください。
https://michelf.ca/projects/php-markdown/extra/#spe-attr


11

異なるMarkdownパーサーによって生成されたアンカータグは均等ではありません。

MarkdownパーサーGFM(GitHub Flavored Markdown)またはRedcarpetを使用している場合は、目次を処理するVimプラグインを作成しました。

特徴

  1. Markdownファイルの目次を生成します。

    サポートされているMarkdownパーサー:

    • GFM(GitHub Flavored Markdown)
    • レッドカーペット
  2. 既存の目次を更新します。

  3. 保存時に既存の目次を自動更新します。

スクリーンショット

vim-markdown-toc

使用法

目次を生成する

目次を追加する行にカーソルを移動して、以下のコマンドを入力します。このコマンドは、カーソルが目次に移動した後に見出しを生成します。

  1. :GenTocGFM

    GFMリンクスタイルで目次を生成します。

    このコマンドは、README.mdなどのGitHubリポジトリのMarkdownファイル、およびGitBookのMarkdownファイルに適しています。

  2. :GenTocRedcarpet

    目次をRedcarpetリンクスタイルで生成します。

    このコマンドは、Jekyllに適しています。または、MarkdownパーサーとしてRedcarpetを使用する他の場所です。

    ここでGFMとRedcarpetスタイルのtocリンクの違いを確認できます。

既存の目次を手動で更新する

通常、これを行う必要はありません。既存の目次は、デフォルトで保存時に自動更新されます。手動で行いたい場合は、:UpdateTocコマンドを。

ダウンロードとドキュメント

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


10

またpandoc「1つのマークアップ形式を別の形式に変換する」ために「スイスアーミーナイフ」を使用することもできます。指定した場合、出力ドキュメントのコンテンツのテーブルを自動的に生成できます。--toc引数を指定。

ヒント:html出力に目次が必要な場合は、-sは、スタンドアロンドキュメントを生成するものを指定するます。

シェルコマンドラインの例:

./pandoc -s --toc input.md -o output.html



7

このbashワンライナーを使用して生成できます。マークダウンファイルがと呼ばれていると仮定します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

これは素晴らしい。引数としてファイル名を使用し、おそらくサブセクションの処理を使用して、適切なスクリプトとして書き直す価値があります。
MasterScrat 2018

6

python-markdownパーサーを使用して見出しを取得し、TOCをローカルリンク付きのMarkdown形式の順序付けられていないリストとして出力するの拡張をコーディングしたところです。ファイルは

... markdown/extensions/マークダウンインストールのディレクトリに配置する必要があります。次に、あなたがしなければならないのは、参照として<a>id="..."属性を持つタイプのアンカータグです-したがって、このような入力テキストの場合:

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

...拡張機能は次のように呼び出すことができます:

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

...そして、このtocをマークダウンドキュメントに貼り付けることができます(または、テキストエディターにショートカットがあり、現在開いているドキュメントのスクリプトを呼び出し、その結果のTOCを同じドキュメントに挿入します)。

古いバージョンのにpython-markdown__main__.pyモジュールがないため、上記のコマンドライン呼び出しはこれらのバージョンでは機能しません。


6

他の回答で述べたように、目次を自動的に生成する方法は複数あります。ほとんどはオープンソースソフトウェアであり、ニーズに適合させることができます。

ただし、Markdownが提供する限定されたオプションを使用して、目次の視覚的に魅力的な書式設定が欠けていました。私たちは次のことを思いつきました:

コード

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

----

ドキュメント内に、次のようにターゲットサブパートマーカーを配置します。

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

Markdownをどこでどのように使用するかに応じて、以下も機能し、見栄えの良いMarkdownコードが提供されます。

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

レンダリングの例

コンテンツ

1.マークダウン

2. BBCodeのフォーマット


メリット

  • 必要な数のレベルのチャプターとサブチャプターを追加できます。目次では、これらはより深いレベルでネストされた順序なしリストとして表示されます。

  • 順序付きリストは使用しません。これらはインデントを作成し、番号をリンクせず、「1.1。」のような10進数の分類番号の作成に使用できません。

  • 最初のレベルではリストを使用しません。ここでは、順序付けられていないリストを使用することも可能ですが、必須ではありません。インデントと箇条書きは、視覚的な混乱を追加し、ここでは機能を追加しないため、最初のToCレベルのリストはまったく使用しません。

  • 目次の第1レベルのセクションを太字で視覚的に強調します。

  • #heading--1-1実際の見出しの変換された部分を含むマーカーではなく、ブラウザーのURLバーで「美しい」ように見える、短くて意味のあるサブパートマーカー。

  • このコードでは## …、セクションにH2見出し()、### …サブ見出しにH3見出し()を使用しています。これにより、## …セクションがH1見出し(# …)。ドキュメントタイトル自体にH1見出しを使用しても、論理的には一貫しています。

  • 最後に、目次を実際のコンテンツから分離するための素晴らしい水平線を追加します。

この手法の詳細と、フォーラムソフトウェアDiscourse内でのこの手法の使用方法については、こちらを参照してください


5

マークダウンファイルを解析し、目次をマークダウンリストとして出力するPythonスクリプトを作成しました。 md-to-toc

私が見つけた他のスクリプトとは異なり、md-to-tocは重複したタイトルを正しくサポートしています。また、インターネット接続を必要としないため、パブリックリポジトリから入手できるファイルだけでなく、任意のmdファイルで機能します。






4

プラグインでテキストエディターを使用するだけです。

あなたのエディタはおそらくこれを処理するためのパッケージ/プラグインを持っています。たとえば、Emacsでは、markdown-toc TOCジェネレーターをインストールできます。次に、編集しながら繰り返し呼び出しますM-x markdown-toc-generate-or-refresh-toc。頻繁に実行する場合は、キーバインドする価値があります。HTMLアンカーでドキュメントを汚染することなく、簡単な目次を生成するのに適しています。

他のエディターにも同様のプラグインがあるため、人気のあるリストは次のようになります。


2

albertodebortoliに基づいて、答えは追加のチェックと句読点の置換を含む関数を作成しました。

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


2

私にとって、@ Tumによって提案されたソリューションは、2レベルの目次の魅力のように機能します。ただし、3番目のレベルでは機能しませんでした。最初の2レベルについてはリンクを表示せず、3.5.1. [bla bla bla](#blablabla) <br>代わりにプレーンテキストを表示します。

私の解決策は、3レベル以上の目次が必要な人のための@Tum(非常に単純な)の解決策への追加です。

2番目のレベルでは、単純なタブでインデントが正しく行われます。ただし、2つのタブはサポートしていません。代わりに、1つのタブを使用して、&nbsp; 3番目のレベルを正しく揃えるために、、必要な数だけ自分で必要があります。

4つのレベルを使用する例を次に示します(レベルが高くなると、ひどくなる)。

# 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

これにより、目次のすべての要素が対応するセクションへのリンクである次の結果が得られます。も注意してください<br>同じ行ではなく、新しい行を追加するために。

目次

  1. タイトル
    1.1。サブタイトル
           1.1.1。サブ
                     サブタイトル1.1.1.1。サブサブサブタイトル

題名

見出し1

字幕

見出し2

サブサブタイトル

見出し3

サブサブサブタイトル

見出し4


1

ワークフローによっては、ストラップダウンを確認することをお勧めします

これは、目次の生成を追加するオリジナル(http://strapdownjs.com)のフォークです。

リポジトリにapache設定ファイルがあり(まだ適切に更新されていない可能性があります)、htmlファイルで記述しない場合は、オンザフライでプレーンマークダウンをラップします。


1

マークダウンの公式ドキュメントは何ですか?相互参照は、括弧内にのみ[Heading]、または空の括弧付きで記述できます[Heading][]

どちらもpandocを使用して動作します。そのため、mdファイルの$ TOCをそのTOCに置き換える簡単なbashスクリプトを作成しました。(あなたはあなたのディストリビューションの一部ではないかもしれないenvsubstを必要とするでしょう)

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

1

たまたまEclipseを使用している場合は、Ctrl+ O(アウトライン)ショートカットを使用できます。これにより、目次と同等のものが表示され、セクションタイトル(オートコンプリート)で検索できます。

アウトラインビュー(ウィンドウ->ビューの表示->アウトライン)を開くこともできますが、オートコンプリート検索はありません。


1

マークダウン用の目次を生成する小さなpythonスクリプトであるtoc.pyを使用します。

使用法:

  • Markdownファイル<toc>で、目次を配置する場所を追加します。
  • $python toc.py README.mdREADME.mdの代わりにマークダウンファイル名を使用してください)

乾杯!


あなたのスクリプトは素晴らしいですが、各タイトルの前にアンカーを作成しません。少なくともbitbucketでは必要です。
ポールルージュ

1

マークダウンドキュメントから目次を自動生成するコマンドラインユーティリティを提供するhttps://github.com/ekalinin/github-markdown-tocを使用しました。

プラグイン、マクロ、その他の依存関係はありません。ユーティリティをインストールしたら、ユーティリティの出力をドキュメントの目次が必要な場所に貼り付けます。使い方はとても簡単。

$ cat README.md | ./gh-md-toc -


1

GFM Markdown Table of Contentsを自動生成できるmdtoc.rbと呼ばれるRubyスクリプトがあり、ここに投稿されている他のいくつかのスクリプトと似ていますが少し異なります。

次のような入力Markdownファイルがあるとします。

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

それはこの目次を生成します:

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

このトピックに関する私のブログ投稿も参照してください。

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