github-flavored-markdown中的自动TOC

是否有可能使用Github Flavored Markdown生成自动目录?

我创build了两个选项来为github-flavored-markdown生成一个toc:

DocToc命令行工具( 源 )需要node.js

安装:

npm install -g doctoc

用法:

doctoc . 将目录添加到当前和所有子目录中的所有降价文件。

DocToc WebApp

如果您想先在线试用,请转到doctoc网站,粘贴降价页面的链接,它会生成一个可以插入到降价文件顶部的内容表格。

Github Wiki和锚点

正如马修· doctoc Matthew Flaschen)在下面的评论中指出的,对于其wiki页面,GitHub以前没有生成doctoc依赖的锚。

更新:但是,他们解决了这个问题 。

GitHub页面(基本上是Jekyll的一个包装) 似乎使用了kramdown ,它实现了 Maruku的 所有function ,因此通过toc属性支持自动生成的目录 :

 * auto-gen TOC: {:toc} 

第一行只是开始一个无序列表,实际上被扔掉了。

这将导致嵌套的无序列表集,使用文档中的标题。

注意:这应该适用于GitHub页面,而不是GitHub Flavored Markdown(GFM),如注释或维基页面中所使用的。 AFAIK解决scheme不存在的。

这不是自动的,但它使用Notepad ++正则expression式:

首先全部replace(删除所有没有标题的行)

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

然后(将标题III转换为空格)

 -## - 

然后(将标题II转换为空格)

 -# - 

然后(在链接标题的开头和结尾处删除未使用的字符)

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

然后(转换最后的令牌小写和破折号而不是空格)

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

删除未使用的最终磅和最初的破折号:

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

删除链接中的无用字符:

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

最后在最终的链接上添加括号:

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

瞧! 如果重复足够的时间,甚至可以把它放在全局macros中。

Github Flavored Markdown使用RedCarpet作为Markdown引擎。 从RedCarpet回购 :

:with_toc_data – 将HTML锚点添加到输出HTML中的每个头部,以允许链接到每个部分。

看来你需要在渲染器级别设置这个标志,这在Github上显然是不可能的。 然而,Github页面的最新更新似乎自动锚定打开标题,创build可链接的标题。 不完全是你想要的,但它可以帮助你为你的文档创build一个TOC更容易一些(尽pipe手动)。

如果你用Vim编辑Markdown文件,你可以试试这个插件vim-markdown-toc 。

用法很简单,只需将光标移动到你要添加目录的地方,然后运行:GenTocGFM ,完成!

截图:

VIM  - 降价 -  TOC

特征:

  1. 为Markdown文件生成toc。 (支持GitHub Flavored Markdown和Redcarpet)

  2. 更新现有的toc。

  3. 保存时自动更新toc。

这是不可能的,除了提出的解决办法。

我提议克拉姆丁TOC扩展和其他可能性support@github.com和史蒂文! 拉格纳罗克回答说:

感谢您的build议和链接。 我将把它添加到我们的内部function请求列表中供团队查看。

让我们高兴这个问题,直到它发生。

另一个(通常是不可接受的)解决方法是使用asciidoc而不是Markdown, 它会呈现TOC 。

Grunt自述文件生成器

我刚刚为此写了一个工具。 主要用于我的github项目。 这是一个Grunt插件,用于从多个Markdown文件的小部分和目录生成自述文件。 有许多function和定制。

引自自述文件:

比方说,你有一个自述的结构,如:

 - Installation - Usage -- Example -- Example Output - Documentation -- Options --- option1 --- option2 -- API - License - Contributing 
  • 您可以编写一个任务来从option1.mdoption2.md生成Options.md
  • 然后是一个从Options.mdAPI.md生成Documentation.md的任务
  • Example.mdExample Output.md文件生成Usage.md另一个任务
  • 并通过从Installation.mdUsage.mdDocumentation.mdLicense.mdContributing.md创buildReadme.md将其全部包装起来
  • 瞧!

强调

  • 自动生成目录
  • 自动Back To Top链接生成
  • 高度可定制的许多大部分图片的部分
  • 自动标题和描述生成在顶部
  • 选项来生成所需的分支顶部的Travis生成状态图像
  • 专门为GitHub项目和GFMdevise
  • 在顶部可选横幅放置一个标志或ASCII艺术!

这个插件需要~0.4.1

….

我希望这有帮助。 回购站位于GitHub 。 您可以在这里find更多关于如何安装的信息和完整的选项列表。

可以从README.md文件中使用http://documentup.com/自动生成网页。; 这不是创造一个TOC,但是对于许多人来说,这可能会解决想要创build一个TOC的原因。

Documentup的另一种替代方法是Flatdoc: http: //ricostacruz.com/flatdoc/

Gitdown是Github的降价预处理器。

使用Gitdown你可以:

  • 生成目录
  • 查找无效的URL和片段标识符
  • 包含variables
  • 包含文件
  • 获取文件大小
  • 生成徽章
  • 打印date
  • 打印有关存储库本身的信息

Gitdown简化了与维护GitHub存储库文档页面相关的常见任务。

使用它很简单:

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

你可以把它作为一个单独的脚本,或者把它作为构build脚本例程的一部分(比如Gulp )。

使用coryfklein / doctoc ,这是thlorenz / doctoc的一个分支,它不会将“ DocToc 生成的 ”添加到每个目录中。

 npm install -g coryfklein/doctoc 

我的同事@schmiedc和我创build了一个GreaseMonkey脚本 ,在h1button左侧安装一个新的TOCbutton,它使用卓越的markdown-js库来添加/刷新目录。

与诸如doctoc之类的解决scheme相比,它的优势在于它集成到了GitHub的wiki编辑器中,并不需要用户在其命令行上工作(并要求用户安装像node.js这样的工具)。 在Chrome中,它通过拖放到扩展页面来工作,在Firefox中,您将需要安装GreaseMonkey扩展。

它将使用普通的降价(即它不正确处理代码块,因为这是一个GitHub扩展到降价)。 贡献值得欢迎。

这个问题不是直接的答案,因为很多人提供了解决方法。 我不认为生成TOC已经得到了Github官方的支持。 如果您希望GitHub自动在其GFM预览页面上显示目录,请参加关于官方function请求问题的讨论。

目前,使用markdown语法是不可能的 (请参阅GitHub上正在进行的讨论 ),但是您可以使用一些外部工具,例如:

  • 在线目录生成器 ( raychenon / play-table-of-contents )
  • arthurhammer / github-toc – 在GitHub repos中添加目录的浏览器扩展

或者使用AsciiDoc代替(例如README.adoc ),例如

 :toc: macro :toc-title: :toclevels: 99 # Title ## A ### A2 ## B ### B2 

正如本评论所build议的那样。 在这里检查演示。