Комментарии 13
Afaik по ГОСТ надо ещё иметь колонтитулы с именем организации и нумерацией и соотвественно оглавление.
От нас издательство, с которым мы сотрудничали, пока требовало только номера страниц в колонтитулах docx-файла, название организации и прочее они проставляют сами. Колонтитулы с номерами страниц тоже настроены в template.docx, сгенерированный docx-файл их наследует. Сгенерировать оглавление на основе заголовков первого # и второго ## уровней можно при помощи опции --toc при сборке документа при помощи pandoc. А для ЕСПД с его сложной вёрсткой, на мой взгляд, самые интересные результаты получены в проекте GOSTdown. Обновил текст статьи, чтобы прояснить эти моменты, спасибо за замечание!
Afaik по ГОСТ надо ещё иметь колонтитулы
А рамки с основными надписями?!?
Для издательства не нужно, а в принципе это возможно?
В GOSTdown есть пример сгенерированного документа по ГОСТ 19.xxx (ЕСПД). Колонтитулы у них содержат как номера страниц, так и дополнительный текст. Как в template.docx настроите, так и будет в сгенерированном файле. А вот с титульными листами ЕСПД есть нюанс:
Всё содержимое документа, кроме листа утверждения, титульной страницы и листа регистрации изменений (в конце) изначально создано в Markdown и преобразуется в Word автоматически.
Сгенерированную часть можно соединять со статической частью на этапе сборки, например, средствами python-docx. Мы так когда-то делали:
from docx import Document
from docx.enum.text import WD_BREAK
import sys
def concat_doc(head_path, body_path):
body = Document(body_path)
head = Document(head_path)
head.add_paragraph().add_run().add_break(WD_BREAK.PAGE)
for e in reversed(head.element.body):
body.element.body.insert(0, e)
body.save(body_path)
concat_doc(sys.argv[1], sys.argv[2])
"Обещаю, там все проще чем в латехе"
Лайк за сарказм. ;)
Справедливости ради решаемая проблема выглядит "не писать и не верстать в ворде" при этом md освоить сильно проще latex, точнее его кже знает значительное количество людей.
Как по мне, самая главная проблема Markdown - это его синтаксис для таблиц
О, недавно придумали миниатюрное решение и для вёрстки таблиц с rowspan/colspan в Markdown — сверстать таблицу в HTML, затем специальным фильтром на Lua построить для таблицы AST, после чего встроить это AST в AST документа.
Работает оно почти как фильтр pysvg из статьи. Но нужно учитывать, что в ячейках таблицы тоже может быть Markdown, поэтому ячейки таблицы нужно обойти и вклеить их AST в AST таблицы. Lua-фильтр, который мы используем для HTML-таблиц в Markdown, выглядит так:
tools/html-table.lua
function RawBlock(raw)
if raw.format:match 'html' and raw.text:match '%<table' then
-- Разбираем HTML средствами pandoc в AST.
local ast = pandoc.read(raw.text, 'html')
local table = ast.blocks[1]
local caption = table.attr.identifier
table.caption = pandoc.Caption({pandoc.Str(caption)})
-- Обходим AST таблицы и строим AST для каждой ячейки.
-- После чего встраиваем AST ячеек в AST таблицы.
local div = pandoc.walk_block(pandoc.Div(ast.blocks), {
Plain = function (element)
local md = pandoc.utils.stringify(element)
local ast = pandoc.read(md, 'markdown')
return ast.blocks
end
})
return div.content
end
end
В текст Markdown-документа с книгой вставляется следующий блок кода:
# Таблица
```{=html}
<table>
<tr>
<td colspan="2">Ячейка 1</td>
</tr>
<tr>
<td>Ячейка 2</td>
<td>Ячейка 3</td>
</tr>
</table>
```
К команде сборки pandoc нужно добавить опцию --lua-filter=tools/html-table.lua, после чего таблица в сгенерированном docx-документе начинает выглядеть так:

Стили таблицы тоже можно задать в template.docx.
Однако работа со стилями в LaTeX простотой и минималистичным синтаксисом не отличается.
Насколько я могу судить по опыту, работа со стилями в Латех очень проста и минималистична. Определяете только те стили, которые вам удобны, — а всё остальное оставляете без внимания.
\begin{habr}
\emph{Насколько я могу судить по опыту}, работа со стилями в Латех очень \bold{проста} и \bold{минималистична}. Определяете только те стили, которые вам удобны, \tire{} а всё остальное оставляете без внимания.
\end{habr}
Да, но что делать, если на выходе требуется получить оформленный по ГОСТ или иным требованиям DOCX с отступами, подписями к рисункам, SVG-диаграммами? С заданием стилей уже не всё так просто. Условный IEEE LaTeX-шаблоны предоставляет, но не все издательства и организации так могут, приходится поддерживать DOCX.
Pandoc поддерживает трансляцию LaTeX в DOCX, но, кажется, не полностью, всё равно придётся делать свои фильтры для преобразований AST. То есть, остаётся вопрос выбора входного языка — LaTeX или Markdown. Мне кажется, входной язык в примерах из статьи можно заменить и на LaTeX, оставив остальное, не потеряв в удобстве.
Как раз та работа, которую незазорно делегировать нэйросетям.


Книга в Markdown: Автоматическая сборка статического сайта mdBook и файла DOCX с оформлением по ГОСТ