remark plugin to adjust the gap between headings in markdown.
Contents
What is this?
This package is a unified (remark) plugin that lets you change the gap
(number of blank lines) between headings and surrounding text when formatting
markdown.
When should I use this?
This project is useful when you want to adjust the gap around headings when
formatting markdown.
For example, when you want two blank lines before headings with a rank of 2
(## Like so
).
From personal experience, adding extra blank lines helps visualize breaks in
sections, especially when quickly scanning documentation.
The default when serializing markdown with remark-stringify
is to always
but a single blank line between blocks (headings, paragraphs, lists, code, etc).
Install
This package is ESM only.
In Node.js (version 16+), install with npm:
npm install remark-heading-gap
In Deno with esm.sh
:
import remarkHeadingGap from 'https://esm.sh/remark-heading-gap@6'
In browsers with esm.sh
:
<script type="module">
import remarkHeadingGap from 'https://esm.sh/remark-heading-gap@6?bundle'
</script>
Use
Say we have the following file example.md
:
# Pluto
## Contents
## History
### Discovery
### Name and symbol
### Planet X disproved
## Orbit
…and a module example.js
:
import {remark} from 'remark'
import remarkHeadingGap from 'remark-heading-gap'
import {read} from 'to-vfile'
const file = await remark()
.use(remarkHeadingGap)
.process(await read('example.md'))
console.log(String(file))
…then running node example.js
yields:
# Pluto
## Contents
## History
### Discovery
### Name and symbol
### Planet X disproved
## Orbit
API
This package exports no identifiers.
The default export is remarkHeadingGap
.
Adjust the gap between headings.
There are no blank lines added if a heading is the first or last child of
the document, list item, or block quote.
For example, pass {1: {before: 2, after: 2}}
to add two blank lines before
and after the main heading.
You can also set values to 0
to not add blank lines.
Parameters
options
(Options
, default: {2: {before: 2}}
)
— configuration
Returns
Nothing (undefined
).
Gap
Gap between a heading (TypeScript type).
Fields
after
(number
, default: 1
)
— blank lines after headingbefore
(number
, default: 1
)
— blank lines before heading
Options
Configuration (TypeScript type).
Type
type Options = Partial<Record<1 | 2 | 3 | 4 | 5 | 6, Gap | null | undefined>>
Examples
Example: blank lines around first/last headings
This example shows that there are no blank lines added before the first and
after the last heading in a container.
Assuming we had example.md
from before and changed it to contain this:
# Alpha
Bravo charlie.
> ## Delta
>
> Echo foxtrott.
>
> ## Golf
Then configuring this plugin in example.js
like so:
@@ -3,7 +3,10 @@ import remarkHeadingGap from 'remark-heading-gap'
import {read} from 'to-vfile'
const file = await remark()
- .use(remarkHeadingGap)
+ .use(remarkHeadingGap, {
+ 1: {after: 3, before: 3},
+ 2: {after: 2, before: 2}
+ })
.process(await read('example.md'))
console.log(String(file))
Then when running node example.js
we’d get:
# Alpha
Bravo charlie.
> ## Delta
>
>
> Echo foxtrott.
>
>
> ## Golf
Types
This package is fully typed with TypeScript.
It exports the additional types Gap
and Options
.
Compatibility
Projects maintained by the unified collective are compatible with maintained
versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line, remark-heading-gap@^6
,
compatible with Node.js 16.
This plugin works with remark-stringify
version 9+ (remark
version 13+).
Version 3 of this plugin worked with remark-stringify
version 8- (remark
version 12-).
Security
Use of remark-heading-gap
does not involve rehype (hast) or
user content so there are no openings for cross-site scripting
(XSS) attacks.
Related
Contribute
See contributing.md
in remarkjs/.github
for ways
to get started.
See support.md
for ways to get help.
This project has a code of conduct.
By interacting with this repository, organization, or community you agree to
abide by its terms.
License
MIT © Ben Briggs