Подтвердить что ты не робот

Markdown to docx, включая сложный шаблон

Я автоматизировал свою сборку для преобразования файлов Markdown в файлы DOCX с помощью Pandoc. Я даже использовал справочный документ для окончательного оформления документа. Команда, которую я использую:

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx

reference.docx подбирается Pandoc из docs/rendering, а Pandoc отображает mydoc.docx с теми же стилями, что и ссылочный doc.

Однако reference.docx содержит больше, чем просто стилей. Он содержит кодовые логотипы, преамбулу и т.д.

Как я могу автоматизировать слияние содержимого Markdown с стилями и контентом reference.docx. Мое решение должно работать на Linux.

4b9b3361

Ответ 1

Обновить

Используйте версию, предложенную пользователем Christian Long:

pandoc -t latex mydoc.md | pandoc -f latex --data-dir=docs/rendering/ -o mydoc.docx

Я знаю, что это поздно, но я буду предполагать, что люди все еще ищут решения для этих трех лет после первоначального вопроса - я знаю, что был.

Мое решение состояло в том, чтобы использовать LaTeX в качестве посредника между markdown и docx (на самом деле, я конвертировал из режима org, но с той же разницей). Так что в вашем случае я считаю, что однострочное решение будет:

pandoc -f markdown -t latex -o mydoc.tex mydoc.md && \
pandoc -f latex -t docx --data-dir=docs/rendering/ -o mydoc.docx mydoc.tex

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

Ответ 2

В идеале PanDoc будет вырабатывать эту функцию но в ближайшее время она не выглядит вероятной.

Я не знаю о каких-либо инструментах, которые будут выполнять эту работу напрямую, но вы, вероятно, можете вернуться к объединению reference.docx и созданного вами PanDoc mydoc.docx в коде.

Формат .docx - это ZIP-архив (в основном) файлов XML. Наиболее важным является word/document.xml. Если вы используете инструмент XML, чтобы взять (большую часть) из document.xml из одного файла и вставить его в другой, у вас будет нечто более близкое к тому, что вам нужно.

Я мог бы взломать пример, например, в Ruby, если это поможет иллюстрации.

Ответ 3

В идеале вы можете использовать собственный шаблон docx, но pandoc пока не поддерживает его. Файл reference.docx позволяет только встроить встроенные стили во вновь созданные файлы docx.

К счастью, вы можете приблизиться к этому, используя odt вместо docx. Вы можете довольно легко изменить шаблон OpenDocument по умолчанию, чтобы включить свои пользовательские логотипы, преамбулу и другие материалы. Используйте специальный шаблон в сочетании с файлом reference.odt, чтобы получить все стили и пользовательский контент.

Как только у вас есть файл в формате odt, вы можете использовать любое количество инструментов командной строки для преобразования из odt в docx. Например, в Linux вы можете запускать

libreoffice --invisible --convert-to docx test.odt

Или в OS X:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt

Ответ 4

ОБНОВЛЕНИЕ: эта функция не завершена

Я использовал его в некоторых сложных шаблонах и нашел, что он очень хорошо отображает шрифты, логотипы компаний и т.д. Но при переходе к .docx ->.docx мне пришлось вручную применять стили заголовков к разрывам глав/разделов. Шрифт был правильным, но раздел не был. Я попробую .md ->.docx дальше.


Эта функция теперь доступна в Pandoc, как описано здесь:

Уценка до docx, включая сложный шаблон

По ссылке выше:

pandoc  input --reference-docx=my-reference.docx -o out.docx

где my-reference.docx (не .dotx) может быть:

  • текущая папка ИЛИ
  • папка, которая определяется --data-dir ИЛИ
  • системная папка по умолчанию для data-dir, которая
    • $ HOME/.pandoc в UNIX-подобных системах
    • C:\Documents And Settings\ИМЯ ПОЛЬЗОВАТЕЛЯ \Application Data\pandoc в Windows XP, вы больше не должны использовать
    • C:\Users\USERNAME\AppData\Roaming\pandoc в Windows Vista или более поздней версии.