Far iniziare i capitoli in una nuova pagina in un PDF generato da Pandand


20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Il testo sopra può essere trasformato in un file EPUB per e-reader con pandoc -o output.epub input.mkd, e può essere convertito in PDF con pandoc -o output.pdf input.mkd. Quest'ultimo richiede l'installazione di un motore in lattice, che può essere rilevante per rispondere alla domanda.

Con EPUB, ogni intestazione di livello 1 viene automaticamente impostata nella parte superiore di una nuova pagina (le intestazioni minori non lo sono). Con il PDF, questo non è il caso - e non mi aspetterei che sia predefinito, poiché ciò sarebbe contrario agli obiettivi principali del markdown. Tuttavia, ho problemi a trovare un'opzione pandoc per abilitare questo comportamento.

Qualcuno sa come abilitare questo comportamento con pandoc? Modificare un file di configurazione sarebbe una soluzione accettabile, ma se la sintassi è basata sul lattice apprezzerei una sua spiegazione (del significato di ciò che è nel file di configurazione, non una spiegazione completa del lattice!).

L' --chaptersopzione di Pandoc sembra che dovrebbe fare quello che voglio ... ma

  • Fa apparire i capitoli solo su pagine dispari, inserendo pagine vuote se necessario (interessante, ma non quello che voglio - sto cercando di stamparlo su carta A4, e non sarà strutturato in stile libro, quindi qualsiasi positivo estetico qui è compensato da uno spreco di carta)
  • Inserisce Chapter xprima dell'intestazione effettiva, il che porta ad alcune cose ridicole come:

Capitolo 1

Prologo

Se è possibile domare l' --chaptersopzione, quella sarebbe una risposta adatta.

Risposte:


28

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

Per fare in modo che funzioni con pandoc, è necessario inserire quanto segue nel preambolo del documento LaTeX generato da pandoc sulla strada per PDF:

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

Esistono diversi modi per farlo. Uno è quello di creare un modello LaTeX personalizzato con queste righe nel preambolo. È quindi possibile utilizzare l'opzione --template mytemplate.latexper indicare a PandC di utilizzare questo modello. Per ottenere il modello LaTeX predefinito, che è possibile modificare, fare pandoc -D latex > mytemplate.latex.

Un'altra opzione è quella di creare un piccolo file titlesec.texcon solo quelle due righe. Quindi chiama pandoc con l'opzione --include-in-header titlesec.texper includerlo nell'intestazione, in questo modo:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd

Grazie, è fantastico. Questo ha il rovescio della medaglia di interrompere i collegamenti all'interno del PDF e impostare tutti i segnalibri (non sono sicuro se questa è la parola giusta) alla pagina 1, ma dal momento che sto usando questo principalmente per la stampa reale non è un grosso problema. L'unica cosa che non fa è mettere il sommario nella stessa pagina del titolo, ma questo non è affatto importante.
evilsoup,

2
A proposito, se sei lo stesso John MacFarlane che ha fatto pandoc, vorrei cogliere l'occasione per ringraziarti - da quando l'ho scoperto, il tuo programma è diventato una parte vitale del mio flusso di lavoro di scrittura. Inoltre, ci sono risorse che consiglieresti di conoscere LaTeX?
evilsoup,

4
Prego. Ho iniziato con il libro di Lamport LaTeX: A Document Preparation System, che è buono.
John MacFarlane il

1
namesec sembra essere incompatibile con l'attuale modello di lattice pandoc, la risposta proposta genera un errore in lattice. È possibile utilizzare sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts,

Ci sono errori quando uso il metodo sopra. La soluzione è data qui .
jdhao,

11

Quello che ho finito per fare è stato questo:

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

Questo fa sì che venga utilizzata la classe di documenti "report" di LaTeX (per impostazione predefinita, con --chapterspandoc sembra utilizzare la classe "book" o "memoir", progettata per i libri - margini di dimensioni diverse uno per lato per facilitare la rilegatura dei libri , capitoli che iniziano solo su pagine dispari, ecc.), che posiziona le intestazioni di livello 1 nella parte superiore delle pagine, ma non le mette solo nella parte superiore delle pagine dispari.

Ciò inserisce ancora "Capitolo X" prima di ogni capitolo, il che è ancora fastidioso. Vorrei anche che il Sommario iniziasse nella stessa pagina del titolo (questo accade con la classe di documenti "articolo", ma i capitoli non vengono spostati all'inizio di nuove pagine, ma iniziano dappertutto). Tuttavia, penso che ottenere questi richiederebbe più conoscenza di LaTeX di me: non lo segnerò come risposta accettata, poiché la risposta ideale per questo spiegherebbe come aggirare questi due problemi.


1

Anche più di due anni dopo, e ho continuato a imbattermi anche in questo problema; quindi per chiunque incontri questo problema e lo trovi ...

Grazie alle risposte di John e dell'altro link incluso, utilizzo quanto segue in un file con l' pandoc -Hopzione e sembra funzionare bene:

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

Con questo, ho usato l' --chaptersopzione pandoce genera capitoli PDF su nuove pagine senza Chapter XX:intestazioni di pagina. L'utilizzo ha -V documentclass=reportanche prodotto il risultato desiderato, senza il fenomeno di salto di pagina e nuovo capitolo su numero di pagine dispari prodotto dalla bookclasse del documento.


0

Ho avuto lo stesso problema e ho capito che avrei pubblicato la mia soluzione usando solo i campi di metadati YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.