我在R Studio中使用R markdown编写Word文档。我可以得到很多东西,但目前我还没弄清楚如何才能获得分页符。我找到了解决方案,但仅针对渲染的乳胶/ pdf文档,这不是我的情况。
答案 0 :(得分:22)
使用第五级标头块(#####
)和YAML中定义的docx模板有一种更简单的方法。
在Microsoft Word中创建headingfive.docx
后,选择Modify Style
的{{1}},然后在Heading 5
标签中选择Page break before
并保存{{ 1}}文件。
Line and Page Breaks
在您的headingfive.docx
文档中,您在YAML标题中定义了---
title: 'Making page break using fifth-level header block'
output:
word_document:
reference_docx: headingfive.docx
---
,现在您可以使用分页Rmd
。
请参阅下文。
https://www.r-bloggers.com/r-markdown-how-to-insert-page-breaks-in-a-ms-word-document/
答案 1 :(得分:14)
在John MacFarlane和pandoc google小组的其他人的帮助下,我整理了一个过滤器来做到这一点。请参阅:
https://groups.google.com/forum/#!topic/pandoc-discuss/FzLrhk0vVbU
简而言之,过滤器需要寻找替换为openxml for pagebreak的内容。在这种情况下
\newpage
正在被取代
<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>
这允许对pdf和word输出解释单个乳胶标记。
乔尔
答案 2 :(得分:12)
您要做的是在Pandoc生成的word文档中强制使用“分页符”或“新页面”。我已经找到了在我的环境中执行此操作的方法,但我不确定它是否适用于所有环境。
我的环境: * R-studio / Pandoc / MS-WORD以“* .Rmd”文件开头并生成DOCX文件。
在我的RMD文件中,关键的想法是我已经创建了类似于TEMPLATE文档(MyFormattingDocument.docx)的内容,并且在该单词文档中我调整了STYLES,例如“标题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一对一映射的样式做同样的事情,这样你就可以只做所有“Heading 3”或者其他......只需看看你的RMD创建DOCX正在应用“STYLE”然后调整该样式,即使您需要插入一些基本上为空白内容的“假”行,仅仅是为了强制样式出现在DOCX中
答案 3 :(得分:5)
这是一个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"
]
---
答案 4 :(得分:4)
更新到R 4.0.0时,<!---CHUNK_PAGEBREAK--->
解决方案对我而言不再有效。
相反,我可以使用run_pagebreak()
包中的officer
函数,但仍可以与officedown
包结合使用:
---
output: word_document
---
```{r settings}
library(officedown)
library(officer)
```
Hello world on page 1
`r run_pagebreak()`
Hello world on page 2
答案 5 :(得分:4)
R Markdown 1.16 引入了一项新功能,允许通过添加仅包含命令 \pagebreak
或 \newpage
的段落来插入分页符:
Paragraph before page break.
\pagebreak
First paragraph on a new page.
另请参阅 R Markdown 说明书中的 pagebreaks 部分。
答案 6 :(得分:2)
您可以使用R软件包worded
。这避免了模板字文件的需要。参见https://github.com/davidgohel/worded。
output
参数需要设置为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--->
添加到文档中。
该程序包允许使用类似的机制进行各种单词格式设置。
答案 7 :(得分:1)
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)上面链接中的模板更改了一些默认样式设置,因此您需要将其更改回来
答案 8 :(得分:0)
我的解决方案不是很强大,但可以为我们中的一些人工作。
假设您在word文档中的每个1级标题之前需要分页符,我在yaml字段reference_docx:
中使用的格式模板中定义了此分页符。
在本文档中,您将修改标题1格式(或等效格式)以在标题之前插入分页符。不要忘记使用在RStudio中使用knitr(pandoc)渲染的第一个docx来启动模板。
答案 9 :(得分:0)
这不是一个自动化的解决方案。但我一直在向我的降价文档中添加“##### page break”文本。然后在MS Word中使用find-replace将文本“分页符”替换为“^ m”(手动分页符)。
答案 10 :(得分:-4)
好的,我在降价文档中找到了这个。
水平规则/分页符
三个或更多星号
***
或短划线---
。