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


当前回答

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

在线内容表生成器(raychenon/play-table-of-contents) arthurhammer/ GitHub -toc -浏览器扩展,添加一个目录到GitHub回购表


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

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

## A

### A2

## B

### B2

正如这条评论所建议的。点击这里查看演示。

其他回答

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

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

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

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

-##
        -

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

-#
    -

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

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

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

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

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

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

删除链接中无用的字符:

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

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

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

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

无耻的“借用”这个SO答案。

你可以用Pandoc做到这一点。

pandoc -s --toc input.md -o input_toc.md 

注意:输入和输出文件的顺序在这里很重要。

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

* auto-gen TOC:
{:toc}

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

这将使用文档中的头文件生成一组嵌套的无序列表。

注意:这应该适用于GitHub页面,而不是评论或wiki页面中使用的GitHub调味Markdown (GFM)。我想这个问题没有解决办法。

2021年3月更新:GitHub增加了一个官方解决方案

readme现在显示一个ToC,就像你向下滚动它们:

演示:https://github.com/cirosantilli/test-git-web-interface/tree/master/d

它没有在文档中呈现,因为我想要更好的Ctrl + F,但总比没有强。

Also现在也适用于非readme,例如:https://github.com/cirosantilli/test-git-web-interface/blob/master/md.md

他们还添加了一个存储库设置来启用禁用该功能。太奇怪了,谁会想让它失效呢?在https://github.com/cirosantilli/test-git-web-interface/settings下面

目录 自动生成此存储库中Markdown文件的目录。目录将显示在文件顶部附近。

原来的答案

这是不可能的,除了建议的变通办法。

我建议Kramdown TOC扩展和其他可能性support@github.com和Steven!Ragnarök的回复一如既往:

谢谢你的建议和链接。我将把它添加到我们的内部功能请求列表中,供团队查看。

让我们给这个问题投票,直到它发生为止。

另一种解决方法是使用Asciidoc而不是Markdown,后者会渲染toc。现在我的内容已经采用了这种方法。

Gitdown是Github的markdown预处理器。

使用Gitdown你可以:

生成目录 查找失效的url和片段标识符 包括变量 包含文件 获取文件大小 生成徽章 打印日期 打印关于存储库本身的信息

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

使用它很简单:

var Gitdown = require('gitdown');

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

您可以将其作为一个单独的脚本,也可以将其作为构建脚本例程的一部分(例如Gulp)。