Markdown-it — это высоко настраиваемый парсер Markdown для JavaScript, который позволяет расширять стандартный синтаксис Markdown с помощью плагинов. Одним из популярных расширений является работа со сносками. Сноски позволяют вставлять дополнительные пояснения, ссылки или комментарии к тексту, которые оформляются отдельно и не нарушают основное содержание документа.
Для работы со сносками используется плагин
markdown-it-footnote. Его подключение и базовая настройка
выглядят следующим образом:
const MarkdownIt = require('markdown-it');
const markdownItFootnote = require('markdown-it-footnote');
const md = new MarkdownIt();
md.use(markdownItFootnote);
После подключения плагина синтаксис сносок становится доступен в Markdown-документе.
Сноски включают две части: маркер в тексте и определение сноски в конце документа.
Маркер сноски в тексте:
Текст с сноской[^1].
Определение сноски:
[^1]: Это содержание сноски.
В результате при рендеринге маркер в тексте превращается в ссылку на соответствующую сноску, а все определения выводятся в конце документа, автоматически нумеруются и связаны ссылками назад на текст.
Markdown-it поддерживает множественные сноски в тексте. Каждую сноску можно определить отдельно или повторно использовать одну и ту же сноску несколько раз:
Первый пример[^note].
Второй пример с той же сноской[^note].
[^note]: Общее объяснение для обоих случаев.
При рендеринге обе ссылки будут вести на одно определение сноски, а Markdown-it корректно создаст обратные ссылки.
Плагин автоматически:
Текст с <strong>жирным</strong> элементом[^bold].
[^bold]: Сноска с <em>курсивом</em>.
Markdown-it корректно отобразит форматирование внутри сноски.
Markdown-it предоставляет возможность кастомизировать рендеринг сносок через переопределение методов рендерера. Например, можно изменить HTML-структуру или класс CSS для сноски:
md.renderer.rules.footnote_block_open = () => (
'<section class="custom-footnotes"><ol>'
);
md.renderer.rules.footnote_block_close = () => '</ol></section>';
Аналогично можно менять рендеринг отдельных ссылок и определений сносок:
md.renderer.rules.footnote_ref = (tokens, idx) => {
const id = tokens[idx].meta.id;
return `<sup class="footnote-ref"><a href="#fn${id}">${id + 1}</a></sup>`;
};
Сочетание Markdown-it и плагина для сносок обеспечивает чистое разделение основного текста и дополнительных комментариев, сохраняя удобство редактирования и читаемость документа.