Начало глав на новой странице в сгенерированном pandoc PDF

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Приведенный выше текст может быть преобразован в файл EPUB для электронных книг с помощью pandoc -o output.epub input.mkd, и он может быть преобразован в PDF с pandoc -o output.pdf input.mkd. Последнее требует установки латексного двигателя, который может иметь отношение к ответу на вопрос.

В EPUB каждый заголовок уровня 1 автоматически устанавливается в верхней части новой страницы (меньшие заголовки - нет). С PDF это не так - и я не ожидал бы, что это будет по умолчанию, поскольку это будет противоречить основным целям уценки. Однако у меня возникают проблемы с поиском опции pandoc для включения этого поведения.

Кто-нибудь знает способ включить это поведение с Pandoc? Редактирование файла конфигурации было бы приемлемым решением, но если синтаксис основан на латексе, я был бы признателен за его объяснение (значение того, что находится в файле конфигурации, а не исчерпывающее объяснение латекса!).

--chaptersвариант Пандока, похоже, должен делать то, что я хочу ... но это

  • Делает главы появляются только на нечетных страницах, вставляя пустые страницы по мере необходимости (интересно, но не то, что я хочу - я хочу напечатать это на бумаге формата А4, и это не будет выложено в стиле книги, поэтому любой эстетический позитив тут компенсируется пустой тратой бумаги)
  • Вставляет Chapter xперед фактическим заголовком, что приводит к таким нелепым вещам, как:

Глава 1

пролог

Если есть возможность укротить этот --chaptersвариант, это будет подходящим ответом.

evilsoup
источник

Ответы:

28

См. Https://tex.stackexchange.com/questions/9497/start-new-page-with-each-section .

Чтобы это работало с pandoc, вам нужно вставить следующее в преамбулу документа LaTeX, сгенерированного pandoc на пути к PDF:

\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}

Есть несколько способов сделать это. Одним из них является создание собственного шаблона LaTeX с этими строками в преамбуле. Затем вы можете использовать опцию, --template mytemplate.latexчтобы сказать Pandoc использовать этот шаблон. Чтобы получить шаблон LaTeX по умолчанию, который вы можете изменить, выполните pandoc -D latex > mytemplate.latex.

Другой вариант - создать небольшой файл titlesec.texс этими двумя строками. Затем вызовите pandoc с возможностью --include-in-header titlesec.texвключить его в заголовок, например так:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
Джон Макфарлейн
источник
Спасибо, это потрясающе. У этого есть обратная сторона - ломать ссылки в PDF и устанавливать все закладки (не уверен, что это правильное слово) на страницу 1, но, поскольку я использую это в основном для реальной печати, это не имеет большого значения. Единственное, чего он не делает - это помещает оглавление на ту же страницу, что и заголовок, но это не так уж важно.
evilsoup
2
Кстати, если вы тот самый Джон Макфарлейн, который создал pandoc, я хотел бы воспользоваться этой возможностью, чтобы поблагодарить вас - с тех пор, как я обнаружил это, ваша программа стала важной частью моего рабочего процесса. Кроме того, есть ли какие-либо ресурсы, которые вы бы порекомендовали для изучения LaTeX?
evilsoup
4
Пожалуйста. Я начал с книги Лампорта «LaTeX: система подготовки документов», и это хорошо.
Джон Макфарлейн
1
titlesec кажется несовместимым с текущим латексным шаблоном pandoc, предлагаемый ответ генерирует латексную ошибку. Вы можете использовать sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Мерлин Себрехтс
При использовании вышеуказанного метода возникают ошибки. Решение дано здесь .
jdhao
11

То, что я закончил, было этим:

pandoc --toc -V documentclass=report -o output.pdf inputs*.mkd

Это приводит к использованию класса документа LaTeX «report» (по умолчанию при использовании --chapterspandoc используется класс «book» или «memoir», предназначенный для книг - поля разных размеров по одной с каждой стороны для облегчения переплета книг) главы, начинающиеся только на нечетных страницах и т. д.), которые помещают заголовки 1-го уровня в верхнюю часть страниц, но не только помещают их в верхнюю часть нечетных страниц.

Это по-прежнему вставляет «Глава X» перед каждой главой, что по-прежнему раздражает. Мне также очень хотелось бы, чтобы оглавление начиналось на той же странице, что и заголовок (это происходит с классом документа article), но главы не переносятся на начало новых страниц - они просто начинаются где угодно). Однако я думаю, что для их получения потребуется больше знаний о LaTeX, чем у меня: я не собираюсь отмечать это как принятый ответ, поскольку идеальный ответ для этого объяснил бы, как обойти эти две проблемы.

evilsoup
источник
1

Также более двух лет спустя, и я продолжал сталкиваться с этой проблемой; так что для всех, кто сталкивается с этой проблемой, кто находит это ...

Благодаря ответам Джона и другой включенной ссылке, я использую следующее в файле с pandoc -Hопцией, и это, кажется, работает нормально:

% /superuser/601469/getting-chapters-to-start-on-a-new-page-in-a-pandoc-generated-pdf
% http://tex.stackexchange.com/questions/120740/how-do-i-remove-chapter-n-from-the-chapter-titles-of-a-book
\usepackage{titlesec}
\usepackage{fancyhdr}

\newcommand{\sectionbreak}{\clearpage}
\titleformat{\chapter}[display]{\normalfont\bfseries}{}{0pt}{\Large}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}
\fancyhead[LE,RO]{\thepage}
\renewcommand\headrulewidth{0pt}
\renewcommand\chaptermark[1]{\markboth{#1}{}} 
\renewcommand\sectionmark[1]{\markright{\thesection.\ #1}}

При этом я использовал --chaptersопцию pandocи она генерирует главы в формате PDF на новых страницах без Chapter XX:заголовков страниц. Использование -V documentclass=reportтакже дало желаемый результат, без явления «пропуск страницы» и «новый раздел главы на нечетном номере страницы», создаваемого bookклассом документа.

Евгений
источник
0

Если бы у меня была такая же проблема, я решил опубликовать свое решение, используя только поля метаданных YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Джонатан Болдуин
источник