繁体   English   中英

如何在 RStudio & Markdown 生成的 Word 文档中添加分页符

[英]How to add a page break in word document generated by RStudio & markdown

我在 R Studio 中用 R markdown 编写了一个 Word 文档。 我可以获得很多东西,但目前我不知道如何获得分页符。 我找到了解决方案,但仅适用于渲染的乳胶/pdf 文档,这不是我的情况。

补充:要插入分页\\newpage ,请使用\\newpage用于格式,包括 LaTeX、HTML、Word 和 ODT。

https://bookdown.org/yihui/rmarkdown-cookbook/pagebreaks.html

Paragraph before page break.

\newpage

First paragraph on a new page.

以前:有一种方法是使用 YAML 中定义的第五级标题块 ( ##### ) 和 docx 模板。

在Microsoft Word 中创建headingfive.docx后,您选择Modify Style Heading 5 Modify Style ,然后在headingfive.docx Line and Page Breaks选项卡中选择Line and Page Breaks Page break before并保存headingfive.docx文件。

分页之前

---
title: 'Making page break using fifth-level header block'
output: 
  word_document:
    reference_docx: headingfive.docx
---

在您的Rmd文档中,您在 YAML 标头中定义了reference_docx ,现在您可以使用分页#####

请参阅下文。

https://www.r-bloggers.com/r-markdown-how-to-insert-page-breaks-in-a-ms-word-document/

在 John MacFarlane 和 pandoc google group 其他人的帮助下,我组合了一个过滤器来执行此操作。 请参阅: https ://groups.google.com/forum/#!topic/pandoc-discuss/FzLrhk0vVbU 简而言之,过滤器需要寻找一些东西来替换 openxml 以进行分页。 在这种情况下, \\newpage被替换为<w:p><w:r><w:br w:type=\\"page\\"/></w:r></w:p>这允许要为 pdf 和 word 输出解释的单个乳胶标记。 乔尔

您要做的是在用 Pandoc 生成的 Word 文档中强制“分页”或“新页面”。 我找到了一种在我的环境中执行此操作的方法,但我不确定它是否适用于所有环境。

我的环境: * R-studio / Pandoc / MS-WORD 以“*.Rmd”文件开头并生成 DOCX 文件。

在我的 RMD 文件中,关键思想是我创建了类似于模板文档 (MyFormattingDocument.docx) 的内容,在该 Word 文档中,我针对“标题 1”和/或“标题 2”和或“脚注”或任何其他我想要调整的预定义样式。

(参见: http : //rmarkdown.rstudio.com/word_document_format.html#style-reference )了解样式参考以及如何在 RMD 文件中设置标题信息以指定参考文档。

SOOOO 在我的情况下......我调整了 WORD 中的“标题 1”样式,以在“标题 1”的段落格式中包含强制的“分页前”。 在不同版本的 Microsoft WORD 中,您强制每个“标题 1”始终为“分页符”的确切方式是不同的,但是如果您遵循 WORD 文档并修改“标题 1”样式,那么每个“标题 1”之前总会有一个分页符它。

然后……您将此模板文件保存在您正在使用 RMD 文件的某个目录中……并将其用作模板。 文件的内容被忽略......所以不用担心......你可以在这个文件中放置示例文本并测试格式是否全部有效......内容被忽略但样式在新的将由 RMD 文件构建的 word 文档因此.... 那么每个“标题 1”之前都会有一个中断。

注意:您显然可以对任何具有 PANDOC MARKUP 一对一映射的样式执行相同的操作,因此您可以只制作所有“标题 3”或其他任何内容......只需看看在您的 RMD 中创建的 DOCX 是什么正在应用“样式”,然后调整该样式,即使您需要插入一些具有基本空白内容的“假”行,只是为了强制样式出现在 DOCX 中

这是一个 R 脚本,可用作 pandoc 过滤器,根据上面@Jallen 的回答,用分词符替换 LaTeX 中断符( \\pagebreak )。 有了这个,你不需要编译 pandoc 脚本。 由于您在 R Markdown 中工作,因此我假设系统中有 R 可用。

#!/usr/bin/env Rscript

json_in <- file('stdin', 'r')
lat_newp <- '{"t":"RawBlock","c":["latex","\\\\newpage"]}'
doc_newp <- '{"t":"RawBlock","c":["openxml","<w:p><w:r><w:br w:type=\\"page\\"/></w:r></w:p>"]}'
ast <- paste(readLines(json_in, warn=FALSE), collapse="\n")
ast <- gsub(lat_newp, doc_newp, ast, fixed=TRUE)
write(ast, "")

将其保存为page-break-filter.R或类似的内容,并通过在终端中运行chmod +x page-break-filter.R使其可执行。

然后将此过滤器包含在 R Markdown YAML 中,如下所示:

---
title: "Title
author: "Author"
output:  
  word_document:
    pandoc_args: [
      "--filter", "/path/to/page-break-filter.R"
    ]
---

您可以使用 R 包worded 这避免了对模板 word 文件的需要。 请参阅https://github.com/davidgohel/worded

output参数需要设置为worded::rdocx_document并且您需要调用library(worded) worded::rdocx_document library(worded)

---
date: "2018-03-27"
author: "David Gohel"
title: "Document title"
output: 
  worded::rdocx_document
---

```{r setup, include=FALSE}
library(worded)
```

然后,您可以在需要分页<!---CHUNK_PAGEBREAK---><!---CHUNK_PAGEBREAK--->添加到您的文档中。

该包允许使用类似机制的各种文字格式选项。

更新到 R 4.0.0 时, <!---CHUNK_PAGEBREAK--->解决方案对我来说不再起作用。

相反,我可以使用officer包中的run_pagebreak()函数,仍然与officedown包结合使用:

---
output: word_document
---

```{r settings}
library(officedown)
library(officer)
```

Hello world on page 1

`r run_pagebreak()`

Hello world on page 2

R Markdown 1.16 引入了一项新功能,允许通过添加仅包含命令\\pagebreak\\newpage的段落来插入\\pagebreak

Paragraph before page break.

\pagebreak

First paragraph on a new page.

另请参阅 R Markdown 手册中的 分页符部分。

它不是一个自动化的解决方案。 但是我一直在将文本“#####page break”添加到我的降价文档中。 然后在 MS Word 中使用查找替换将文本“分页符”替换为“^m”(手动分页符)。

Sungpil 的文章很接近,但不太奏效。 这是我为此找到的最佳解决方案: https : //scriptsandstatistics.wordpress.com/2015/12/18/rmarkdown-how-to-inserts-page-breaks-in-a-ms-word-document/

更好的是,作者包含了 Word 模板来完成这项工作。 R-blogger 指向其模板的链接已损坏,并且标题格式错误。 我做的一些笔记:

1) 您可能需要在 Rmd 标头中包含单词模板的整个路径,如下所示:

output: 
    word_document:
      reference_docx: C:/workspace/myproject/mystyles.docx

2) 上面链接中的模板更改了一些默认样式设置,因此您需要将它们更改回来

我的解决方案不是很健壮,但可以为我们中的一些人工作。 假设您需要在 word 文档中的每个级别 1 标题之前分页,我在 yaml 字段reference_docx:使用的格式模板中定义了这一点。 在本文档中,您修改标题 1 格式(或等效格式)以在标题前插入分页符。 不要忘记使用 RStudio 中使用 knitr (pandoc) 渲染的第一个 docx 来启动您的模板。

好的,我在 markdown 文档中找到了这个。

水平规则/分页符

三个或更多星号***或破折号---

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM