Конвертер Markdown в документ docx установленного образца. Поддерживает все возможности GitHub Flavored Markdown. Для ИИ-агентов есть документация в одном файле: llms.md.
Таблицы
Таблицы могут быть сформированы двумя способами:
- Markdown — простой и естественный способ. Следует спецификации GFM.
- HTML — более сложный, однако позволяет объединять ячейки и менять положение текста в ячейке.
Markdown
Написание таблиц в Markdown само по себе простое. Можно воспользоваться сайтом создания таблиц или писать самостоятельно. Также можно использовать стартовый шаблон:
| | | |
|---|---|---|
| | | |
| | | |
Если заполнить его данными, выйдет примерно такая таблица:
| Имя | Возраст | Город |
|-----------|---------|-----------------|
| Алексей | 28 | Москва |
| Иван | 22 | Казань |
| Мария | 34 | Санкт-Петербург |
Аналог в HTML:
<table>
<thead>
<tr>
<th>Имя</th>
<th>Возраст</th>
<th>Город</th>
</tr>
</thead>
<tbody>
<tr>
<td>Алексей</td>
<td>28</td>
<td>Москва</td>
</tr>
<tr>
<td>Иван</td>
<td>22</td>
<td>Казань</td>
</tr>
<tr>
<td>Мария</td>
<td>34</td>
<td>Санкт-Петербург</td>
</tr>
</tbody>
</table>

В Markdown первая строчка всегда выравнена по центру, последующие — по ширине.
HTML
Выше представлен пример реализации аналогичной таблицы как в Markdown, так и в HTML. В отличие от Markdown, HTML позволяет указывать к каждой ячейке следующие атрибуты:
- Объединение ячеек
- Вертикальное и горизонтальное выравнивание
Шапкой таблицы считаются строки внутри <thead>. Если <thead> нет, шапкой становятся первые
строки, состоящие только из ячеек <th>. Строк в шапке может быть несколько, все они набираются
полужирным и выравниваются по центру. Строки из <tbody> и <tfoot>, как и строки <tr>
без обёртки, образуют тело таблицы.
Объединение ячеек выполняется путём указания атрибутов colspan и rowspan.
colspan расширяет ячейку от текущей вправо. rowspan расширяет ячейку от текущей вниз.
По умолчанию оба атрибута равны 1. Объединять можно ячейки и шапки, и тела.
Ячейки пишутся так же, как для браузера: место, уже занятое объединённой ячейкой сверху или слева, в разметке пропускается, а следующая ячейка строки встаёт в ближайший свободный столбец. Объединение, выходящее за край таблицы, обрезается по краю.
<table>
<tr><th rowspan="2">№</th><th colspan="2">Показатель</th></tr>
<tr><th>План</th><th>Факт</th></tr>
<tr><td>1</td><td>10</td><td>12</td></tr>
</table>
Здесь шапка занимает две строки: «№» охватывает обе, «Показатель» — два столбца, а во второй строке «План» и «Факт» встают под «Показатель», потому что первый столбец уже занят.
Для выравнивания передаётся строка из двух символов. Первый указывает на выравнивание по горизонтали, второй — по вертикали. Для некоторых значений есть по два синонима-символа для удобства.
- По горизонтали
-
'l'|'s'— текст прижимается к левому краю ячейки, правый край остается неровным (left | start)'c'|'m'— текст располагается симметрично относительно центра ячейки (center | middle)'r'|'e'— текст прижимается к правому краю ячейки, левый край остается неровным (right | end)'j'— текст равномерно распределяется между левым и правым полем, создавая ровные края с обеих сторон (justify)'d'— как'j', но дополнительно растягивает даже короткие строки, например последнюю строку абзаца (distribute) - По вертикали
-
't'|'s'— выравнивание по верхнему краю ячейки (top | start)'c'|'m'— выравнивание по центру ячейки (center | middle)'b'|'e'— выравнивание по нижнему краю ячейки (bottom | end)
's' означает разное в зависимости от позиции в строке: первым символом — «по левому краю» (horizontal start), вторым — «по верхнему краю» (vertical start).Например, строчка "lc" прижимает текст к левому краю по горизонтали, по вертикали оставляет посередине.
Ниже приведена таблица-пример по всем атрибутам:
# Примерный раздел
Ниже таблица
`table_name: Пример таблицы`
<table>
<thead>
<tr>
<th>№</th>
<th>Название этапа</th>
<th>Исполнитель</th>
<th>Трудоёмкость, чел/дни</th>
<th>Продолжительность работ, дни</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3" align="em">1</td>
<td rowspan="3">Разработка и утверждение технического задания</td>
<td>Руководитель</td>
<td align="cc">5</td>
<td rowspan="5" align="et">5</td>
</tr>
<tr>
<td>Консультант</td>
<td align="cc">1</td>
</tr>
<tr>
<td>Разработчик</td>
<td align="cc">5</td>
</tr>
<tr>
<td rowspan="2" align="em">2</td>
<td rowspan="2">Технические предложения</td>
<td>Руководитель</td>
<td align="cc">7</td>
</tr>
<tr>
<td>Разработчик</td>
<td align="cm">7</td>
</tr>
</tbody>
</table>

Заголовки
MGost поддерживает три уровня заголовков: #, ## и ###. Более глубокие (#### и далее)
становятся заголовками третьего уровня. Заголовок # начинается с новой страницы, ## и ### — нет.
Разрывы страниц расставляют сами заголовки; служебный макрос page_break нужен только перед приложениями.
Специальные префиксы управляют нумерацией заголовка. В содержание попадают все заголовки, кроме заголовка первого уровня «Содержание».
| Синтаксис | Поведение |
|---|---|
## Заголовок |
Стандартный заголовок: номер выводится, счётчик нумерации сдвигается |
## *Заголовок |
Выравнивается по центру, номер не выводится, но счётчик нумерации продолжается |
## **Заголовок |
Выравнивается по центру, номер не выводится и счётчик нумерации не сдвигается |
Пример — одна звёздочка:
## Hello1
## *Hello2
## Hello3
Результат в документе:
1.1 Hello1
Hello2
1.3 Hello3
Hello2 выводится без номера, однако счётчик продолжается — Hello3 получает номер 1.3.
Пример — двойная звёздочка:
## Hello1
## **Hello2
## Hello3
Результат в документе:
1.1 Hello1
Hello2
1.2 Hello3
Hello2 выводится без номера и не сдвигает счётчик — Hello3 получает 1.2, как будто Hello2 вовсе не существует.
Так оформляются разделы без номера: «Введение», «Заключение», «Список использованных источников», «Приложения».