Gatsby plugin using remark to generate a Table of Contents in markdown.
This plugin requires gatsby-remark-autolink-headers to generate the anchor links.
npm i --save gatsby-remark-autolink-headers
npm i --save gatsby-remark-table-of-contents
Global configurations should be set in gatsby-config.js
.
module.exports = ({ root }) => ({
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
{
resolve: `gatsby-remark-table-of-contents`,
options: {
exclude: "Table of Contents",
tight: false,
ordered: false,
fromHeading: 1,
toHeading: 6,
className: "table-of-contents"
},
},
`gatsby-remark-autolink-headers`
],
},
},
],
})
Generate a table of contents:
```toc
# This code block gets replaced with the TOC
If you like to overwrite the global settings in place (camelCase or kebab-case):
````md
```toc
# This code block gets replaced with the TOC
exclude: Table of Contents
tight: false
ordered: false
from-heading: 2
to-heading: 6
class-name: "table-of-contents"
## Options
### `exclude`
`string? | array?` — default: `''`
Exclude titles matching this string (`new RegExp('^(' + string + ')$', 'i')`).
If an array is passed the array gets joined with a pipe (`new RegExp('^(' + array.join('|') + ')$', 'i')`).
### `tight`
`boolean?` — default: `false`
Tight list items.
### `ordered`
`boolean?` — default: `false`
Creates an ordered list.
### `fromHeading`
`number?` — default: `2`
Minimum heading depth to include.
### `toHeading`
`number?` — default: `6`
Maximum heading depth to include.
### `className`
`string?` — default: `toc`
Set the `class`-name of the generated div.
## Example
### Input
````md
# Headline 1.0.0
## Table of Contents
```toc
exclude: Table of Contents
from-heading: 2
to-heading: 6
### Output
````md
# Headline 1.0.0
## Table of Contents
- [Headline 1.1.0](#headline-110)
- [Headline 1.1.1](#headline-111)
- [Headline 1.2.0](#headline-120)
## Headline 1.1.0
### Headline 1.1.1
## Headline 1.2.0
MIT · Started by signalwerk supported by several contributors