officedown 生成 word

功能简介

  1. officedown是在R markdown的基础上添加了一些office的功能( R markdown中文本没有格式, officedown提供文本居中功能等)。

{officedown} is bringing some officer features into R markdown documents.
officedown : Enhanced R markdown Format for Word and Powerpoint.

  1. officedown可以在R markdown的基础上生成docx/pptx文件;也可以在bookdown的基础上生成docx文件。
  2. 生成docx文件时,主要功能包括:
  • 各级标题自动编号;
  • 支持自定义word中图/表格式(包括图表标题格式);
  • 支持自定义文本格式(字体设置、文本居中等);
  • 一键生成目录,包括文章目录、图形目录、表格目录;
  • 自动生成页码;
  • 支持图表的交叉引用;
  • 实现页面分栏;
  • 实现横向页面;
  • 支持自定义有序列表、无序列表格式;

一些问题

  1. 如何安装?
remotes::install_github("davidgohel/officedown")
或直接
install.packages('officedown')
  1. 如何创建一个officedown文件?
  • 创建R markdown文件;
  • 从from_template :Advance Word document创建(模板中包含各种预置样式);


    创建officedown文件
  • yaml header 中设置output:officedown::rdocx_document;
---
date: "`r Sys.Date()`"
author: "Your Name"
title: "officedown template"
output: 
  officedown::rdocx_document:
    mapstyles:
      Normal: ['First Paragraph']
---
  1. 如何为各级标题自动设置编号及相关格式?
    officedown对标题预置了样式,样式中设置了自动编号:


    预置标题样式

    上图为officedown生成的word文件中包含的样式,可以看到标题样式中设置了自动编号。
    如需修改预置的样式可以:

  • 自定义生成模板文件,修改标题样式, 模板文件保存为template.docx;


    自定义标题样式
  • 通过yaml header 中设置reference_docx参数为template.docx使用自定义样式;
---
date: "`r Sys.Date()`"
author: "Your Name"
title: "officedown template"
output: 
  officedown::rdocx_document:
    reference_docx : template.docx
---
  1. 如何设置word中表格格式?
  • 表格标题内容(tab.cap)、表格id(tab.id):
    在knitr chunk options 中设置如下所示,其中表格id可以用来生成交叉引用;
```{r tab.cap="cars", tab.id="cars"}
head(cars)```
  • 表格相关格式在yaml header 中设置:
---
output: 
  officedown::rdocx_document:
    tables:
      style: Table
      layout: autofit
      width: 1.0
      caption:
        style: Table Caption
        pre: 'Table '
        sep: ': '
      conditional:
        first_row: true
        first_column: false
        last_row: false
        last_column: false
        no_hband: false
        no_vband: true
---
  • 参数含义:
    以tables作为一级参数,设置包括样式(style)、布局(layout)、宽度(width)、标题(caption)、其他(conditional),上图所示为默认设置,各参数详细含义参见:参数
  • 输出结果示例:


    表格示例
  • 一些疑问:
    • style:Table并不在预置的样式中;
    • 表格标题自动编号:table 1 / table 2, 在caption下 style:Table Caption样式中尚未找到相关设置;
  1. 如何设置word中图形格式?
    图形的标题及相关设置方式同表格,图形标题内容通过fig.cap设置,图形标题id通过fig.id设置,相关参数在yaml header中设置。
---
output: 
  officedown::rdocx_document:
    plots:
      style: Normal
      align: center
      caption:
        style: Image Caption
        pre: 'Figure '
        sep: ': '
---
  1. 图表标题图和自动生成编号?
    默认自动生成,不知道在何处设置。

  2. 如何设置word中文本的格式,字体?
    Rmarkdown中文本没有格式,使用officedown是可通过officer 包(安装officedown时自动安装,使用时需要加载)提供了一些额外的officer support。

Package {officer} provides functions to produce document blocks and runs elements.

  • fp_text函数可以用来设置字体格式:
    • 预先设置字体格式(大小、颜色、字体、是否加粗):
    library(officedown)
    library(officer)
    ft <- fp_text(shading.color='#EFEFEF', bold = TRUE)
    
    • 使用时利用ftext将文本与预设格式联系在一起
    This document presents most of the features of the package `r ftext("officedown", ft)`.
    #段落中的'officedown'会被加粗
    
  • fp_par函数可以用来设置段落的位置格式:
    • 预先设置位置格式:
    library(officedown)
    library(officer)
    fp <- fp_par(
           text.align = "center", 
           padding.bottom = 20, padding.top = 120, 
           border.bottom = fp_border())
    
    • 使用时将格式标量放在段落结尾即可:
    This document presents most of the features of the package `r   ftext("officedown", ft)`. 
    `r fp`
    #整段文本会居中,并且添加下划线
    
  • 效果如下:


    文本格式设置效果
  • 更多关于officer包参见:officer
  1. 如何生成目录?
