Код
#статьи

Что такое Markdown и зачем он нужен: редакторы, диалекты, отличия от HTML

С помощью этого языка разметки форматируют тексты технические специалисты Microsoft, рядовые пользователи Reddit и даже мы с вами.

Иллюстрация: Оля Ежак для Skillbox Media

Markdown — это облегчённый язык разметки для форматирования текстовых документов. Markdown-файлы без потерь преобразуются в другие форматы (например, HTML и PDF), открываются в любом текстовом редакторе и будут понятны любому человеку даже в виде исходного кода.

В этой статье мы рассказываем, что такое Markdown и чем он отличается от других языков разметки. Если же вы хотите подтянуть знания его синтаксиса, то по нему у нас есть отдельная подробная шпаргалка.

Зачем нужны языки разметки

Каждый раз, открывая интернет-страницу или вордовский документ, вы сталкиваетесь с разметкой. Например, текст этой статьи выровнен по левому краю, набран шрифтом Open Sans, отдельные слова в нём выделены полужирным, а между абзацами интервал больше, чем между строками.

Чтобы ваш браузер понимал, как ему правильно отобразить страницу, используются языки разметки — в данном случае HTML. В таких языках с помощью специальных меток, или тегов, указывается, какие элементы страницы каким образом выводить на экран.

Например, вот так в HTML текст выделяют полужирным:

<b>Жирный текст</b>

Вы можете взглянуть на разметку любого сайта сами, открыв исходный код страницы. Для этого нажмите Ctrl + U (для Windows) или Command + Option + U (для macOS). Ещё есть универсальный способ: добавить перед адресом сайта магическое view-source.

Что такое облегчённый язык разметки

Взглянем на исходный код главной страницы Skillbox Media:

HTML-код
Скриншот: Skillbox Media

Выглядит внушительно: много тегов, нужных для разметки совсем небольших кусков текста, — и так 1800 строк кода. Если вы не владеете HTML, разобраться во всём этом будет сложно. Сам текст в таком виде тоже особо не почитаешь — он теряется на фоне кучи тегов.

Такая разметка подойдёт для страниц со сложной структурой, в которой много разных элементов. Но для текстов с более простым оформлением она будет избыточной — ведь всё можно сделать гораздо проще.

Именно поэтому и придумали облегчённые языки разметки. У них меньше функциональности, зато с ними гораздо проще работать. Логично, что их часто используют там, где оформление текста хоть и важно, но второстепенно.

Например, для редактирования статей в «Википедии» есть собственная вики-разметка. И это гораздо удобнее, чем заставлять всё пишущее и редактирующее сообщество волонтёров учить HTML — ведь разбегутся 🙂 Во многих мессенджерах и социальных сетях с помощью спецсимволов тоже можно выделить текст жирным, курсивом, сделать подчёркнутым, зачёркнутым, оформить как спойлер и так далее.

А вот документацию к программам и readme-файлы (в том числе на GitHub) часто пишут на языке Markdown. Но это, конечно, не единственное его применение.

Как и зачем придумали Markdown

Markdown создали Джон Грубер и Аарон Шварц в 2004 году. Название языка — игра слов. Разметка по-английски называется markup, что можно дословно перевести как «отметка вверх». Markdown, соответственно, — «отметка вниз».

В процессе работы Грубер и Шварц вдохновлялись соглашениями по разметке текста в электронных письмах. Они хотели сделать язык, который было бы удобно читать даже в виде исходного кода. Также Грубер написал программу на Perl, которая преобразовывала Markdown-файлы в HTML.

Markdown — не замена HTML и даже не близок к этому. Его синтаксис очень аскетичен и покрывает лишь небольшое подмножество HTML-тегов. Его идея не в том, чтобы создать синтаксис, облегчающий расстановку HTML-тегов. На мой взгляд, их уже и так легко расставлять. Идея Markdown в том, чтобы было проще читать, писать и редактировать тексты. HTML создан для публикации, а Markdown — для написания. Таким образом, синтаксис Markdown решает только те задачи, которые возникают и могут быть выражены исключительно в форме простого текста.

Джон Грубер,
создатель Markdown

Возьмём разметку одного и того же текста о машине Тьюринга и посмотрим, как она выглядит в HTML и Markdown.

Markdown

## Что такое машина Тьюринга и как она устроена
**Машина Тьюринга** -- это абстрактная вычислительная машина, мысленный эксперимент для решения проблемы математической логики. Она состоит из трёх элементов:

- бесконечной ленты с ячейками;
- автомата или головки для чтения и записи;
- программы.

> «Машина снабжена "лентой" (аналог бумаги), проходящей через неё и разделённой на участки (называемые квадратами), каждый из которых может содержать символ».
> 
> **А. ТЬЮРИНГ**,  
> [«О вычислительных числах, с приложением к проблеме принятия решений»](https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf)

