remark-footnotes
!Buildbuild-badgebuild
!Coveragecoverage-badgecoverage
!Downloadsdownloads-badgedownloads
!Sizesize-badgesize
!Sponsorssponsors-badgecollective
!Backersbackers-badgecollective
!Chatchat-badgechatremarkremark plugin to add support for footnotes.
Important!
This plugin is affected by the new parser in remark (micromark
,
see remarkjs/remark#536
).
Use version 2 while you’re still on remark 12.
Use version 3 for remark 13+.Install
This package is ESM only: Node 12+ is needed to use it and it must beimport
ed instead of require
d.npm install remark-footnotes
## Use
Say we have the following file, `example.md`:
```markdown
Here is a footnote reference,[^1]
another,[^longnote],
and optionally there are inline
notes.^[you can type them inline, which may be easier, since you don’t
have to pick an identifier and move down to type the note.]
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
{ some.code }
The whole paragraph can be indented, or just the first
line. In this way, multi-paragraph footnotes work like
multi-paragraph list items.
This paragraph won’t be part of the note, because it
isn’t indented.
And our module,
example.js
, looks as follows:import {readSync} from 'to-vfile'
import {unified} from 'unified'
import remarkParse from 'remark-parse'
import remarkFootnotes from 'remark-footnotes'
import remarkRehype from 'remark-rehype'
import rehypeFormat from 'rehype-format'
import rehypeStringify from 'rehype-stringify'
const file = readSync('example.md')
unified()
.use(remarkParse)
.use(remarkFootnotes, {inlineNotes: true})
.use(remarkRehype)
.use(rehypeFormat)
.use(rehypeStringify)
.process(file)
.then((file) => {
console.log(String(file))
})
Now, running
node example
yields:<p>
Here is a footnote reference,<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a>
another,<a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a>,
and optionally there are inline
notes.<a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>
</p>
<p>
This paragraph won’t be part of the note, because it
isn’t indented.
</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn1" role="doc-endnote">
<p>Here is the footnote.<a href="#fnref1" class="footnote-back" role="doc-backlink">↩</a></p>
</li>
<li id="fn2" role="doc-endnote">
<p>Here’s one with multiple blocks.</p>
<p>
Subsequent paragraphs are indented to show that they
belong to the previous footnote.
</p>
<pre><code>{ some.code }
</code></pre>
<p>
The whole paragraph can be indented, or just the first
line. In this way, multi-paragraph footnotes work like
multi-paragraph list items.<a href="#fnref2" class="footnote-back" role="doc-backlink">↩</a>
</p>
</li>
<li id="fn3" role="doc-endnote">
<p>
you can type them inline, which may be easier, since you don’t
have to pick an identifier and move down to type the note.<a href="#fnref3" class="footnote-back" role="doc-backlink">↩</a>
</p>
</li>
</ol>
</section>
API
This package exports no identifiers. The default export isremarkFootnotes
.unified().use(remarkFootnotes[, options])
Plugin to add support for footnotes.options.inlineNotes
Whether to support ^[inline notes]
(boolean
, default: false
).
Passed to micromark-extension-footnote
mm-footnote.Notes
- Labels, such as
[^this]
(in a footnote reference) or[^this]:
(in a
footnote definition) work like link references
- Footnote definitions work like lists
- Image and link references cannot start with carets, so `!^this doesn’t
work][]`
Security
Use ofremark-footnotes
does not involve rehyperehype
(hasthast) or user content so there are no openings for cross-site
scripting (XSS)xss attacks.Related
— GitHub Flavored Markdown
— Frontmatter (YAML, TOML, and more)
— Math
— Auto-link references like in GitHub issues, PRs, and comments
Contribute
Seecontributing.md
contributing in remarkjs/.github
health for ways
to get started.
See support.md
support for ways to get help.This project has a code of conductcoc. By interacting with this repository, organization, or community you agree to abide by its terms.