我开始使用标记来做笔记。

我用标记来查看我的笔记,它很漂亮。

但是随着我的笔记变长,我发现很难找到我想要的东西。

我知道markdown可以创建表,但它是否能够创建目录,跳转到部分,或定义页面部分markdown?

或者,是否有降价阅读器/编辑器可以做这些事情。搜索也是一个不错的功能。

简而言之,我想让它成为我很棒的笔记工具,功能就像写一本书一样。


当前回答

对于Visual Studio Code用户来说,今天(2020年)使用的最佳选择是Markdown All in One插件(扩展)。

要安装它,启动VS Code快速打开(Control/⌘+P),粘贴以下命令,并按enter。

ext install yzhang.markdown-all-in-one

要生成TOC,打开命令面板(Control/⌘+Shift+P),并选择select Markdown:创建内容表选项。


另一个选择是Markdown TOC插件。

要安装它,启动VS Code快速打开(Control/⌘+P),粘贴以下命令,并按enter。

ext install markdown-toc

要生成TOC,打开命令面板(Control/⌘+Shift+P),并选择Markdown TOC:插入/更新选项或使用Control/⌘+MT。

其他回答

对我来说,@Tum提出的解决方案对于2个层次的目录来说非常有效。然而,对于第3个关卡,这种方法却不起作用。它没有像前两层那样显示链接,而是显示纯文本3.5.1。[bla blabla](#blablabla) <br>代替。

我的解决方案是@Tum解决方案(非常简单)的补充,适用于需要3级或以上目录的人。

在第二层,一个简单的制表符将为您正确地完成缩进。但它不支持2个标签。相反,你必须使用一个标签,并添加尽可能多的&nbsp;根据你自己的需要来正确对齐第三层。

下面是一个使用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。Sub-Sub-Title                   1.1.1.1。Sub-Sub-Sub-Title

标题

标题1

字幕

标题2

Sub-Sub-Title

标题3

Sub-Sub-Sub-Title

标题4

根据您的工作流程,您可能想要查看捷联式

这是原始版本(http://strapdownjs.com)的一个分支,它添加了目录的生成。

在repo上有一个apache配置文件(可能还没有正确更新)来包装简单的markdown,如果你不喜欢写在html文件中。

如果你正在使用Discount markdown,启用一个标志-ftoc来自动生成,并使用-T来在一个目录的前面,例如:

markdown -T -ftoc <<EOT
#heading 1

content 1

##heading 2

content 2
EOT

将会产生

<ul>
 <li><a href="#heading-1">heading 1</a>
 <ul>
  <li><a href="#heading-2">heading 2</a></li>
 </ul>
 </li>
</ul>
<a name="heading-1"></a>
<h1>heading 1</h1>
...

显然你也可以使用markdown -toc,这个人没有提到,但是USAGE信息可以(由markdown -h这样的非法选项触发)。


我花了一段时间阅读源代码才明白这一点,所以我把它写下来主要是为了未来的我。我在Arch Linux上使用折扣降价,从折扣包。这个人并没有真正告诉你这是折扣,但提到了大卫·帕森斯的作者。

markdown --version
# markdown: discount 2.2.7

基于albertodebortoli answer创建了附加检查和标点符号替换功能。

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

Typora生成的内容表添加[TOC]到您的文档。