博士生涯终于走到了最后一步了。这次全程用 R 和 Rmarkdown 相关的包完整写完了论文,现在总结一下个人经验和踩过的坑,希望给后来人提供参考经验,同时安利一下 Rmarkdown 这个提高生产力的工具。
选择 Rmarkdown 的理由
大部分大学的毕业论文对排版都着严格的排版要求,具体需要注意的细节可能有
-
图表要编号,并经常需要在文中交叉引用
-
引用文献,文中和文尾的参考文献格式需要注意
-
目录,图和表的目录
-
页眉页脚,字体字号行间距,标题副标题大小等等
个人感受而言,传统 Word 虽然易用,但所见即所得式的编辑模式会将作者很大一部分精力吸引到“排版”工作上,另外大部分论文插图较多,排版也很困难。而作为另一条路的 LaTeX 则功能强大然而语法复杂。LaTeX 将文本与排版结果分离,学习曲线陡峭。使用 LaTeX 颇有为码字而先修炼成排版工人的感觉。相比Word的上手容易精通难和 LaTeX 的复杂功能, 个人觉得Rmarkdown 易用性和功能性之间达到了较好的平衡。Rmarkdown 既可实现 LaTeX 完全相同的最终论文排版效果,同时 markdown 语法简单易上手,学习成本相较 LaTeX大为降低,直逼 Word 。另外,使用 Rmarkdown 还能生成 gitbook的电子书,相较pdf格式也有良好的在线阅读体验(见gitbook在线电子书版 https://tcgriffith.github.io/thesisdown_demo/_book/)。
值得一提的是用 Rmarkdown 写毕业论文并不适合所有人。如果读者有有一定折腾的极客精神,懂一点 R语言就更好了。
用 Rmarkdown 写论文 准备工作
首先我们需要安装 R 和 Rstudio 以及相关的包,具体包会在下面每一小节分别介绍。除此之外还需要 git/github 对文本源文件做版本控制,一个文本编辑器(我用的 sublime text),以及用 Zotero 作为文献库管理软件。
其次,毕业论文包含很多材料,我们将创建一个项目文件夹来管理图片,数据,论文文本,引用文献记录 (bib) 等资料。这个论文项目可以保存在本地和在线保存在 github,从而实现备份和跨电脑工作的目的。
论文框架
前人们创建了好多基于bookdown的毕业论文模板,并在 Github 上分享。个人推荐的是 thesisdown( https://github.com/ismayc/thesisdown)。它提供了基于 bookdown 的论文项目骨架,有助于快速地搭好框架。这样封面、目录、页眉页脚、引用文献等零碎的格式问题就基本搞定了。剩下的主要精力可以专注于码字上。
论文项目目录如下。其中,Rmd 文件即为章节文本,bib 和 csl 目录保存文献引用记录和引用格式(apa),data 和 figure 目录保存数据和插图,prelims 保存 Rmd 格式的简介和前言。reedthesis.cls 和 template.tex 是论文 LaTeX 模板,针对具体排版要求可能需要调整代码。
.
├── 01-chap1.Rmd
├── 02-chap2.Rmd
├── 03-chap3.Rmd
├── 04-conclusion.Rmd
├── 05-appendix.Rmd
├── 99-references.Rmd
├── bib
│ └── thesis.bib
├── _book
│ ├── thesis.pdf
│ └── thesis.tex
├── _bookdown.yml
├── chemarr.sty
├── csl
│ └── apa.csl
├── data
│ └── flights.csv
├── figure
│ ├── reed.jpg
│ └── subdivision.pdf
├── index.Rmd
├── prelims
│ ├── 00-abstract.Rmd
│ └── 00--prelim.Rmd
├── reedthesis.cls
├── template.tex
└── thesisdown_demo.Rproj
作图
专业的作图是学术写作的灵魂。如何用图来简明扼要地传达信息是现代科研工作的基本功。
因为主要用R做数据分析,我选择的R绘图包是大名鼎鼎的 ggplot2。在此推荐的另一个包是patchwork( https://patchwork.data-imaginist.com/): 它采用简单的语法实现将多个ggplot图拼接成大图。其他类似功能的包有 cowplot, gridExtra,但实际体验还是patchwork更为优雅强大。
制表
制表用的 kable: rmarkdown引擎knitr自带。配合的包有 kableextra( https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html)。可以实现表的标题,脚注,按行列分组等等功能。包的说明书写得非常详细,需要功能的时候对着查即可。
文献引用
Zotero( https://www.zotero.org/), zotero是在线文献管理工具,具体工作原理是创建账号之后就拥有了在线的文献库。装了zotero浏览器插件设置好之后看到文章即可将文献一键纳入收藏。这比起曾经用过的mendeley等工具方便了不少。而在R里也有相应的包与之匹配,也就是citr。
citr( https://github.com/crsh/citr)包的作用是在Rstudio里直接连zotero库就能直接插文献了。全程不用手动编辑.bib库或者手动维护引用索引。添加引用的完整过程就是:看论文->浏览器中用zotero将论文添加到库->在Rstudio里将光标定位到需要插入引用的地方,用citr插件的"insert citation"连接zotero库,插入添加的文献。
值得一提的是在Rstudio 1.4预览版中,Zotero管理的文献库将与Rstudio有更好的整合。无需安装额外包和配置即可在Rstudio里插入Zotero库中的文献,详情可参考官方文档( https://blog.rstudio.com/2020/11/09/rstudio-1-4-preview-citations/)。
最终效果展示:
论文repo
( https://github.com/tcgriffith/thesisdown_demo)
gitbook在线电子书版pdf版( https://github.com/tcgriffith/thesisdown_demo/blob/main/_book/thesis.pdf)
下面聊聊我在用Rmarkdown写毕业论文中碰到的实际问题。
如何与word选手合作
我碰到的第一个问题是:使用Rmarkdown写论文,如何与不懂Rmarkdown的合作者进行有效协作。更核心的是word强大的追踪修改的功能无法替代。
经过沟通尝试之后我最终做法还是在Rmarkdown里写好一个章节,直接复制Rmarkdown源文本进word发给导师,改完之后传回来我再改改复制进Rmarkdown生成pdf。
非R语言生成图片的显示问题
插入图片的markdown语法为 ![](path/of/image) 。但是在论文中的图需要控制长宽,需要有引用标签和标题等,最合适的办法是使用rmarkdown的knitr包自带函数 include_graphics 。这样可以用与R生成的图一样的设置来精确控制图片显示。示例代码为:
```{r, out.width = "400px"}
knitr::include_graphics( "path/to/image.png")
```
ggplot作图时标签,标注中的特殊字符
主要是公式的上标下标,在stack overflow上有丰富的案例可以参考。主要使用的是R的 expression 函数。
df <- data.frame(x = rnorm(10), y = rnorm(10))
temp <- expression( "Spearman's"~rho == 0.34)
ggplot(df, aes(x = x, y = y)) +
geom_point +
annotate( "text", x = mean(df $x), y = mean(df $y),
parse = T, label = as.character(temp))
效果:
后记
所谓工欲善其事必先利其器,科研工作者也需要像手艺人一样对工具仔细挑选和精研。但学校课程很少专门开课传授这方面的知识。本文介绍用Rmarkdown准备毕业论文以作为word, LaTeX以外的第三种选择,希望能对有类似需求的同路人有所帮助。
最后需要强调的是,工具只是“术”,要提高学术论文质量还是得修炼内功,安利一篇写好英语科技论文的诀窍( https://sparks-lab.org/blog/recipe-sci-paper/),祝诸君在学术之路上武运昌隆。
关于作者
张桐川,R语言爱好者,cosx三年水友,中国科学技术大学本硕,澳洲格里菲斯博士生,鹰派,佛系,入关人。
转自:统计之都
- 本文固定链接: https://maimengkong.com/learn/1057.html
- 转载请注明: : 萌小白 2022年6月28日 于 卖萌控的博客 发表
- 百度已收录