Конвертер 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>

Result in docx document

В 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>

Result in docx document

Заголовки

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 вовсе не существует. Так оформляются разделы без номера: «Введение», «Заключение», «Список использованных источников», «Приложения».