--- tags: LaTeX, markdown, R, 排版 --- # 快速上手數學報告(2) - Rmarkdown 教學 [TOC] $\LaTeX$ 學習曲線最陡之處,在於熟悉編排的樣板跟各種篇排設定、設定 $\LaTeX$ 編輯器、脫離以往 Word 等所見即所得的 GUI 排版觀念三者並行才始得生產一篇像樣的文章。 這篇文章的想法,在於利用已打包成套的 R Studio,先跳過編輯器設定的學習,並使用較為直觀的 markdown 來接觸排版標記語言式的概念(此時已經能生產堪用之數學報告),之後再去學習 $\LaTeX$ 語法。 ## 需要安裝甚麼軟體? 做甚麼設定? - R - [CRAN](https://cloud.r-project.org/):R 語言的主程式,RStudio IDE 使用的主語言。 - RStudio - [RStudio.com](https://www.rstudio.com/products/rstudio/download/):知名的 R 語言開源 IDE (整合開發環境),注意其免費範圍在非商業使用,商用仍須付費(不過官方目前沒在抓商用無授權就是了)。 安裝完兩個程式之後,我們透過直接建立一個新的 .Rmd 檔讓 RStudio 自行安裝並設定需要的 package ![](https://i.imgur.com/GxfxuaZ.png) 按下去後,會跳出視窗,現在我們要先接觸 $\LaTeX$ 報告,先設定為 pdf; ![](https://i.imgur.com/OHf4InP.png) > 第一次按下去後,會開始下載相關的 package,若失敗了,在 R console 下執行下列程式碼: > > ```R > install.packages("rmarkdown") > ``` > > 如果沒有範本供選擇,則執行下列程式碼: > > ```R > install.packages("devtools") # 如果以前沒有安裝 devtools > devtools::install_github("rstudio/rmarkdown") # 更新 rmarkdown 到最新版 > devtools::install_github("rstudio/rticles") > ``` ## Rmarkdown 編輯器介面 新檔案的視窗應該會長這樣: ![](https://i.imgur.com/FShHtHF.png) 那我們要如何操作呢?可以先嘗試按按看 Knit 這個按鈕,程式會提示你先儲存,再幫你編譯這個檔案,輸出成 PDF。 ### 工作流程 ```flow newfile=>start: 建立檔案 cot1=>condition: 要不加入程式碼 knit=>end: 編譯並輸出檔案(然後反覆修改) chunkot=>operation: 開 chunk 撰寫程式碼並測試 markdown=>operation: 撰寫文本,調整 YAML recode=>condition: 需不需要增加程式碼 newfile->cot1 cot1(yes)->chunkot->markdown cot1(no)->markdown markdown->recode recode(yes)->chunkot recode(no)->knit ``` ## Rmarkdown 結構 > 這節有點冗餘,可以大概看過需要的,先玩玩看再說 新檔案內容應該會長這樣: ![](https://i.imgur.com/C3EWLS1.png) Rmarkdown 由三個部分組成: ### Markdown 撰寫文本使用,基本上就是普通的 markdown 語法就可以了,其中若 markdown 語法不足,也可嘗試直接使用 $\LaTeX$ 語法(不透過 $\LaTeX$ 輸出會不支援 $\LaTeX$ 語法)。 這邊複習一下: ```markdown # 1階標題 ## 2階標題 ### 3階標題 #### 4階標題 ##### 5階標題 ###### 6階標題 內文 *斜體* **粗體** ***粗體加斜體*** 下一個段落的內文(空一行) 下一個層級的內文(用兩個以上的空白分隔) 同級內文不分行(同空格的不同行會被視為一個空白) 同級內文分行(加上一個空行) 再下一個層級的內文 (這個空行的縮排規則似乎有 Bug,建議不要太常用) - 無序項目 - 無序項目 - 下一個層級無序項目 1. 有序項目(第一個可指定開始序號例如0.) 3. 除第一項不需要順序,編譯時電腦會幫你自動排序 2. 下一個層級有序項目 - 同層級無序項目(可以混編) [連結文字](連結URL) ![圖片替代文字](圖片路徑) $數學式$ $$數學公式$$ @bibtex關鍵字 (使用bibtex提及引用文獻) |表格標題1|表格標題2|表格標題3|表格標題4| |:---:| ---:|:--- | --- | |置中 |靠右 |靠左 | 預設 | (前兩行一定要有不然會擺爛給你看,故不能沒有標題列, 也不能分行,很難用,故建議直接貼 LaTeX 表格 ) --- 上面這個是分隔線(在簡報輸出時可作為強制換頁) ``` ### Chunk 撰寫程式碼的地方,可用 Insert 按鈕設定: ![](https://i.imgur.com/jFL0ZCa.png) 或是直接在編輯器裡打出這樣的內容: ```R ​```{使用程式語言代碼 Chunk名稱, Chunk參數名稱=Chunk參數設定, 下一個Chunk參數名稱=Chunk參數設定} 程式碼區域 ​``` ``` chunk 參數是設定程式碼在如何執行,或是執行後如何呈現到文件中,可透過 chunk 右方的三個小按鈕的第一個做設定:(三個小按鈕依序是設定、執行這個 chunk 之前所有的 chunk、執行這個 chunk,可以事先看看程式碼5執行成果) ![](https://i.imgur.com/g3OeNkM.png) 設定完後按 Apply 會自動幫你補齊參數設定。 若要一次設定所有 chunk 一些固定的參數,可以在整篇文件的最前面加上一個 chunk: ```markdown ​```{r setup, include=FALSE} # include=FALSE 可讓此 chunk 單純執行 # 但不顯示程式碼,也不輸出程式結果,適合 # 設定或帶入一些 package knitr::opts_chunk$set(Chunk參數名稱=Chunk參數設定, ...) ​``` ``` #### SAS 怎麼辦? 假如要使用 SAS 在 Rmarkdown 裡面的話,可以使用 SASmarkdown Package,安裝方法是在 R console 下執行: ```R install.packages("SASmarkdown") ``` 要使用 SAS 作為 chunk 語言,先在加入如下 chunk 程式碼: ```R ​```{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 ​```{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` 例如: ~~~SAS # 需要被下方執行程式碼 ```{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 在檔案開頭用兩行 `---` 夾在中間的區域,用來設定輸出的設定,初學時可以不用自己打,可透過如下操作設定: ![](https://i.imgur.com/mFrIKC5.png) 按下後可以設定,詳細的 YAML 寫法可以參考:https://bookdown.org/yihui/rmarkdown/ 的第三章、第四章,下面談我們寫作業比較容易用到的: ```yaml --- # 初學不要碰這裡請用 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 加入: ```yaml output: pdf_document: includes: in_header: 中文化表頭tex檔路徑 latex_engine: xelatex # 才可以用 Uincode ``` 其中使用 `includes: in_header:` 是要讓 Rmarkdown 轉 $\LaTeX$ 時,在檔頭加入中文化相關的 userpackage 與設定,請新建立一個 `.tex` 檔,並加入如下程式碼: ```latex % Set CJK \usepackage{fontspec} \usepackage{xeCJK} \setCJKmainfont{標楷體} %設定中文為系統上的字型,而英文不去更動,使用原TeX字型 \XeTeXlinebreaklocale "zh" \XeTeXlinebreakskip = 0pt plus 1pt %這兩行一定要加,中文才能自動換行 ``` #### LaTeX 表格 同樣的,要讓 Rmarkdown 中直接使用 $\LaTeX$ 表格語法,也要把相關 userpackage 載入到 header: ```latex % For Latex Table \usepackage{booktabs} \usepackage{multirow} ``` ## 小結 - 若你看太累想直接 End 的話 這篇文章大致把學統計會用到的數學報告工具提的差不多了,比起看完這篇,個人認為比較簡單的方式是直接裝好 RStudio 嘗試新建一個檔案,並自己把自己的作業寫上去,不會可以參考下面參考資料。 ## 參考資料 - Rmarkdown 官方快查表:https://bookdown.org/yihui/rmarkdown/ - Rmarkdown 開發者寫的手冊 (非常詳細):https://bookdown.org/yihui/rmarkdown/ - 本文主要參考文本:http://www.learn-r-the-easy-way.tw/chapters/17 - SASmarkdown 部分參考文本:https://www.ssc.wisc.edu/~hemken/SASworkshops/sas.html#writing-sas-documentation