R Markdown、Knitr、Pandoc和Bookdown之间有什么关系?
具体来说,在将带有嵌入式R代码的标记文档(例如.Rnw或.Rmd)转换为最终输出(例如.pdf或.html)时,这些软件包之间有何“分工”?如果使用Knitr处理RMarkdown,则rmarkdown
软件包是做什么的,它与markdown
软件包有什么区别?
R Markdown、Knitr、Pandoc和Bookdown之间有什么关系?
具体来说,在将带有嵌入式R代码的标记文档(例如.Rnw或.Rmd)转换为最终输出(例如.pdf或.html)时,这些软件包之间有何“分工”?如果使用Knitr处理RMarkdown,则rmarkdown
软件包是做什么的,它与markdown
软件包有什么区别?
Pandoc是一个文档转换器。它可以将许多不同的标记格式转换为其他许多格式,例如.doc
、.pdf
等。
Pandoc是一个没有GUI的命令行工具。它是一个独立的软件,与R分开。然而,它随R Studio捆绑安装,因为rmarkdown
依赖它进行文档转换。
Pandoc不仅可以转换文档,还可以在基本的markdown语言之上添加功能,以使其支持更复杂的输出。
R Markdown基于markdown:
Markdown是一种轻量级标记语言,具有纯文本格式化语法,设计成可以转换为HTML和许多其他格式。Markdown文件是通常带有扩展名.md
的纯文本文件。
像其他标记语言(如HTML和Latex)一样,它完全独立于R。
没有明确定义的Markdown标准。这导致了碎片化,因为不同的供应商编写自己的语言变体以纠正缺陷或添加缺失的功能。
markdown
是将.Rmd
文件转换为HTML的R包。它是rmarkdown
的前身,后者提供了更多功能。不再建议使用。
R Markdown是markdown语法的扩展。R Markdown文件是通常具有文件扩展名.Rmd
的纯文本文件。它们使用markdown语法的扩展编写,以便R代码可以嵌入其中,并以稍后可执行的方式进行执行。
.Rmd
文件转换为多种不同格式。rmarkdown::render
,该函数依赖于pandoc。该函数将输入文件呈现为指定的输出格式,使用pandoc。如果输入需要编织,则在pandoc之前调用knitr::knit
。
RMarkdown包旨在提供合理的默认值和友好的R界面以自定义Pandoc选项。
在RMarkdown文件顶部看到的YAML元数据是特定于向rmarkdown::render
传递选项,以指导构建过程。.Rhtml
或.Rnw
文件,应使用内置于Knitr
的便利函数,例如knitr::knit2html
和knitr:knit2pdf
.Rmd
) 文件转换为标准 markdown 文件(.md
).Rnw
(Sweave) 文件转换为 .tex
格式。.Rhtml
文件转换为 html。核心函数是 knitr::knit
,默认情况下它会检查输入文档并尝试猜测其类型 - Rnw、Rmd 等。
这个核心函数执行三个角色:
- 源代码解析器,它查看输入文档并检测哪些部分是用户希望被评估的代码。
- 代码评估器,它评估这段代码。
- 输出呈现器,在格式可解释原始输出类型的文档中编写代码评估结果。例如,如果输入文件是一个 .Rmd
,输出呈现器会以 .md
格式标记代码评估的输出。
Knitr 不会 在文档格式之间进行转换 - 例如将一个 .md
转换为 .html
。然而,它提供了一些方便的函数来帮助你使用其他库来完成这个工作。如果你正在使用 rmarkdown
包,你应该忽略这个功能,因为它已经被 rmarkdown::render
取代了。
knitr:knit2pdf
,它将:"编织输入的Rnw或Rrst文档,并使用texi2pdf或rst2pdf编译为PDF。"
一个可能令人困惑的来源是knitr::knit2html
,它“是一个方便的函数,用于编织输入的Markdown源代码并调用markdown::markdownToHTML
将结果转换为HTML。”。这是现已过时的功能,因为 markdown
包已被rmarkdown
包取代。请参见此注释。
bookdown软件包建立在R Markdown之上,继承了Markdown语法的简单性以及多种输出格式(PDF / HTML / Word / ...)的可能性。
它提供了一些功能,如多页HTML输出、编号和交叉引用图表/表格/部分/等式,插入部分/附录,并导入了GitBook风格(https://www.gitbook.com)来创建优雅而引人注目的HTML书籍页面。
knitr_opts
(我总是忘记它叫什么)、通过自定义pandoc参数、通过额外的yam文件或自定义pandoc模板中调用哪些参数...有时候感觉像是走进了一片丛林,特别是当你将LaTeX添加到链条中时。 - baptiste