-
Notifications
You must be signed in to change notification settings - Fork 0
/
comp_doc_pdf.Rmd
132 lines (105 loc) · 3.91 KB
/
comp_doc_pdf.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
---
layout: page
title: "Computational Document"
subtitle: "$\LaTeX$ `PDF` 문서"
author:
name: 이광춘 (KPMG)
affilates: 데이터 과학자
always_allow_html: yes
date: "`r Sys.Date()`"
output:
html_document:
toc: yes
toc_float: true
highlight: tango
number_section: true
code_folding: show
mainfont: NanumGothic
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, message=FALSE, warning=FALSE,
comment="", digits = 3, tidy = FALSE, prompt = FALSE, fig.align = 'center')
library(reticulate)
use_condaenv("anaconda3")
# reticulate::repl_python()
```
# `tinytex` 팩키지 설치 {#install-tinytex}
[`TinyTeX`](https://yihui.org/tinytex/)는 Tex Live에 기반하여 R에서 $\LaTeX$을 윈도우의 경우 220Mbyte, 맥/리눅스의 경우 150MByte까지 작은 크기로 만들어서 PDF 파일을 생성할 수 있도록 만들었다.
다음 명령어로 `tinytex`를 쉽게 설치할 수 있다. `tinytex::uninstall_tinytex()` 명령어는 제거할 때 사용한다.
```{r install-tinytex, eval = FALSE}
install.packages('tinytex')
tinytex::install_tinytex() # tinytex::uninstall_tinytex()
```
# `.tex` 헬로월드 {#install-tinytex-hello-world}
`tinytex` PDF 엔진으로 세가지가 있는데, 한글을 사용하시는 CJK 문화권은 `xelatex()`를 권장한다.
- `tinytex::pdflatex()`
- `tinytex::xelatex()`
- `tinytex::lualatex()`
```{r tinytex-helloworld, eval = FALSE}
writeLines(c(
'\\documentclass{article}',
'\\begin{document}', 'Hello world!', '\\end{document}'
), 'test.tex')
tinytex::pdflatex('test.tex')
```
# `.Rmd` → `.pdf` {#rmarkdonw-to-pdf}
`tinytex`를 설치한 후에 `output:`에서 `latex_engine: xelatex`로 지정하고, `pandoc_args`를 지정하여 PDF 파일을 하나로 만든다. 마지막으로 잊지 말아야 할 것이 `mainfont : NanumGothic`로 한글 폰트를 잊지말고 꼭 지정한다.
```{r yaml-header, eval = FALSE}
---
layout: page
title: "Computational Document"
subtitle: "$\LaTeX$ `PDF` 문서"
author:
name: 이광춘 (KPMG)
affilates: 데이터 과학자
date: "`r Sys.Date()`"
always_allow_html: yes
output:
pdf_document :
latex_engine : xelatex
pandoc_args:
- --standalone
mainfont : NanumGothic
editor_options:
chunk_output_type: console
---
```
`output: pdf_document` 설정으로 `.pdf` 파일이 깔끔하게 나왔다. 한글도 정상적으로 잘 적용되었고 원하는 바로 나타왔지만, `ggplot`에 적용된 한글은 깨져있다.
```{r pdf-images}
library(pdftools)
library(magick)
```
<div class = "row">
<div class = "col-md-6">
**첫번째 페이지**
```{r pdf-images-hangul}
pdf_01 <- pdf_render_page("tutorial/01_rmarkdown/bmi_pdf.pdf", page = 1, dpi = 300, numeric = FALSE)
image_read(pdf_01)
```
</div>
<div class = "col-md-6">
**그래프 한글이 포함된 페이지**
```{r pdf-images-ggplot}
pdf_03 <- pdf_render_page("tutorial/01_rmarkdown/bmi_pdf.pdf", page = 3, dpi = 300, numeric = FALSE)
image_read(pdf_03)
```
</div>
</div>
만약 `ggplot` 객체로 그대로 `pdf`엔진에 넣으면 한글이 깨지기 때문에 이를 해결하는 방식으로 `cairo_pdf` 혹은 `png` 디바이스를 사용하면 피해갈 수 있다. 즉, 다음과 같이 `dev="cairo_pdf"`을 지정해주면 된다. [^pdf-ggplot]
[^pdf-ggplot]: [stackoverflow, "RMarkdown not printing Chinese characters in graphs"](https://stackoverflow.com/questions/50957257/rmarkdown-not-printing-chinese-characters-in-graphs)
````
`r ''````{r bmi-EDA-viz, dev="cairo_pdf"}
library(extrafont)
loadfonts()
bmi_df %>%
gather(키체중, 값, -Gender, -Index) %>%
ggplot(aes(x=Index, y= 값, fill=Gender)) +
geom_boxplot(show.legend = FALSE) +
facet_grid(키체중 ~ Gender, scales="free") +
labs(x="", y="",
title="성별, 비만구분에 따른 키와 몸무게") +
theme_bw(base_family="NanumGothic")
```
````