在 pandoc 生成的 PDF 中让章节从新页面开始

evi*_*oup 20 pdf latex epub pandoc

%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header
Run Code Online (Sandbox Code Playgroud)

上面的文字可以转成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选项,那将是一个合适的答案。

Joh*_*ane 30

请参阅https://tex.stackexchange.com/questions/9497/start-new-page-with-each-section

要使用 pandoc 进行这项工作,您需要将以下内容插入到 pandoc 在转换为 PDF 的途中生成的 LaTeX 文档的序言中:

\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}
Run Code Online (Sandbox Code Playgroud)

有几种方法可以做到这一点。一种是在序言中使用这些行创建自定义 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
Run Code Online (Sandbox Code Playgroud)

  • 别客气。我从 Lamport 的书 LaTeX: A Document Preparation System 开始,这本书很好。 (4认同)
  • 顺便说一句,如果您是制作 pandoc 的约翰麦克法兰,我想借此机会感谢您 - 自从我发现它以来,您的程序已成为我写作工作流程的重要组成部分。另外,有没有你推荐的学习 LaTeX 的资源? (2认同)
  • titlesec 似乎与当前的 pandoc 乳胶模板不兼容,建议的答案会生成乳胶错误。您可以使用 sectsty:`\usepackage{sectsty} \sectionfont{\clearpage}`。 (2认同)

evi*_*oup 12

我最终做的是这样的:

pandoc --toc -V documentclass=report -o output.pdf inputs*.mkd
Run Code Online (Sandbox Code Playgroud)

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

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