Try   HackMD

快速上手數學報告(2) - Rmarkdown 教學

LATEX 學習曲線最陡之處,在於熟悉編排的樣板跟各種篇排設定、設定
LATEX
編輯器、脫離以往 Word 等所見即所得的 GUI 排版觀念三者並行才始得生產一篇像樣的文章。

這篇文章的想法,在於利用已打包成套的 R Studio,先跳過編輯器設定的學習,並使用較為直觀的 markdown 來接觸排版標記語言式的概念(此時已經能生產堪用之數學報告),之後再去學習

LATEX 語法。

需要安裝甚麼軟體? 做甚麼設定?

  • R - CRAN:R 語言的主程式,RStudio IDE 使用的主語言。
  • RStudio - RStudio.com:知名的 R 語言開源 IDE (整合開發環境),注意其免費範圍在非商業使用,商用仍須付費(不過官方目前沒在抓商用無授權就是了)。

安裝完兩個程式之後,我們透過直接建立一個新的 .Rmd 檔讓 RStudio 自行安裝並設定需要的 package

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

按下去後,會跳出視窗,現在我們要先接觸

LATEX 報告,先設定為 pdf;

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

第一次按下去後,會開始下載相關的 package,若失敗了,在 R console 下執行下列程式碼:

install.packages("rmarkdown")

如果沒有範本供選擇,則執行下列程式碼:

install.packages("devtools") # 如果以前沒有安裝 devtools
devtools::install_github("rstudio/rmarkdown") # 更新 rmarkdown 到最新版
devtools::install_github("rstudio/rticles")

Rmarkdown 編輯器介面

新檔案的視窗應該會長這樣:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

那我們要如何操作呢?可以先嘗試按按看 Knit 這個按鈕,程式會提示你先儲存,再幫你編譯這個檔案,輸出成 PDF。

工作流程

Created with Raphaël 2.2.0建立檔案要不加入程式碼開 chunk 撰寫程式碼並測試撰寫文本,調整 YAML需不需要增加程式碼編譯並輸出檔案(然後反覆修改)yesnoyesno

Rmarkdown 結構

這節有點冗餘,可以大概看過需要的,先玩玩看再說

新檔案內容應該會長這樣:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Rmarkdown 由三個部分組成:

Markdown

撰寫文本使用,基本上就是普通的 markdown 語法就可以了,其中若 markdown 語法不足,也可嘗試直接使用

LATEX 語法(不透過
LATEX
輸出會不支援
LATEX
語法)。

這邊複習一下:

# 1階標題
## 2階標題
### 3階標題
#### 4階標題
##### 5階標題
###### 6階標題

內文 *斜體* **粗體** ***粗體加斜體***

下一個段落的內文(空一行)
  下一個層級的內文(用兩個以上的空白分隔)
  同級內文不分行(同空格的不同行會被視為一個空白)
  
  同級內文分行(加上一個空行)
    再下一個層級的內文
    (這個空行的縮排規則似乎有 Bug,建議不要太常用)

- 無序項目
- 無序項目
	- 下一個層級無序項目
1. 有序項目(第一個可指定開始序號例如0.)
3. 除第一項不需要順序,編譯時電腦會幫你自動排序
	2. 下一個層級有序項目
	- 同層級無序項目(可以混編)

[連結文字](連結URL)
![圖片替代文字](圖片路徑)

$數學式$
$$數學公式$$

@bibtex關鍵字 (使用bibtex提及引用文獻)

|表格標題1|表格標題2|表格標題3|表格標題4|
|:---:| ---:|:--- | --- |
|置中  |靠右  |靠左 | 預設 |
(前兩行一定要有不然會擺爛給你看,故不能沒有標題列,
 也不能分行,很難用,故建議直接貼 LaTeX 表格    )
 
 ---
 上面這個是分隔線(在簡報輸出時可作為強制換頁)

Chunk

撰寫程式碼的地方,可用 Insert 按鈕設定:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

或是直接在編輯器裡打出這樣的內容:

```{使用程式語言代碼 Chunk名稱, Chunk參數名稱=Chunk參數設定, 下一個Chunk參數名稱=Chunk參數設定}
程式碼區域
​```

chunk 參數是設定程式碼在如何執行,或是執行後如何呈現到文件中,可透過 chunk 右方的三個小按鈕的第一個做設定:(三個小按鈕依序是設定、執行這個 chunk 之前所有的 chunk、執行這個 chunk,可以事先看看程式碼5執行成果)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

設定完後按 Apply 會自動幫你補齊參數設定。

若要一次設定所有 chunk 一些固定的參數,可以在整篇文件的最前面加上一個 chunk:

​```{r setup, include=FALSE} # include=FALSE 可讓此 chunk 單純執行
                            # 但不顯示程式碼,也不輸出程式結果,適合
                            # 設定或帶入一些 package
knitr::opts_chunk$set(Chunk參數名稱=Chunk參數設定, ...)
​```

SAS 怎麼辦?

假如要使用 SAS 在 Rmarkdown 裡面的話,可以使用 SASmarkdown Package,安裝方法是在 R console 下執行:

install.packages("SASmarkdown")

要使用 SAS 作為 chunk 語言,先在加入如下 chunk 程式碼:

