如何使用Bookdown更改单个文档中的标题标签名称?

frk*_*kbr 8 r r-markdown bookdown

我用R-Markdown的Bookdown-package 创建了一个单独的文档,允许html和pdf输出.我想更改标题标签Figure,TableTable of Contents改为另一种语言.这是一个最小的例子:

---
title: Dokument auf Deutsch
output:
  bookdown::html_document2:
    toc: yes
  bookdown::pdf_document2:
    toc: yes
---

# Erstes Kapitel

Abbildung \@ref(fig:pressure) ist Deutsch.

```{r pressure, echo=FALSE, out.width = "80%", fig.pos='h', fig.cap="Deutsche Bildunterschrift"}
plot(pressure)
```
Run Code Online (Sandbox Code Playgroud)

Bookdown使用英文单词"Figure"作为图标题前缀.编织到pdf_document2时,Bookdown使用英文单词'Contents'作为toc.如何将这些改为'Abbildung'和'Inhalt'?

我在Bookdown手册中阅读了第4.5节国际化.作者建议编辑配置文件_bookdown.yml,其中可以更改标签名称.但是,我找不到这样的配置文件,我的单个Bookdown文档似乎是自包含的.此外,4.5节中的示例并未指出如何更改toc的术语.

我发现这个答案\renewcommand.这适用于使用时的数字和表格output:pdf_document2,但不适用于output:html_document2.作为一个侧面问题,\renewcommand{\contentsname}{Inhalt}不要在pdf输出中将"内容"更改为"Inhalt".所以\renewcommand不是一个理想的解决方法.

我实际上想使用Bookdown手册上面4.5节中描述的原始解决方案._bookdown.yml当我写一个Bookdown文档时,在哪里可以找到此配置文件?在该文件中我可以更改toc的术语吗?如果我必须首先创建此配置文件,我应该如何做到这一点以及如何将其链接到我的单个Rmd文档?

msc*_*lli 11

如果我将您的示例代码保存为deutsch.rmd然后呈现它,我可以重现您描述的内容.


如果然后创建一个名为_bookdown.yml 在同一个目录作为deutsch.rmd

language:
  label:
    fig: "Abbildung "
Run Code Online (Sandbox Code Playgroud)

并重新渲染,"输出"中的"图"替换为"Abbildung".


如果那时我创建了一个名为preamble.texcontains 的文件

\usepackage[german]{babel}
Run Code Online (Sandbox Code Playgroud)

并调整deutsch.rmd要读取的YAML标题

title: Dokument auf Deutsch
output:
  bookdown::html_document2:
    toc: yes
  bookdown::pdf_document2:
    toc: yes
    includes:
      in_header: preamble.tex
Run Code Online (Sandbox Code Playgroud)

PDF输出也切换到德语.


编辑:我刚刚发现自己,这个解决方案似乎等同于使用以下YAML标头:

title: Dokument auf Deutsch
output:
  bookdown::html_document2:
    toc: yes
  bookdown::pdf_document2:
    toc: yes
lang: de
Run Code Online (Sandbox Code Playgroud)

请注意,上面的PDF输出解决方案使用"Inhaltsverzeichnis"而不是"Inhalt".

如果您真的想根据自己的喜好简单地更改图形标签和目录标题,而不依赖于babel正确的操作,则可以使用以下代码preamble.tex:

\renewcommand{\figurename}{Abbildung}
\renewcommand{\contentsname}{Inhalt}
Run Code Online (Sandbox Code Playgroud)