Markdown使用TOC自动生成导航栏
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是
轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:
https://github.com/jonschlinkert/markdown-toc
# 0x00 安装
TOC = Table of content , 将内容制作成导航
这个插件是基于 nodejs 的,因此需要安装 node 和 npm ,这里同样采用nvm的形式安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
source ~/.bashrc
nvm list-remote
nvm install v10.16.0
node -v
安装好nvm后,就可以使用npm 安装插件了
npm install --save markdown-toc
# 0x01 命令行
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是
轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:
这个插件带Cli命令,使用帮助如下
markdown-doc [选项] <输入>
<输入> 表示需要使用 TOC 的 markdown 文件,可以通过标准输入读取
[选项]
-i | 直接往 <输入> 的文件注入TOC标识符: <!-- toc -->,如果没有这个参数就输出到屏幕,不修改md文件 |
--json | 通过json格式打印TOC |
--append | 在字符串的后面追加TOC |
--bullets | 指定需要被生成TOC项的标识符号,可以指定多个: --bullets "*" --bullets "+" |
--maxdepth | TOC最大深度,就是可以折叠多少层,默认6层 |
--no-stripHeadingTags | 在强力功能前,不删去标题无关的HTML标签 |
# 0x02 亮点
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是
轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:
特点:
1. 可根据自己的需求生成TOC模板
2. 对重复标题生效
3. 默认采用sane,也可以自己定制
4. 过滤器可以筛掉你不想要的标题
5. 导入期可以导入你想加入的标题
6. 可以使用强劲的函数来改变链接生成
7. 可作为 remarkable 的插件使用
很安全:
不会像其他TOC生成器一样,破坏前面的内容,或将前面的内容属性误认为标题
# 0x03 用法
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是
轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:
var toc = require('markdown-toc'); toc('# One\n\n# Two').content;
// Results in:
// - [One](#one)
// - [Two](#two)
为了自定义输出,下面有几个属性将会返回
- content 自动生成导航导航的内容,你可以自定义样式
- highest 找到最高的等级标题,用于重新调整缩进
- tokens 可自定义的标题符号
# 0x04 API
1 - toc.plugin
作为 remarkable 插件使用,如下:
var Remarkable = require('remarkable');
var toc = require('markdown-toc'); function render(str, options) {
return new Remarkable()
.use(toc.plugin(options)) // <= register the plugin
.render(str);
}
使用实例
var results = render('# AAA\n# BBB\n# CCC\nfoo\nbar\nbaz');
2 - toc.json
可生成json格式的TOC对象
toc('# AAA\n## BBB\n### CCC\nfoo').json; // results in
[ { content: 'AAA', slug: 'aaa', lvl: 1 },
{ content: 'BBB', slug: 'bbb', lvl: 2 },
{ content: 'CCC', slug: 'ccc', lvl: 3 } ]
3 - toc.insert
在想插入TOC的位置写上 <!-- toc --> 或者 <!--toc--> 内容 <!--tocstop-->
(使用注释作为占位符可以避免破坏原本的代码)
<!-- toc -->
- old toc 1
- old toc 2
- old toc 3
<!-- tocstop --> ## abc
This is a b c. ## xyz
This is x y z.
结果是
<!-- toc -->
- [abc](#abc)
- [xyz](#xyz)
<!-- tocstop --> ## abc
This is a b c. ## xyz
This is x y z.
4 - 通用函数
为了方便给想定制TOC的用户folk一份,插件提供了一些通用函数
toc.bullets()
: 通过数组获取标题标记符toc.linkify()
: 链接到一个标题字符toc.slugify()
: 从标题字符中应用强力函数toc.strip()
: 从标题字符中去掉某些字符
例子
var result = toc('# AAA\n## BBB\n### CCC\nfoo');
var str = ''; result.json.forEach(function(heading) {
str += toc.linkify(heading.content);
});
# 0x05 选项
经常使用markdown 的玩家一定很想要一个自动生成的导航栏吧,自己写的基本思路就是
轮询监听滚动条的位置,通过抛锚和跳锚实现,这里介绍一下今天的主角,markdown-toc插件:
1 - 追加 (append)
追加一些字符串到匹配的标题标识符后面
toc(str, {append: '\n_(TOC generated by Verb)_'});
2 - 过滤 (filter)
类型: 函数
默认: undefined
参数:
str 命中的标题字符串
ele 标题记号对象
arr 所有的标题对象
过滤掉一些极端的匹配命中的标题,如下就是一个坏标题
[.aaa([foo], ...) another bad heading](#-aaa--foo--------another-bad-heading)
为了去除这种极端的情况,可以使用过滤器筛掉
function removeJunk(str, ele, arr) {
return str.indexOf('...') === -1;
} var result = toc(str, {filter: removeJunk});
//=> beautiful TOC
3 - 强劲(slugify)
类型: 函数
默认: 默认替换掉特殊符号
例子
var str = toc('# Some Article', {slugify: require('uslug')});
4 - 符号(bullet)
类型: 字符或者数组
默认: *
就是层叠的列表符号,传入数组 ['*', '-', '+']
5 - 首项 (first1)
类型:布尔
默认: true
排除文件中的第一个h1级标题。这样可以防止自述文件中的第一个标题出现在TOC中
6 - 最大深度 (first1)
类型: 数字
默认: 6
最大深度
6 - 去除头部标签(stripHeadingTags)
类型:布尔
默认: true
去除多余的标记,类似github 的 markdown 表现
Markdown使用TOC自动生成导航栏的更多相关文章
- css+js实现自动伸缩导航栏
用css+js实现自动伸缩导航栏 需要达到的效果: 默认首页选中样式 设置鼠标滑过效果:颜色变化(#f60),宽度变化,字体变化 所涉及的知识点: 布局:float css: 元素状态切换(displ ...
- AMScrollingNavbar框架(自动隐藏导航栏)使用简介
AMScrollingNavbar框架是一个可以上拉隐藏导航栏和下拉显示导航栏的框架,这个开源框架的调用也很简单,本章节就给大家介绍一下这个框架的用法. 一.下载及导入框架 AMScrollingNa ...
- 优于 swagger 的 java markdown 文档自动生成框架-01-入门使用
设计初衷 节约时间 Java 文档一直是一个大问题. 很多项目不写文档,即使写文档,对于开发人员来说也是非常痛苦的. 不写文档的缺点自不用多少,手动写文档的缺点也显而易见: 非常浪费时间,而且会出错. ...
- PHP 自动生成导航网址的最佳方法 v20130826
经常制作开发不同的网站的后台,写过很多种不同的后台导航写法. 最终积累了这种最写法,算是最好的吧.附上截图和代码如下(PHP+HTML) <?php $linkArr = array( 'ind ...
- 使用Python从Markdown文档中自动生成标题导航
概述 知识与思路 代码实现 概述 Markdown 很适合于技术写作,因为技术写作并不需要花哨的排版和内容, 只要内容生动而严谨,文笔朴实而优美. 为了编写对读者更友好的文章,有必要生成文章的标题导航 ...
- 第 10 篇:小细节 Markdown 文章自动生成目录,提升阅读体验
目录 在文中插入目录 在页面的任何地方插入目录 处理空目录 美化标题的锚点 URL 作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 上 ...
- UIViewController的View显示在导航栏下面如何解决?
ios7之前的版本中UIViewController中的view在显示后会自动调整为去掉导航栏的高度的,控件会自动在导航栏以下摆放. 在iOS7中UIViewController的wantsFullS ...
- HTML&CSS基础学习笔记1.11—导航栏
上文我们介绍到的<a>标签,由于<a>标签可以用来跳转,所以我们可以拿<a>标签来生成网页的导航栏. 其实在实际运用中,<a>标签就经常会被用来生成导航 ...
- jquery tmpl生成导航
引入<script src="jquery.tmpl.min.js"></script> html<ul class="nav" ...
随机推荐
- JAVA静态方法是否可以被继承?
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用 ...
- django的信号应用
问题? 比如说我们在操作数据库的时候,要在插入数据之前写入日志,插入完成之后也写入日志,那这个就会用到我们今天的django信号. 也许你会想到,函数装饰器的有这样的功能.其实不用那个,django的 ...
- 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?
对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...
- Ubuntu系统---安装“搜狗拼音法”导致桌面打不开
Ubuntu系统---安装“搜狗拼音法”导致桌面打不开 ubuntu系统中文版,安装完后,自带中文输入法.中文用着好好的,用一段时间后,就会莫名的出现,切换不过来,中文输入不好用了.只是简单想装一个搜 ...
- nomn文件分析
#encoding=gbk import os import re import math from os import path ''' 手动输入文件nmon文件路径,要截取的开始时间,结束时间 ' ...
- ZZNUOJ-2157: 水滴来袭-【干扰阅读-卡模糊精度1e-8的问题】
ZZNUOJ-2157: 水滴来袭 那是一个冷雨霏霏的秋天的下午,当罗辑拿着枪威胁三体文明的时候,如果过了三十秒三体人还没有同他展开谈判,罗辑就会扣动扳机即刻结束自己的生命,随后他身上的核弹控制器就会 ...
- rabbitmq可靠性
本文翻译汇总自rabbitmq的官方文档. 翻译使用谷歌翻译后简单修改,部分内容读起来仍然比较晦涩,不过意思传达到了. 可靠性指南 本页介绍了如何使用AMQP和RabbitMQ的各种功能来实现可靠 ...
- 如何DIY个性PE
前言:有时候在网络上能找到很不错的PE(无忧启动论坛),但是有时候PE的功能仍不能满足自己的需要(软件过旧,缺少某些功能),这时候就显得自己DIYPE的重要性 需要的工具: WIMTOOL(必备) 软 ...
- Springboot AOP写操作日志 GET POST
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 一款超好用的第三方评论插件--Gittalk
使用GITALK的背景: 1. 最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我的 ...