md-toc-cli
v3.1.1
Published
Automatically insert or update a clickable table of contents (TOC) into your Markdown documents based on its headings using CLI or JavaScript module.
Downloads
343
Maintainers
Readme
Table of contents generator for Markdown
Introduction
Automatically insert or update a clickable table of contents (TOC) into your Markdown documents based on its headings using CLI or JavaScript module with the perfect support for README.md
files on GitHub.
md-toc-cli creates table of contents from level 2-6 headings (e.g., ## Heading
, ### Heading
etc.) and inserts it after level 1 heading or at the beginning of the file.
Zero or one level 1 heading is expected (e.g., # Heading
).
HTML anchor elements are added to level 1-6 headings to make table of content items clickable, e.g. <a id="..."></a>
.
Anchor at level 1 heading allows creating Back to top links as [Back to top](#0)
.
Usage
md-toc-cli is available as npm package and Docker image.
Docker
When running md-toc-cli using Docker, mount the directory containing the Markdown files as a volume.
Insert table of contents to the
README.md
file in the current directorydocker run --rm -v .:/markdown eugenekhyst/md-toc-cli -i README.md
Read the manual
docker run --rm -v .:/markdown eugenekhyst/md-toc-cli --help
md-toc-cli [file] Automatically insert or update a clickable table of contents (TOC) into your Markdown documents based on its headings (levels 2-6). Positionals: file Markdown file for inserting or updating table of contents in [string] [default: "README.md"] Options: --version Show version number [boolean] --help Show help [boolean] -i, --in-place Edit file in place [boolean] [default: false] -s, --suffix The extension of a backup copy. If no extension is supplied, the original file is overwritten without making a backup. This option implies -i. [string] -t, --tab-width The number of spaces per indentation-level [number] [default: 2] -l, --list-item-symbol Symbol used in front of line items to create an unordered list [string] [choices: "-", "*", "+"] [default: "-"] -n, --no-attribution Do not add an attribution "Table of contents is made with ..." [boolean] [default: false]
npm
When running md-toc-cli using Node.js, install the package globally for convenience.
Make sure Node.js 18.x LTS or newer is installed.
Install md-toc-cli as a global package
npm i -g md-toc-cli
Insert table of contents to the
README.md
file in the current directorymd-toc-cli -i README.md
Read the manual
$ md-toc-cli --help
Programmatic
md-toc-cli can be used as a library in JavaScript and TypeScript projects.
- Make sure Node.js 18 or newer is installed.
- Install md-toc-cli
npm i md-toc-cli
- Import md-toc-cli functions
import { insertOrUpdateToc, insertOrUpdateTocInFile } from 'md-toc-cli';
- Programmatically insert or update the table of contents in a Markdown string or file
insertOrUpdateToc(markdownContent, { tabWidth: 2, listItemSymbol: '-', noAttribution: false, });
await insertOrUpdateTocInFile('README.md', { inPlace: false, suffix: 'orig', tabWidth: 2, listItemSymbol: '-', noAttribution: false, });
Example
Create file
test.md
as follows# Heading 1 ## Heading 2a ### Heading 3aa #### Heading 4a ##### Heading 5a ###### Heading 6a ### Heading 3ab ## Heading 2b ### Heading 3b #### Heading 4b ## Heading 2c ### Heading 3c
Insert table of contents to
test.md
and backup the original filemd-toc-cli test.md -i -s 'orig'
A backup
test.md.orig
is created for original filetest.md
.A clickable table of contents is inserted into
test.md
# <a id="0"></a>Heading 1 <!-- Table of contents is made with https://github.com/eugene-khyst/md-toc-cli --> ## <a id="1"></a>Heading 2a ### <a id="1-1"></a>Heading 3aa #### <a id="1-1-1"></a>Heading 4a ##### <a id="1-1-1-1"></a>Heading 5a ###### <a id="1-1-1-1-1"></a>Heading 6a ### <a id="1-2"></a>Heading 3ab ## <a id="2"></a>Heading 2b ### <a id="2-1"></a>Heading 3b #### <a id="2-1-1"></a>Heading 4b ## <a id="3"></a>Heading 2c ### <a id="3-1"></a>Heading 3c
Make any change to the level 2-6 headings (e.g. delete level 5-6 headings and rename level 3 headings).
Update the table of contents in
test.md
md-toc-cli -i test.md
The table of contents in
test.md
is updated according to the level 2-6 headings.