在 r bookdown 中使用自定义 TeX 时多个 headers/footers

Multiple headers/footers when using custom TeX in r bookdown

喜欢书本。但是,我正在将我的书从 LaTeX 移植到 bookdown,并希望在 headers/footers.

方面得到一些帮助

我有一个自定义代码可以在我的 LaTeX 中生成页眉和页脚:

% HEADER AND FOOTER MANIPULATION
 % for normal pages
 \nouppercaseheads
 \headsep = 0.16in
 \makepagestyle{mystyle}
 \setlength{\headwidth}{\dimexpr\textwidth+\marginparsep+\marginparwidth\relax}
 \makerunningwidth{mystyle}{\headwidth}
 \makeevenhead{mystyle}{}{\textls[100]{\textsf{\small\scshape\thetitle}}}{}
 \makeoddhead{mystyle}{}{\textls[100]{\textsf{\small\scshape\leftmark}}}{}
 \makeevenfoot{mystyle}{}{\textls[100]{\textsf{\small\thepage}}}{}
 \makeoddfoot{mystyle}{}{\textls[100]{\textsf{\small\thepage}}}{}
 \clearmark{section} % removing section in the headers
 \makeatletter
 \makepsmarks{mystyle}{%
 \createmark{chapter}{left}{nonumber}{\@chapapp\ }{.\ }}
 \makeatother

 % for pages where chapters begin
 \makepagestyle{plain}
 \makerunningwidth{plain}{\headwidth}
 \makeevenfoot{plain}{}{}{}
 \makeoddfoot{plain}{}{}{}
 \pagestyle{mystyle}
% END HEADER AND FOOTER MANIPULATION

我将整个 LaTeX 序言放在 preamble.tex 中(我还没有向本书添加内容)。它呈现以下内容:

渲染实际上应该是这样的:

此外,这是 index.Rmd 中 YAML 中的内容。

documentclass: memoir
papersize: smalldemyvo
indent: yes
microtypeoptions:
  - protrusion
  - tracking
fontfamily: Alegreya
fontfamilyoptions:
  - osf
fontsize: 11pt
output:
  bookdown::pdf_book:
    template: null

我是 bookdown 的新手,但我确实阅读了文档。我觉得我需要两件事的帮助。

  1. 如何删除自动生成的页眉和页脚?
  2. 如何让 "Contents" 从目录中消失 table?

谢谢!

已编辑答案

bookdown 有内置模板(主要由 documentclass and/or Pandoc 决定)。请参阅 bookdown 文档的 Theming and Templates 部分。

正如@pzhao 所建议的,一个值得学习的例子是 template in the bookdown-chinese repo. Observe the variables that bring in data from the Rmd files. They're enclosed between $$, such as $body$. _output.yml 引用了这个模板。这样,您就可以覆盖默认模板,从而消除重复的 headers/footers。您的 LaTeX 模板决定了您 headers/footers 的组成部分。一个例子是我问题中的 LaTeX 代码。

Contents 在 ToC table 中的出现也可以通过调整您的自定义 LaTeX 模板来控制。我用的是memoirclass,帮助去掉self-reference可以找到here。我的自定义 LaTeX 模板已经解决了它,所以当我弄清楚如何使用我的自定义模板时它会自行修复。

默认情况下,bookdown 使用一些内置模板。如果您需要更多调整,您可以制作自己的 .tex 文件(preamble.tex、before_body.tex、after_body.tex、template.tex)并在 [=27 的 yaml 部分指定它们=] 像这样:

bookdown::pdf_book:
  includes:
    in_header: preamble.tex
    before_body: before_body.tex
    after_body: after_body.tex
template: template.tex

bookdown 将您的书的 preamble.tex、before_body.tex 和 after_body.tex 与主体(在 template.tex 中标记为 $body$)合并为一个。 tex文件在template.tex控制下的结构,用pandoc和LaTex编译成pdf书。

在您的情况下,您必须以正确的方式将自定义代码插入 template.tex。 @yihui 的 demo 就是一个很好的例子。

有关自定义这些 .tex 文件的更多示例,我建议您可以查看我开发的 'bookdownplus' 包,它为您提供了 19 个示例,展示了如何将 LaTeX 模板定制到 bookdown 的框架中,或阅读 Chapter 8.3 Create Your Own Templates in the bookdownplus textbook.