Перейти к содержимому
Convertube

Файлы Markdown: простой текст с соглашениями, и соглашений больше одного

Что такое файл .md, почему рендереры его понимают по-разному и как заголовки и списки восстанавливаются из PDF, где их не было. Конвертируйте в браузере.

Кратко

Тип
Документы
Расширения
.md, .markdown
MIME-тип
text/markdown
Другие названия
MD

Файл .md — это текстовый файл. В нём нет контейнера, нет сжатия и ничего двоичного — откройте его в Блокноте, и вы увидите ровно то, что в нём есть. Форматирование — это соглашение, а не разметка: # в начале строки означает заголовок, дефис — пункт списка, а рендерер, понимающий соглашение, превращает их в HTML. В этом вся идея, и именно поэтому формат пережил все текстовые редакторы с форматированием своего поколения: файл читается ещё до того, как его что-то отобразит, и останется читаемым, когда программы, в которой вы его написали, уже не будет.

Подробнее

Сложность в том, что единого Markdown не существует. Исходная реализация 2004 года оставила множество случаев неопределёнными, и каждый рендерер решил их по-своему; CommonMark существует, чтобы устранить эти неоднозначности, а GitHub Flavored Markdown добавляет поверх него таблицы, списки задач и зачёркивание. Эта ситуация признана официально: когда в марте 2016 года text/markdown был зарегистрирован как тип данных в RFC 7763, в регистрацию включили параметр variant — именно потому, что сказать «файл в Markdown» не значит сказать, в каком именно Markdown. Этот сайт выдаёт text/markdown в UTF-8 и использует только конструкции, с которыми согласны все диалекты: заголовки с решёткой, абзацы через пустую строку, маркеры-дефисы и горизонтальные линии.

Конвертировать PDF в Markdown значит создавать структуру, которой в PDF никогда не было. PDF записывает размеры шрифта, а не заголовки, поэтому размеры на странице ранжируются, и шесть самых крупных становятся шестью уровнями заголовков; строка, которая просто крупнее основного текста, становится заголовком независимо от того, считал ли её таковой автор. Со списками хуже: в PDF вообще нет конструкции списка, а видимый маркер — буквально символ в тексте, так что список сохраняется, только если распознать этот символ и переписать его дефисом. Нумерованным пунктам такая помощь не нужна — «1. » и «1) » уже являются Markdown и уже задуманы как список.

Две детали стоит знать, потому что они меняют сам текст. Строка, оканчивающаяся дефисом, считается словом, разорванным переносом, и склеивается без него; а идущие подряд строки на китайском или японском соединяются без пробела, потому что в этих письменностях его не ставят. Страницы разделяются горизонтальной линией, так что документ из тринадцати страниц приходит с двенадцатью такими линиями. Если PDF — скан без текстового слоя, та же модель распознавания, что используется для PDF в Word, сначала считывает символы с изображений страниц — на вашем собственном компьютере.

Конвертировать другие форматы в Markdown

Вопросы и ответы: Markdown

Файл .md — это просто текстовый файл?

Да. Ни контейнера, ни сжатия, ничего двоичного. Его открывает любой текстовый редактор, а маркеры — #, -, ** — это обычные символы, которые можно читать как есть.

Какой вариант Markdown я получу?

Только то, с чем согласны все диалекты: заголовки с решёткой, абзацы, разделённые пустыми строками, маркеры-дефисы и горизонтальные линии. Ничто здесь не зависит от расширений GitHub или CommonMark, так что текст отображается одинаково, куда бы вы его ни вставили.

Почему мой документ пересекают линии из дефисов?

Это разрывы страниц. Каждая линия — горизонтальный разделитель, отмечающий, где закончилась одна страница PDF и началась следующая, так что документ из тринадцати страниц возвращается с двенадцатью такими линиями.

Заголовок получил не тот уровень. Почему?

Уровни ранжируются по размеру шрифта, потому что PDF хранит размеры, а не заголовки. Если в документе размер используется для выделения, а не для иерархии — вынесенная цитата, крупная первая строка, — ранжирование следует за размером и ошибается с уровнем.

Сохраняются ли таблицы?

Таблицы, нарисованные линиями, — да: они превращаются в таблицы Markdown, первая строка становится заголовком. Таблицы на отсканированной странице выходят обычными строками, потому что в скане нет линий, которые можно прочитать. Если вся цель конвертации — таблицы, PDF в Excel разложит каждую по строкам и столбцам, с которыми можно работать.

Работает ли это со сканированными PDF?

Да. Когда текстового слоя нет, в вашем браузере запускается ИИ-модель распознавания и считывает символы с изображений страниц. Заголовки тогда ранжируются по измеренной высоте строк, а не по размеру шрифта, и ничего не загружается.