​```{r setup, include=FALSE}
library(SASmarkdown)
saspath <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe" # 你電腦裡 SAS 的位置
sasopts <- "-nosplash -linesize 75" # 一些排版設定
knitr::opts_chunk$set(engine="sashtml", engine.path=saspath, 
                      engine.opts=sasopts, comment=NA) # 在每一個 chunk 預載以 SAS 執
                                                       # 行程式碼的指令
​```

請注意,SASmarkdown 視每個 chunk 為獨立的 SAS 程式碼,若不指定將輸出存在 liberary,就無法繼續使用資料,若要下方的 chunk 碼延續前方 chunk 的執行程式碼,需使用下列方法。

首先,設定用的 chunk 要多加一行 sas_collectcode() ,變成:

​```{r setup, include=FALSE}
library(SASmarkdown)
saspath <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe" # 你電腦裡 SAS 的位置
sasopts <- "-nosplash -linesize 75" # 一些排版設定
knitr::opts_chunk$set(engine="sashtml", engine.path=saspath, 
                      engine.opts=sasopts, comment=NA)
sas_collectcode() # setup
​```

之後需要被延續的程式碼,在 chunk 參數設定要加入 collectcode=TRUE 例如:

# 需要被下方執行程式碼
```{r DATAstep, collectcode=TRUE}
data class;
  set sashelp.class;
  bmi = 703*weight/height**2;
run;
```

# 會繼承上面的程式碼執行
```{r PROCstep}
proc means data=class;
  var bmi;
  run;
```

YAML

在檔案開頭用兩行 --- 夾在中間的區域,用來設定輸出的設定,初學時可以不用自己打,可透過如下操作設定:

按下後可以設定,詳細的 YAML 寫法可以參考:https://bookdown.org/yihui/rmarkdown/ 的第三章、第四章,下面談我們寫作業比較容易用到的:

--- # 初學不要碰這裡請用 output options 按出來就好
documentclass: LaTeX document class 寫這邊
# 除 documentclass 其他能用的 LaTeX 設定有:
# lang, fontsize, classoption, geometry,
# mainfont, sansfont, monofont, mathfont,
# linkcolor, urlcolor, citecolor
title: "標題寫這邊"
subtitle: "次標題寫這邊"
author: "作者寫這邊"
institute: "機構寫這邊"
date: "日期寫這邊"
url: "參考連結寫這邊"
bibliography: .bib的檔案路徑寫這邊 #假如有引文獻使用 BiBTeX 管理的方法
output:         # <- YAML 的寫法是用空白縮排跟冒號代表資料結構以這兩行
  pdf_document: #    為例,代表的是 output 下面的 pdf_document 設定
    toc: true # 需要章節表 
    includes: # 設定預載檔案
      in_header: .tex檔路徑 # 設定要透過 LaTeX 編譯時預載的表頭檔案
    keep_tex: yes # 設定是否保留 .tex 檔
    latex_engine: xelatex # 設定編譯使用的 LaTeX 引擎,若要打中文報告
                          # 必須使用 xelatex
    md_extensions: +header_attributes # 設定 markdown 語法外掛
    pandoc_args: --number-sections # 設定 markdown 轉 LaTeX 的規則
  html_document: # 輸出網頁時的設定
    toc: true # 跟上面一樣有些是共通的
    smart: no # 這是智慧整理縮排關掉的方式
    number_sections: true # 加上這個會有標題會有編號
  beamer_presentation: # 輸出beamer簡報時的設定
    slide_level: 2 # 預設等級多少的標題會被獨立成一張簡報
      theme: "Warsaw"                # 簡報版型主題設定
      colortheme: "whale"            # 簡報色彩主題設定
      fonttheme: "professionalfonts" # 簡報字體主題設定
      includes: # beamer_presentation 會繼承部分 pdf_document 的語法
        in_header: header.tex
---

中文要怎麼設定

假如以

LATEX 相關的輸出,需要先進行設定,首先我們要在 YAML 加入:

output:
  pdf_document:
    includes:
      in_header: 中文化表頭tex檔路徑
    latex_engine: xelatex # 才可以用 Uincode

其中使用 includes: in_header: 是要讓 Rmarkdown 轉

LATEX 時,在檔頭加入中文化相關的 userpackage 與設定,請新建立一個 .tex 檔,並加入如下程式碼:

% Set CJK
\usepackage{fontspec}
\usepackage{xeCJK}
\setCJKmainfont{標楷體} %設定中文為系統上的字型,而英文不去更動,使用原TeX字型
\XeTeXlinebreaklocale "zh"
\XeTeXlinebreakskip = 0pt plus 1pt %這兩行一定要加,中文才能自動換行

LaTeX 表格

同樣的,要讓 Rmarkdown 中直接使用

LATEX 表格語法,也要把相關 userpackage 載入到 header:

% For Latex Table
\usepackage{booktabs}
\usepackage{multirow}

小結 - 若你看太累想直接 End 的話

這篇文章大致把學統計會用到的數學報告工具提的差不多了,比起看完這篇,個人認為比較簡單的方式是直接裝好 RStudio 嘗試新建一個檔案,並自己把自己的作業寫上去,不會可以參考下面參考資料。

參考資料