Сноски

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 корректно создаст обратные ссылки.

Встроенные возможности рендеринга

Плагин автоматически:

  • Нумерует сноски по порядку появления.
  • Генерирует ссылки из текста на сноску.
  • Создаёт обратные ссылки из сносок к тексту.
  • Поддерживает HTML внутри сносок.
Текст с <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 позволяет размещать определения сносок в любом месте документа, хотя по стандарту их чаще всего ставят в конце.
  • Сноски внутри списков и таблиц: Плагин корректно работает внутри большинства блоков Markdown, включая списки, таблицы и цитаты.
  • Обратная совместимость: Если плагин не подключен, синтаксис сносок останется в исходном виде, не влияя на основной текст.

Примеры практического применения

  1. Научные статьи и документация: добавление пояснительных материалов без перегрузки основного текста.
  2. Технические глоссарии: пояснение терминов или сокращений.
  3. Веб-контент с дополнительными ссылками: ссылки на источники, источники изображений или комментарии к цитатам.

Сочетание Markdown-it и плагина для сносок обеспечивает чистое разделение основного текста и дополнительных комментариев, сохраняя удобство редактирования и читаемость документа.