rmarkdown 中 pdf 和 word 的分页符
page break for pdf and word in rmarkdown
我正在尝试为我的数据分析开发一个 rmarkdown 报告,它可以在 word_document 和 pdf_document 中编织。 Bookdown 非常适用于标题和自动编号 (https://bookdown.org/yihui/bookdown/)。剩下的唯一主要问题是如何进行对两者都适用的分页符。
对于 pdf,我使用 tinytex 的 xelatex,\newpage
效果很好。对于Word,我使用第5节分页符并自定义样式(包括分页符和白色字体)。
我可以使用 Edit > Find... 和 Replace All,但因为我仍在开发报告并需要测试通常两种格式的输出看起来都很棒。
有什么办法可以:
- 在 R 函数中进行全部替换,
- 编辑 tex 模板,使第 5 节不显示在 pdf 输出中(\newpage 在 ms word 中不显示),或者
- 应用魔术命令强制分页兼容所有格式?
谢谢!
这里是 R Markdown 文件的复制示例:
---
title: "Untitled"
author: "Me"
date: "November 15, 2018"
output:
pdf_document: default
word_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Some text.
I want a page break after this.
\newpage
##### page break
This should be the first sentence of the new page.
Some more text.
非常感谢 tarleb 的回答。按照建议,我使用了您对此 post 的回答:.
第 1 步:使用以下代码创建一个 txt 文件:
--- Return a block element causing a page break in the given format.
local function newpage(format)
if format == 'docx' then
local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
return pandoc.RawBlock('openxml', pagebreak)
elseif format:match 'html.*' then
return pandoc.RawBlock('html', '<div style=""></div>')
elseif format:match '(la)?tex' then
return pandoc.RawBlock('tex', '\newpage{}')
elseif format:match 'epub' then
local pagebreak = '<p style="page-break-after: always;"> </p>'
return pandoc.RawBlock('html', pagebreak)
else
-- fall back to insert a form feed character
return pandoc.Para{pandoc.Str '\f'}
end
end
-- Filter function called on each RawBlock element.
function RawBlock (el)
-- check that the block is TeX or LaTeX and contains only \newpage or
-- \newpage{} if el.format:match '(la)?tex' and content:match
-- '\newpage(%{%})?' then
if el.text:match '\newpage' then
-- use format-specific pagebreak marker. FORMAT is set by pandoc to
-- the targeted output format.
return newpage(FORMAT)
end
-- otherwise, leave the block unchanged
return nil
end
第 2 步:将文件另存为 page-break.lua 在与我的 R Markdown 文件相同的目录中。
第 3 步:添加 link 作为 pandoc 参数。
此可重现示例(R Markdown 文件)已更正:
---
title: "Untitled"
author: "Me"
date: "November 15, 2018"
output:
pdf_document: default
word_document:
pandoc_args:
'--lua-filter=page-break.lua'
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Some text.
I want a page break after this.
\newpage
This should be the first sentence of the new page.
Some more text.
请注意,这可能不适用于目录,但我不使用带有 pdf 和 word _document 的 lua 过滤器,之后直接添加内容的 table 非常容易在 Word 中。另外,在上面 link.
中有一个 link 可以解决该问题
我正在尝试为我的数据分析开发一个 rmarkdown 报告,它可以在 word_document 和 pdf_document 中编织。 Bookdown 非常适用于标题和自动编号 (https://bookdown.org/yihui/bookdown/)。剩下的唯一主要问题是如何进行对两者都适用的分页符。
对于 pdf,我使用 tinytex 的 xelatex,\newpage
效果很好。对于Word,我使用第5节分页符并自定义样式(包括分页符和白色字体)。
我可以使用 Edit > Find... 和 Replace All,但因为我仍在开发报告并需要测试通常两种格式的输出看起来都很棒。
有什么办法可以:
- 在 R 函数中进行全部替换,
- 编辑 tex 模板,使第 5 节不显示在 pdf 输出中(\newpage 在 ms word 中不显示),或者
- 应用魔术命令强制分页兼容所有格式?
谢谢!
这里是 R Markdown 文件的复制示例:
---
title: "Untitled"
author: "Me"
date: "November 15, 2018"
output:
pdf_document: default
word_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Some text.
I want a page break after this.
\newpage
##### page break
This should be the first sentence of the new page.
Some more text.
非常感谢 tarleb 的回答。按照建议,我使用了您对此 post 的回答:.
第 1 步:使用以下代码创建一个 txt 文件:
--- Return a block element causing a page break in the given format.
local function newpage(format)
if format == 'docx' then
local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
return pandoc.RawBlock('openxml', pagebreak)
elseif format:match 'html.*' then
return pandoc.RawBlock('html', '<div style=""></div>')
elseif format:match '(la)?tex' then
return pandoc.RawBlock('tex', '\newpage{}')
elseif format:match 'epub' then
local pagebreak = '<p style="page-break-after: always;"> </p>'
return pandoc.RawBlock('html', pagebreak)
else
-- fall back to insert a form feed character
return pandoc.Para{pandoc.Str '\f'}
end
end
-- Filter function called on each RawBlock element.
function RawBlock (el)
-- check that the block is TeX or LaTeX and contains only \newpage or
-- \newpage{} if el.format:match '(la)?tex' and content:match
-- '\newpage(%{%})?' then
if el.text:match '\newpage' then
-- use format-specific pagebreak marker. FORMAT is set by pandoc to
-- the targeted output format.
return newpage(FORMAT)
end
-- otherwise, leave the block unchanged
return nil
end
第 2 步:将文件另存为 page-break.lua 在与我的 R Markdown 文件相同的目录中。
第 3 步:添加 link 作为 pandoc 参数。
此可重现示例(R Markdown 文件)已更正:
---
title: "Untitled"
author: "Me"
date: "November 15, 2018"
output:
pdf_document: default
word_document:
pandoc_args:
'--lua-filter=page-break.lua'
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Some text.
I want a page break after this.
\newpage
This should be the first sentence of the new page.
Some more text.
请注意,这可能不适用于目录,但我不使用带有 pdf 和 word _document 的 lua 过滤器,之后直接添加内容的 table 非常容易在 Word 中。另外,在上面 link.
中有一个 link 可以解决该问题