Starten von Kapiteln auf einer neuen Seite in einem von Pandoc generierten PDF

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Der obige Text kann mit in eine EPUB-Datei für E-Reader pandoc -o output.epub input.mkdumgewandelt und mit in eine PDF- Datei konvertiert werden pandoc -o output.pdf input.mkd. Letzteres erfordert die Installation einer Latex-Engine, die für die Beantwortung der Frage relevant sein kann.

Bei EPUB wird jeder Header der Ebene 1 automatisch am Anfang einer neuen Seite gesetzt (kleinere Header nicht). Beim PDF ist dies nicht der Fall - und ich würde nicht erwarten, dass dies standardmäßig der Fall ist, da dies den Hauptzielen von Abschriften widerspricht. Ich habe jedoch Probleme, eine Pandoc-Option zu finden, um dieses Verhalten zu aktivieren.

Kennt jemand eine Möglichkeit, dieses Verhalten mit Pandoc zu aktivieren? Das Bearbeiten einer Konfigurationsdatei wäre eine akzeptable Lösung, aber wenn die Syntax latexbasiert ist, würde ich eine Erklärung dafür begrüßen (die Bedeutung dessen, was in der Konfigurationsdatei steht, ist keine umfassende Erklärung für Latex!).

Die --chaptersOption von pandoc scheint zu tun, was ich will ... aber es

  • Lässt Kapitel nur auf ungeradzahligen Seiten erscheinen und fügt bei Bedarf leere Seiten ein (interessant, aber nicht das, was ich will - ich möchte dies auf A4-Papier ausdrucken, und es wird daher nicht buchartig angelegt jegliches ästhetische Positiv wird hier durch eine Verschwendung von Papier ausgeglichen)
  • Fügt Chapter xvor dem eigentlichen Header ein, was zu ein paar lächerlichen Dingen führt, wie:

Kapitel 1

Prolog

Wenn es möglich ist, die --chaptersOption zu zähmen , wäre dies eine geeignete Antwort.

Übelsuppe
quelle

Antworten:

28

Siehe /tex/9497/start-new-page-with-each-section .

Damit dies mit pandoc funktioniert, müssen Sie Folgendes in die Präambel des von pandoc auf dem Weg zu PDF generierten LaTeX-Dokuments einfügen:

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

Dafür gibt es verschiedene Möglichkeiten. Eine besteht darin, eine benutzerdefinierte LaTeX-Vorlage mit diesen Zeilen in der Präambel zu erstellen. Sie können dann die Option verwenden --template mytemplate.latex, um pandoc anzuweisen, diese Vorlage zu verwenden. Gehen Sie wie folgt vor, um die Standard-LaTeX-Vorlage zu erhalten, die Sie ändern können pandoc -D latex > mytemplate.latex.

Eine andere Möglichkeit besteht darin, eine kleine Datei titlesec.texmit nur diesen zwei Zeilen zu erstellen . Rufen Sie dann pandoc mit der Option --include-in-header titlesec.texauf, es in den Header aufzunehmen, wie folgt :

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
quelle
Danke, das ist großartig. Dies hat den Nachteil, dass die Links in der PDF-Datei unterbrochen werden und alle Lesezeichen (nicht sicher, ob dies das richtige Wort ist) auf Seite 1 gesetzt werden. Da ich dies jedoch hauptsächlich für den eigentlichen Druck verwende, ist das keine große Sache. Das einzige, was es nicht tut, ist das Inhaltsverzeichnis auf die gleiche Seite wie der Titel zu setzen, aber das ist überhaupt nicht wirklich wichtig.
Evilsoup
2
Übrigens, wenn Sie derselbe John MacFarlane sind, der Pandoc gemacht hat, möchte ich diese Gelegenheit nutzen, um Ihnen zu danken - seit ich es entdeckt habe, ist Ihr Programm zu einem wichtigen Bestandteil meines Schreibworkflows geworden. Gibt es auch Ressourcen, die Sie zum Erlernen von LaTeX empfehlen würden?
Evilsoup
4
Bitte. Ich habe mit Lamports Buch LaTeX: A Document Preparation System begonnen, was gut ist.
John MacFarlane
1
TitleSec scheint mit der aktuellen Pandoc-Latexvorlage nicht kompatibel zu sein. Die vorgeschlagene Antwort generiert einen Latexfehler. Sie können mit sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Wenn ich die obige Methode verwende, treten Fehler auf. Die Lösung ist hier angegeben .
JDHAO
11

Am Ende habe ich Folgendes getan:

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

Dies führt dazu, dass die LaTeX-Dokumentenklasse 'report' verwendet wird (standardmäßig verwendet --chapterspandoc die Klasse 'book' oder 'memoir', die für Bücher vorgesehen sind - unterschiedlich große Ränder auf jeder Seite, um das Binden von Büchern zu erleichtern , Kapitel, die nur auf ungeraden Seiten beginnen, usw.), wodurch die Überschriften der Ebene 1 oben auf den Seiten stehen, aber nicht nur oben auf den ungeraden Seiten.

Dies fügt vor jedem Kapitel immer noch 'Kapitel X' ein, was immer noch ärgerlich ist. Ich möchte auch, dass das Inhaltsverzeichnis auf derselben Seite wie der Titel beginnt (dies geschieht mit der Dokumentenklasse 'Artikel', aber dann werden die Kapitel nicht an den Anfang neuer Seiten verschoben - sie beginnen einfach überall). Ich bin jedoch der Meinung, dass für den Erwerb dieser Funktionen mehr LaTeX-Kenntnisse erforderlich sind als für mich: Ich werde dies nicht als akzeptierte Antwort kennzeichnen, da die ideale Antwort dafür erklären würde, wie diese beiden Probleme umgangen werden können.

Übelsuppe
quelle
1

Auch mehr als zwei Jahre später, und ich bin immer wieder auf dieses Problem gestoßen; Also für alle anderen, die auf dieses Problem stoßen und es finden ...

Dank der Antworten von John und dem anderen enthaltenen Link verwende ich das Folgende in einer Datei mit der pandoc -HOption und es scheint gut zu funktionieren:

% /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}}

Dabei habe ich die --chaptersOption verwendet, pandocum PDF-Kapitel auf neuen Seiten ohne Chapter XX:Seitentitel zu erstellen . Die Verwendung von führte -V documentclass=reportauch zu dem gewünschten Ergebnis, ohne das Phänomen des Überspringens von Seiten und des Wechselns von Kapiteln zu ungeraden Seitenzahlen, das von der bookDokumentenklasse erzeugt wird .

Eugéne
quelle
0

Hatte das gleiche Problem und stellte fest, dass ich meine Lösung nur mit YAML-Metadatenfeldern veröffentlichen würde.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Jonathan Baldwin
quelle