是否有可能生成一个自动目录使用Github调味Markdown?


当前回答

我创建了两个选项来生成一个toc的github风味markdown:

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

Installation:

NPM install -g doctoc

Usage:

doctoc。向当前目录和所有子目录中的所有markdown文件添加目录。

DocToc WebApp

如果你想先在网上试试,去doctoc网站, 粘贴标记页面的链接,它将生成一个表 可以插入标记文件顶部的内容。

Github维基和锚

正如Matthew Flaschen在下面的评论中指出的那样,对于其维基页面,GitHub之前并没有生成doctoc所依赖的锚。

更新:但是,他们修复了这个问题。

其他回答

它不是自动的,但它使用notepad++正则表达式:

用第二个替换所有第一个(删除所有没有标题的行)

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

然后(将头III转换为空格)

-##
        -

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

-#
    -

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

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

然后(转换最后一个符号小写和破折号而不是空格)

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

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

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

删除链接中无用的字符:

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

最后在最后链接的周围加上圆括号:

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

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

下面是我今天为此编写的shell脚本。可能需要根据你的需要进行调整,但这应该是一个很好的起点。

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

如果有人知道更好的方法来做这些最终的#替换,请添加评论。我尝试了各种各样的方法,但都不满意,所以我就硬着硬着。

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

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

大多数其他答案需要安装一些工具。 我找到了一个快速简单的在线解决方案https://imthenachoman.github.io/nGitHubTOC。

对于任何markdown输入,它生成内容输出表。 您可以指定最小和最大标题级别。

源代码位于https://github.com/imthenachoman/nGitHubTOC

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

使用方法很简单,只需将光标移动到您想要追加目录表的位置并运行:GenTocGFM,完成!

截图:

特点:

为Markdown文件生成toc。(支持GitHub调味Markdown和Redcarpet) 更新现有的toc。 保存时自动更新toc。