ถ้าจะสร้างเอกสารที่เป็น pdf ด้วย rmarkdown (จริงๆแล้วก็ต้องบอกว่า Knit) ใน RStudio ก็ต้องมี latex ติดตั้งลงบนเครื่องก่อน สำหรับท่านใดที่ตัดสินใจว่าจะลงผมแนะนำว่าให้ใช้ texlive ครับ และเพื่อตัดปัญหาว่าจะมีปัญหาเรื่อง package ต่างๆของ latex ผมแนะนำว่าก็ลงแบบทุกอย่างเลยแล้วกันครับ กินเนื้อที่ประมาณ 3 GB ครับ อีกอย่างจากประสบการณ์เราก็ไม่ค่อยอัพเดท latex กันบ่อยอยู่แล้ว แต่ถ้าคิดว่าเอาแค่เล็กๆก็พอ งั้นผมขอแนะนำ tinytex แล้วกันครับ วิธีติดตั้งก็ง่ายมาก ตามนี้เลยครับ
install.packages('tinytex')
tinytex::install_tinytex()
ผมใช้ rmarkdown สร้างเอกสารเป็น pdf อยู่บ่อยครั้งแต่ส่วนมากจะเป็นภาษาอังกฤษก็มีช่วงอาทิตย์ที่ผ่านมานี้ต้องทำเป็นภาษาไทยด้วย ก็เลยอยากแชร์อะไรบ้างครับ
code หลักๆ สำหรับให้ rmarkdown มันสร้างภาษาไทยเป็น pdf ได้ก็เพียง load package ที่จำเป็นสำหรับภาษาไทยใน latex ครับ โดยผมแนะนำว่าเพื่อความง่ายก็ขอให้เข้ารหัสสำหรับเอกสารหรือไฟล์ .Rmd เป็นแบบ Unicode หรือ UTF-8 ครับและก็ใช้ xelatex เป็นตัวโปรแกรมหลักสำหรับ latex ครับ เพราะมันใช้ได้ดีกับภาษาไทยและก็ไม่ต้องกังวลเรื่องการตัดคำครับเพราะมันสามารถทำได้กับภาษาไทยเราครับ ตัวอย่าง code อยู่ด้านล่างนี้ครับ หลักก็มีแค่ส่วนของ head-includes:
---
title: "ทดสอบ"
header-includes:
- \usepackage{xunicode}
- \usepackage{xltxtra}
- \defaultfontfeatures{Scale=MatchLowercase}
- \setmainfont[Scale=1.0]{Angsana New}
- \XeTeXlinebreaklocale "th"
- \XeTeXlinebreakskip = 0pt plus 1pt
output:
pdf_document:
latex_engine: xelatex
---
## R Markdown ภาษาไทย
อ ะ ไ ร สั ก อ ย่ า ง
มันต้องมีอะไรสักอย่างในจักรวาลนี้
ที่พลัดหลงไปจากมิติกาลเวลา
อะไรสักอย่างที่โคลัมบัสและยูลิซีสตกสำรวจ
อะไรสักอย่างที่นักดาราศาสตร์กรีกและอาหรับมิได้ค้นพบ
อะไรสักอย่างที่ศาสดาของโลกลืมเทศนาสั่งสอน
อะไรสักอย่างที่ขาดหายไประหว่างหลุมดำ
..
```{r cars}
summary(cars)
```
ผลลัพท์ที่ได้ก็ประมาณนี้ครับ

ส่วนใครที่ต้องการสร้างเอกสารแบบแปลกๆสวยๆ ผมอยากแนะนำให้ศึกษา latex เพิ่มครับ แล้วจะรู้ว่าใช้ rmarkdown สร้างเอกสารlatex สะดวกจริงๆ
###
มีคนถามมาว่าในกรณีที่ใช้ rmarkdown สร้างเอกสาร html ที่ chunk ของคำสั่ง r มีการ return ค่าที่เป็นภาษาไทย อย่างตัวอย่างด้านล่างนี้มันไม่มีข้อความอะไรออกมาเลย จะทำอย่างไรถึงแม้จะใช้ Sys.setlocate(locale=”Thai”) หรือ rmarkdown::render(“file.Rmd”,enconding = “UTF-8”) แล้วก็ตาม (กรณีใช้ R ใน Windows)

วิธีที่พอจะช่วยแก้ปัญหานี้ได้บ้างระหว่างรอการแก้จากผู้พัฒนาโดยตรงที่ผมแนะนำก็คือว่าแทนที่จะ ให้มัน return ภาษาไทยออกมา ก็ให้มัน return เป็นภาษาอังกฤษ แล้วค่อยแทนที่ภาษาอังกฤษนั้นด้วยภาษาไทยที่ต้องการในไฟล์ html ที่ถูกสร้างขึ้นมาโดยตรงลองดูตัวอย่างด้านล่างนี้ครับ
ในตัวอย่างนี้ข้อความที่จะแทนที่เป็นภาษาไทยถูกเก็บไว้อีกไฟล์ (“txt4replace.R”)
library(rmarkdown)
library(stringr)
writeoutput <- function(msg,filename) {
con <- file(filename, "w")
tryCatch({
cat(iconv(msg, to="UTF-8"), file=con, sep="\n")
},
finally = {
close(con)
})
}
ReplaceHTML <- function(filename,outfile) {
htmlcode <- readLines(filename, encoding = "UTF-8")
#read TH txt
source("txt4replace.R")
newhtmlcode <- str_replace_all(htmlcode,txt4replace )
writeoutput(msg = newhtmlcode,filename = outfile)
}
#generate html
render("myfile.Rmd")
#replace TH txt
suppressWarnings(ReplaceHTML("myfile.html","new_myfile.html"))
browseURL("new_myfile.html")
ตัวอย่างไฟล์ "txt4replace.R"
THtext <- c("ทดสอบ","โรงเรียน","เที่ยว")
Encoding(THtext) <- "UTF-8"
txt4replace<-c("Xtxt1" = THtext[1],
"Xtxt2" = THtext[2],
"Xtxt3" = THtext[3])
หรือจะใช้วิธีบังคับให้มันใช้ UTF-8 ตั้งแต่ตอน render เลยก็ได้เช่น
```{r}
enc <- function(txt,...) iconv(txt, to="UTF-8")
```
```{r, echo=FALSE, results='asis', render= enc}
fn ที่ return ภาษาไทย
```
Like this:
Like Loading...