在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启用此行为的方法吗?编辑配置文件是可以接受的解决方案,但是如果语法是基于乳胶的,我将对此有一个解释(对配置文件中含义的理解,而不是对乳胶的全面解释!)。

pandoc的--chapters选项似乎应该执行我想要的...但是它

  • 使章节仅出现在奇数页上,并在必要时插入空白页(有趣,但不是我想要的-我希望将其打印在A4纸上,并且不会以书本的形式布置,因此浪费纸张可以抵消这里的任何美学优势)
  • Chapter x在实际标题之前插入,这会导致一些荒谬的事情,例如:

第1章

序幕

如果可以驯服该--chapters选项,那将是一个合适的答案。

Answers:


28

请参阅/tex/9497/start-new-page-with-each-section

要使用pandoc进行此操作,您需要将以下内容插入pandoc在PDF生成过程中生成的LaTeX文档的序言中:

\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的约翰·麦克法兰(John MacFarlane)是同一个人,那么我想借此机会感谢您-自从发现以来,您的程序已成为我编写工作流程的重要组成部分。另外,您是否建议您学习有关LaTeX的任何资源?
evilsoup

4
别客气。我从Lamport的书LaTeX:文档准备系统开始,这很好。
约翰·麦克法兰

1
titlesec似乎与当前的pandoc乳胶模板不兼容,建议的答案会产生乳胶错误。您可以使用sectsty: \usepackage{sectsty} \sectionfont{\clearpage}
Merlijn Sebrechts

使用上述方法时出现错误。解决方案在这里给出。
jdhao

11

我最终要做的是:

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

这将导致使用LaTeX的“报告”文档类(默认情况下,with --chapters,pandoc似乎使用了“ book”或“ memoir”类,它们是专为书籍设计的-每边各有一个不同大小的边距,以便于装订,章节仅从奇数页开始等),这会将1级标题放在页面顶部,但不仅将它们放在奇数页的顶部。

仍然在每章之前插入“第X章”,这仍然很烦人。我还非常希望目录与标题在同一页上开始(这种情况发生在“文章”文档类中,但是章节不会被分流到新页面的开头-它们只是从任何地方开始)。但是,我认为要获得这些知识将比我需要更多的LaTeX知识:我不会将其标记为可接受的答案,因为对此的理想答案将说明如何解决这两个问题。


1

两年多以后,我也一直遇到这个问题。所以对于遇到这个问题的其他人来说...

多亏了John的回答和包含的其他链接,我在带有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,它在没有Chapter XX:页面标题的新页面上生成PDF章节。使用-V documentclass=report还可以产生所需的结果,而不会出现book文档类产生的页面跳动和奇数页换新现象。


0

遇到相同的问题,并弄清楚我仅使用YAML元数据字段发布解决方案。

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.