![Иллюстрация устройства машины Тьюринга](https://skillbox.ru/upload/setka_images/07485624012023_ee673444daa2c4c150863fb4fe2e59385df85324.png)

Простая иллюстрация устройства машины Тьюринга  
*Изображение: [Computational Error and Complexity in Science and Engineering](https://www.sciencedirect.com/topics/physics-and-astronomy/turing-machine) / V. Lakshmikantham, S. K. Sen / Mathematics in Science and Engineering, 2005*

HTML

<h2>Что такое машина Тьюринга и как она устроена</h2>
<p><strong>Машина Тьюринга</strong> -- это абстрактная вычислительная машина, мысленный эксперимент для решения проблемы математической логики. Она состоит из трёх элементов:</p>
<ul>
<li>бесконечной ленты с ячейками;</li>
<li>автомата или головки для чтения и записи;</li>
<li>программы.</li>
</ul>
<blockquote>
<p>«Машина снабжена "лентой" (аналог бумаги), проходящей через неё и разделённой на участки (называемые квадратами), каждый из которых может содержать символ».</p>
<p><strong>А. ТЬЮРИНГ</strong>,<br>
<a href="https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf">«О вычислительных числах, с приложением к проблеме принятия решений»</a></p>
</blockquote>
<p><img src="https://skillbox.ru/upload/setka_images/07485624012023_ee673444daa2c4c150863fb4fe2e59385df85324.png" alt="Иллюстрация устройства машины Тьюринга"></p>
<p>Простая иллюстрация устройства машины Тьюринга<br>
<em>Изображение: <a href="https://www.sciencedirect.com/topics/physics-and-astronomy/turing-machine">Computational Error and Complexity in Science and Engineering</a> / V. Lakshmikantham, S. K. Sen / Mathematics in Science and Engineering, 2005</em></p>

Вот так эта страница будет выглядеть в редакторе Markdown Editor.

Страница Markdown
Скриншот: Skillbox Media

Кстати, Markdown можно конвертировать не только в HTML, но и в другие форматы: PDF, TeX, DOCX, ePub, FB2 и так далее.

Где используют Markdown

Markdown особенно востребован у программистов, потому что они часто сталкиваются с технической документацией. На нём оформляют:

  • readme-файлы (например, в репозиториях на GitHub);
  • страницы на сайте технической документации Microsoft Learn;
  • посты и комментарии на популярном сайте вопросов и ответов о программировании Stack Overflow (как и во всех других проектах Stack Exchange).

Пользуются этим языком не только программисты. Его также используют для «гражданских» задач. Вот что он позволяет делать:

  • писать посты и комментарии на Reddit;
  • создавать личные заметки в специальных приложениях (например, в Obsidian);
  • форматировать текст на личном сайте или в блоге;
  • быстро оформлять документы и электронные письма, чтобы они прилично выглядели.

При желании с помощью Markdown можно даже отформатировать книгу или сделать презентацию. А ещё некоторые принципы языка используют для работы с текстом в мессенджерах: Telegram, WhatsApp, Viber, Discord.

Как писать на Markdown

Чтобы оформить текст на Markdown, нужно расставить по нему специальные символы, указатели. Затем конвертер или редактор переведёт файл в нужный формат — и у вас в руках окажется готовый симпатичный документ.

Сам синтаксис прост и лаконичен. Вот несколько базовых правил.

Выделить заголовок -- поставить перед строкой от одной до шести решёток `#`. Чем больше решёток, тем ниже уровень заголовка.

## Заголовок второго уровня
#### Заголовок четвёртого уровня

Перенести строку -- поставить после неё два пробела `  `  

Выделить *курсивом* -- поставить одну звёздочку `*` в начале и конце.  
Выделить **жирным** -- поставить две звёздочки `**` в начале и конце.  
Выделить ***жирным курсивом*** поставить три звёздочки `***` в начале и конце.

Выделить `элемент кода` -- поставить один или больше обратных апострофов `` ` ``в начале и конце. 

Экранировать символ -- поставить перед ним обратную косую черту `\`

Создать нумерованный список -- поставить число через точку в начале строки:
1. Первый пункт
2. Второй пункт

Создать ненумерованный список: использовать `*`, `-` или `+` в начале строки:
* Первый пункт
* Второй пункт

Выделить цитату -- поставить закрывающую угловую скобку `>` в начале строки:
> Это цитата
>
> Это продолжение цитаты
Пример синтаксиса
Скриншот: Skillbox Media

Подробнее о том, как пользоваться всеми возможностями этого языка разметки, читайте в нашей шпаргалке по синтаксису Markdown.

Какие виды Markdown бывают: спецификации и диалекты

Первоначальным Markdown, который появился в 2004 году, сейчас почти никто не пользуется. Разные платформы быстро стали создавать собственные реализации Markdown.

В какой-то момент эти реализации стали вступать в противоречие друг с другом. Из-за мелких различий в синтаксисе текст, оформленный согласно одной реализации, мог по-другому отображаться в другой.

Так продолжалось, пока в 2014 году «группа поклонников Markdown» не выпустила спецификацию CommonMark. В группу входили сотрудники разных компаний, использующих Markdown на своих платформах: Pandoc, Meteor, GitHub, Reddit, Stack Overflow, Discourse.

В спецификации они не только более детально прописали синтаксис, но и добавили новые функции. Например, разрешили использовать некоторые HTML-теги внутри Markdown-разметки, добавили новые способы переноса строк, оформления ссылок и блоков кода.

На основе CommonMark создано большинство диалектов языка Markdown — они в целом соответствуют стандарту, но расширяют его и добавляют собственные функции. Такие диалекты есть у Discourse, GitHub, GitLab, Reddit, Qt, Stack Overflow, Swift, Microsoft Learn.

Есть и другие версии Markdown, которые создавались независимо от CommonMark и не наследуются от него. Вот некоторые из них:

  • Markdown Extra — написан для PHP, позже адаптирован под Python и Ruby;
  • LiaScript — написан для создания интерактивного образовательного контента;
  • MultiMarkdown — написан, чтобы Markdown можно было конвертировать в форматы TeX, PDF и ODF;
  • R Markdown — написан для создания динамических страниц, кроме R поддерживает языки Python, C++, Julia и SQL.

Что в итоге

  • Markdown — облегчённый язык разметки, при помощи которого оформляют текстовые документы. Он конвертируется в HTML и другие форматы, но сделан так, чтобы его было удобно читать даже в виде исходного кода.
  • Markdown часто используют программисты для написания технической документации, но сфера его применения гораздо шире.
  • У Markdown есть много реализаций и диалектов. Разные платформы расширяют инструментарий языка для своих нужд.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована