Сшивание нескольких глав, каждая с заголовком% - PullRequest
0 голосов
/ 06 марта 2020

У меня есть несколько файлов Markdown, каждый из которых использует синтаксис % для задания их заголовка, например,

% A nice chapter

Lorum ipsum ....

# First section

Blah blah

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

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

$ pandoc --toc -o full.pdf a.md b.md

Однако вывод этого совсем не тот, что я хотел бы:

  • Заголовок % из первого файла (a.md) становится заголовком документа
  • Последующие % заголовки игнорируются
  • # заголовки отображаются как заголовки глав в TO C, но они совсем не похожи на главы ( они даже не начинаются на новой странице).

Как собрать файлы Markdown, содержащие главы, в одну книгу?

Ответы [ 2 ]

1 голос
/ 06 марта 2020
Синтаксис

Pando c % фактически предназначен для заголовков документов . Pando c работает только с одним документом на конверсию (поэтому, если у вас есть несколько входных файлов, они будут в основном объединены перед обработкой).

Вместо этого вы можете использовать заголовки:

# title one

вместе с настройкой деление верхнего уровня до chapter или даже part:

pandoc --top-level-division=chapter --toc -o full.pdf a.md b.md
0 голосов
/ 07 марта 2020

@ mb21 предлагает использовать # для заголовков глав, т.е. сдвигать все на один уровень. При этом pandoc --top-level-division=chapter --toc действительно работает правильно, но тогда те же файлы не работают так хорошо с бэкэндом HTML: если у меня нет заголовка %, он жалуется

[WARNING] This document format requires a nonempty <title> element.
  Please specify either 'title' or 'pagetitle' in the metadata,
  e.g. by using --metadata pagetitle="..." on the command line.
  Falling back to 'a'

Так что, похоже, у нас есть загадка, где вывод HTML правильный или PDF, но не оба одновременно.

Решение состоит в том, чтобы хранить файлы с % для ( глава) название и # для верхних разделов et c. (т.е. HTML -совместимый формат), а затем преобразовать их в PDF-совместимый формат на лету. Правило Makefile, которое я написал в итоге:

RetroClash.pdf: $(MARKDOWNS)
    ($(foreach MARKDOWN, $^, sed -e '$$a\\' -e 's/^#/##/' -e 's/^% /# /' $(MARKDOWN);)) | \
    pandoc --top-level-division=chapter --toc --toc-depth=2 -o $@

Первая строка проходит через каждый входной файл .md и преобразует его так:

Затем конкатенация всех преобразованных файлов Markdown передается в Pando c как один вход.

...