<!---BLOCK_TOC{level: 2}--->     #文章目录,level设置目录级别
<!---BLOCK_TOC{seq_id: 'fig'}--->   #图形目录
<!---BLOCK_TOC{seq_id: 'tab'}--->   #表格目录

效果如图:


目录
  1. 能否生成页码?
    默认生成页码, 并且预置样式中包含页码样式:


    页码样式
  2. 如何使用交叉引用?

  • 介绍:
    图表标题自动编号,并生成一个包含编号的标签,交叉引用的地方会超链接到图表标题。

{officedown} bring this feature: caption are autonumbered and a bookmark is set on the chunk containing the number; cross-references are Word references hyperlinked to the captions they are related to.

  • 使用方法:
\@ref(fig:tsplot)  
\@ref(tab:mtcars)

@ref()为固定格式;fig/tab表示图形/表格;tsplot与mtcars 是在knitr chunk options中设置的fig.id/tab.id(唯一标识图表的id)。

  • 一个用例:
This is a linked reference to a figure: \@ref(fig:tsplot)
交叉引用
  1. 如何实现页面分栏?
<!---BLOCK_MULTICOL_START--->

This text is on column 1. This text is on column 1.
This text is on column 1. This text is on column 1.
This text is on column 1. This text is on column 1.
This text is on column 1. This text is on column 1.
This text is on column 1. This text is on column 1.`r fp_par(text.align = "justify")`
`r run_columnbreak()`

This text is on column 2.
This text is on column 2.
This text is on column 2.
This text is on column 2.
This text is on column 2.
This text is on column 2.`r fp_par(text.align = "justify")`

<!---BLOCK_MULTICOL_STOP{widths: [3,3], space: 0.2, sep: true}--->

r run_columnbreak(是officer包中的函数)表示分栏。STOP中的参数:widths表示分栏左右的宽度, space表示分栏中文本与中心线的距离, sep表示是否显示分栏线。
效果如下图:

分栏效果

  1. 如何实现页面横向排布?
<!---BLOCK_LANDSCAPE_START--->

blah blah blah.

<!---BLOCK_LANDSCAPE_STOP--->

效果如下:


页面横排
  1. 有序列表、无序列表问题?
  • Officedown在列表上比rmarkdown有何优势?
    能够自定义有序、无序列表的样式;

  • 如何自定义有序列表和无序列表样式?

    • 在R markdown中生成有序无序列表参见 markdown列表
    • 在template.docx中自定义列表样式,并设置样式名称,具体方法参见:word自定义列表样式
      自定义列表样式
    • 在 reference_docx中使用模板 template.docx;并设置lists参数为自定义列表样式的名称(ol: ordered list;ul: unordered list)
---
date: "`r Sys.Date()`"
author: "Your Name"
title: "officedown template"
output: 
  officedown::rdocx_document:
    mapstyles:
      Normal: ['First Paragraph']
    reference_docx : template.docx
    lists:
      ol.list : 'self ol'
      ul.list : 'self ul'
---
  • 自定义样式效果:


    image.png
  • 注意问题:列表形式是全局的,对文档中的所有列表生效,无法针对同一篇文档中的不同列表设置不同格式。
  • 注意问题:在生成reference_docx时,模板需要使用officedown生成的docx文件(包含officedown的各种预置样式),直接创建新docx文档会导致预置样式不可用。
  1. 如何实现另起一页?
\newpage
# 另起一页
  1. 页眉页脚设置?
    officedown有定义页眉页脚的样式;具体生成页眉页脚是R markdown的功能。

  2. Officedown还提供生成ppt功能;Officedown也可以从bookdown生成word。
    生成ppt没实践过,从bookdown生成word可参考官方示例如下:

dir <- system.file(package = "officedown", "examples", "bookdown")
file.copy(dir, getwd(), recursive = TRUE, overwrite = TRUE)
rmarkdown::render_site("bookdown")
browseURL("bookdown/_book/bookdown.docx")

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351