Démarrer des chapitres sur une nouvelle page dans un PDF généré par un pandoc

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Le texte ci-dessus peut être transformé en un fichier EPUB pour les lecteurs électroniques avec pandoc -o output.epub input.mkd, et il peut être converti en PDF avec pandoc -o output.pdf input.mkd. Ce dernier nécessite l'installation d'un moteur en latex, ce qui peut être utile pour répondre à la question.

Avec l'EPUB, chaque en-tête de niveau 1 est automatiquement défini en haut d'une nouvelle page (les en-têtes inférieurs ne le sont pas). Avec le PDF, ce n'est pas le cas - et je ne m'attendrais pas à ce que ce soit par défaut, car ce serait contraire aux principaux objectifs du démarque. Cependant, j'ai du mal à trouver une option pandoc pour activer ce comportement.

Quelqu'un connaît-il un moyen d'activer ce comportement avec pandoc? La modification d'un fichier de configuration serait une solution acceptable, mais si la syntaxe est basée sur le latex, j'apprécierais une explication (de la signification de ce qui est dans le fichier de configuration, pas une explication complète du latex!).

L' --chaptersoption de Pandoc semble vouloir faire ce que je veux ... mais

  • Fait en sorte que les chapitres n'apparaissent que sur des pages impaires, en insérant des pages vierges si nécessaire (intéressant, mais pas ce que je veux - je cherche à l'imprimer sur du papier A4, et il ne sera pas disposé en style livre, donc tout positif esthétique ici est compensé par un gaspillage de papier)
  • Insère Chapter xavant l'en-tête réel, ce qui conduit à des trucs ridicules comme:

Chapitre 1

Prologue

S'il est possible d'apprivoiser l' --chaptersoption, ce serait une réponse appropriée.

evilsoup
la source

Réponses:

28

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

Pour que cela fonctionne avec pandoc, vous devrez insérer ce qui suit dans le préambule du document LaTeX que pandoc génère sur le chemin du PDF:

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

Il existe plusieurs façons de procéder. La première consiste à créer un modèle LaTeX personnalisé avec ces lignes dans le préambule. Vous pouvez ensuite utiliser l'option --template mytemplate.latexpour indiquer à pandoc d'utiliser ce modèle. Pour obtenir le modèle LaTeX par défaut, que vous pouvez modifier, faites pandoc -D latex > mytemplate.latex.

Une autre option consiste à créer un petit fichier titlesec.texavec uniquement ces deux lignes. Appelez ensuite pandoc avec l'option --include-in-header titlesec.texde l'inclure dans l'en-tête, comme ceci:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
la source
Merci, c'est génial. Cela a l'inconvénient de rompre les liens dans le PDF et de définir tous les signets (je ne sais pas si c'est le bon mot) à la page 1, mais comme je l'utilise principalement pour l'impression réelle, ce n'est pas un gros problème. La seule chose qu'il ne fait pas est de mettre la table des matières sur la même page que le titre, mais ce n'est pas vraiment important du tout.
evilsoup
2
BTW, si vous êtes le même John MacFarlane qui a fait pandoc, je voudrais profiter de cette occasion pour vous remercier - depuis que je l'ai découvert, votre programme est devenu une partie essentielle de mon flux de travail d'écriture. De plus, y a-t-il des ressources que vous recommanderiez pour en savoir plus sur LaTeX?
evilsoup
4
Je vous en prie. J'ai commencé avec le livre de Lamport LaTeX: A Document Preparation System, ce qui est bien.
John MacFarlane
1
titleSec semble être incompatible avec le modèle de latex pandoc actuel, la réponse proposée génère une erreur de latex. Vous pouvez utiliser sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Il y a des erreurs lorsque j'utilise la méthode ci-dessus. La solution est donnée ici .
jdhao
11

J'ai fini par faire ceci:

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

Cela provoque l'utilisation de la classe de document LaTeX 'report' (par défaut, avec --chapters, pandoc semble utiliser la classe 'book' ou 'memoir', qui sont conçues pour les livres - des marges de tailles différentes de chaque côté pour faciliter la reliure des livres , chapitres commençant uniquement sur des pages impaires, etc.), ce qui place les en-têtes de niveau 1 en haut des pages, mais pas uniquement en haut des pages impaires.

Cela insère toujours le «Chapitre X» avant chaque chapitre, ce qui est toujours ennuyeux. J'aimerais également que la table des matières commence sur la même page que le titre (cela se produit avec la classe de document `` article '', mais les chapitres ne sont pas shuntés au début des nouvelles pages - ils commencent juste n'importe où). Cependant, je pense que l'obtention de ceux-ci nécessiterait plus de connaissances de LaTeX que moi: je ne vais pas marquer cela comme la réponse acceptée, car la réponse idéale pour cela expliquerait comment contourner ces deux problèmes.

evilsoup
la source
1

Plus de deux ans plus tard également, et j'ai continué à rencontrer ce problème également; donc pour toute autre personne qui rencontre ce problème qui trouve cela ...

Grâce aux réponses de John et à l'autre lien inclus, j'utilise ce qui suit dans un fichier avec l' pandoc -Hoption et cela semble bien fonctionner:

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

Avec cela, j'ai utilisé l' --chaptersoption pour pandocgénérer des chapitres PDF sur de nouvelles pages sans en- Chapter XX:têtes de page. L'utilisation a -V documentclass=reportégalement produit le résultat souhaité, sans le phénomène de saut de page et de nouveau chapitre sur la page impaire produit par la bookclasse de document.

Eugène
la source
0

J'ai eu le même problème et j'ai compris que je publierais ma solution en utilisant uniquement les champs de métadonnées YAML.

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