RMarkdown 轉成 pdf 中文字型問題

Rmarkdown 轉成 pdf 預設會有中文無法顯示的問題(這是因為 knitr 使用 pandoc 轉換成 tex,再用 pdflatex 轉成 pdf)。目前的解法是在 rmarkdown 的 header 加上以下的參數

--
header-includes:
- \usepackage{fontspec} # 使用 fontspec package
- \usepackage{xeCJK}    # 使用 xeCJK package
- \setCJKmainfont{Songti TC} # 指定主要的字型,windows 使用者可用「標楷體」、「新細明體」,或是依照您安裝的字型名稱輸入
output: 
  pdf_document: 
    keep_tex: yes # 保留 tex 檔,萬一出了問題,可以手動檢查並重新編譯
    latex_engine: xelatex # latex 引擎設定為 xelatex
--

之後用 knitr 就會有正常的中文顯示 pdf 了

廣告

在 R 裡頭使用中文字型

(這個適用於 Mac 或是 GNU/Linux, *BSD 的使用者)

R 的繪圖功能十分強大,但美中不足的是在繪圖若要使用非西歐字母的 multibyte 字元時會無法顯示,這是因為字型的關係,因此我們可以在設定中使用 par 來設定字型(這裡預設使用 Noto Sans 字型,可以免費下載),例如使用 “Noto Sans T Chinese” :

par(family='Noto Sans T Chinese')

但是如果要輸出成 png, pdf 等格式的話,上述的參數不適用,因為 par() 只能夠針對 R 預設的 graphical device 輸出。所以我們可以安裝 R 的 cairo 套件。Cairo 是一套繪製 2D 圖型的 library,亦支援字型繪製,R 安裝 cairo library

install.packages(“cairo”)

接下來就可以設定一般的字型或粗體字

CairoFonts(regular = "Noto Sans T Chinese:style=Light", bold = "Noto Sans T Chinese:style=Regular")

最後在輸出圖之前,使用 Cairo() 設定輸出的細節,type 代表輸出圖片的格式,例如 png, pdf, jpg 等:

Cairo(1600, 1600, file=filename, type="png", bg="white", dpi=300)

#繪圖的指令

dev.off()