-
Notifications
You must be signed in to change notification settings - Fork 2
/
chap_intro_bitpublish.qmd
1759 lines (1324 loc) · 69.1 KB
/
chap_intro_bitpublish.qmd
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# bitPublish 소개 {#sec-bitpublish}
```{r init, include=FALSE}
source(here::here("_extensions", "bit2r", "bitPublish", "init_environments.R"))
```
이 장에서는 \`bitPublish'의 활용을 위한 특장점과 기능을 소개합니다.
```{r}
#| echo: false
#| results: asis
titlebox_block("bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는 책을 저작할 수 있다.",
title = "학습 목표", theme = "bluejeans")
```
## Quarto 소개
### Quarto
`Quarto`[@posit2023quarto]\index{Quarto}는 오픈 소스의 과학 및 기술 출판 시스템으로 다음과 같은 기능을 제공합니다.[^intro-quarto]
[^intro-quarto]: https://quarto.org/
- `Jupyter` 노트북, `RStudio`를 사용하거나 선호하는 편집기로 마크다운 문서를 작성합니다.
- `Python`, `R`, `Julia` 및 `Observable`을 사용하여 동적 콘텐츠를 만듭니다.
- `HTML`, `PDF`, `MS Word`, `ePub` 등으로 재현 가능한 프로덕션 품질의 기사, 프리젠테이션, 웹 사이트, 블로그 및 책을 게시합니다.
- `Posit Connect`, `Confluence` 또는 기타 게시 시스템에 게시하여 조직 전체에서 지식과 통찰력을 공유합니다.
- 방정식, 인용, 상호 참조, 그림 패널, 콜아웃, 고급 레이아웃 등을 포함한 `팬독` 마크다운을 사용하여 작성합니다.
Quarto[@horst2022quartoarch]를 요약하자면 [@fig-quarto]처럼, Quarto 문서를 `knitr` 또는 `jupyter`\index{jupyter}로, `마크다운`(`Markdown`)\index{마크다운}\index{Markdown} 문서로 랜더링한 다음 `팬독`(`Pandoc`)\index{팬독}\index{Pandoc}에 의해 마크다운 문서를 HTML, PDF 또는 Word 문서를 비롯한 여러 출력 포맷으로 변환해주는 시스템입니다.
```{r}
#| label: fig-quarto
#| message: false
#| warning: false
#| echo: false
#| fig-align: "center"
#| out-width: "90%"
#| fig-cap: "Quarto 매커니즘, Allison Horst."
knitr::include_graphics(here::here("img", "b5217f2a-f129-4bf9-90dc-c5b9783d0ea8_rw_1920.png"))
```
### Quarto extensions
extensions은 Quarto의 동작을 수정하고 확장할 수 있는 방법을 제공하며, 다음과 같은 유형으로 구분합니다.[@posit2023extensions]
| 영문 유형 | 국문 유형 | 설명 |
|-------------------|-------------------|-----------------------------------------|
| Shortcodes | 단축 코드 | 다양한 유형의 콘텐츠를 생성하는 특수 마크다운 지시문. 예를 들어 짧은 코드를 만들어 문서에 트윗이나 동영상을 삽입 |
| Filters | 필터 | 새로운 전역 동작 또는 새로운 마크다운 렌더링 동작을 도입하기 위한 도구. 예를 들어 출력 접기, 이미지 슬라이더 등의 필터 제작 |
| Journal Articles | 저널 기사 | 마크다운으로 전문적인 저널 기사를 작성. LaTeX(PDF) 및 HTML 버전을 모두 생성할 수 있음 |
| Custom Formats | 맞춤 형식 | 문서 옵션, 템플릿, 스타일시트 및 기타 콘텐츠를 함께 묶어 새로운 출력 형식을 생성 |
| Revealjs Plugins | Revealjs 플러그인 | Revealjs로 만든 HTML 프레젠테이션의 기능을 확장 |
| Project Types | 프로젝트 유형 | 표준 콘텐츠와 옵션을 함께 묶는 새로운 프로젝트 유형을 만들거나, 사용자 지정 HTML 형식으로 웹 사이트 제작 |
| Starter Templates | 시작 템플릿 | 템플릿과 예제 콘텐츠를 제공하여 사용자가 새 프로젝트를 시작할 수 있도록 지원 |
### bitPublish
`bitPublish`\index{bitPublish}는 `Quarto` `extensions`\index{Quarto!extensions}로 R 기반으로 한글 책을 저작해 줍니다. 또한 한글 책 저작을 위한 예제 콘텐츠를 제공합니다. 그러므로 extensions 분류 상으로는 `맞춤 형식`, `시작 템플릿`으로 분류할 수 있습니다.
## bitPublish 소개
`Quarto`를 이용해서 책으로 만들 수 있는 포맷에는 `HTML`, `PDF`, `MS Word`, `EPUB`, `AsciiDoc`이 있습니다. `bitPublish`는 이중에서 `PDF` 포맷의 책을 생성합니다.
현재 bitPublish의 기본 설정에서는 `46배판` 판형을, 갖는 영어를 포함한 라틴계열 언어와 한국어, 중국어를 혼용한 책을 저작할 수 있습니다.
## 조판 설정
### 페이지 레이아웃
현재 bitPublish의 기본 페이지 레이아웃\index{페이지 레이아웃} 설정은 `46배판`\index{46배판}으로 설계되었습니다. `46배판` 판형은 용지의 크기가 188mm $\times$ 254mm입니다. 이 용지의 크기는 B5\index{B5} 사이즈이고 우리가 일반적으로 프린터 용지로 사용하는 A4\index{A4} 사이즈는 `국배판`\index{국배판}이라하며, 용지의 크기가 210mm $\times$ 217mm입니다.
`46배판` `판형`\index{판형}의 레이아웃 설정을 변경하려면, _extensions/bit2r/bitPublish/_extension.yml 파일의 다음 행들을 수정합니다. 이 설정은 `LaTeX`의 `geometry`\index{geometry} 패키지가 사용하는 레이아웃 설정 파라미터입니다.
```{yaml}
geometry: # 4x6 배판 도서를 위한 설정
### 이하 재단선이 없는 조판
# - paper=b5paper
- paperheight=257mm
- paperwidth=188mm
- top=25mm
- headsep=10mm
- bottom=30mm
- footskip=15mm
- left=25mm
- right=25mm
- centering
### 이하 재단선을 넣는 조판
# - paper=a4paper
# - layoutwidth=190mm
# - layoutheight=260mm
# - layouthoffset=10mm
# - layoutvoffset=18.5mm
# - showcrop
# - top=20mm
# - headsep=10mm
# - bottom=30mm
# - footskip=15mm
# - left=25mm
# - right=25mm
# - centering
```
#### A4 용지를 사용하는 경우
일반적으로 저작을 위해서는 프린터로 출력해서 이상여부를 확인하는 작업을 거치게 됩니다. 대중적으로 사용되는 A4 사이즈의 프린터 용지는 46배판보다 크기 때문에, 출력은 A4 사이즈에 출력하지만 실제로 만들어질 재단선(crop)\index{재단선}\index{crop} 마크를 출력해서 46배판 판형을 표시하기도 합니다. 앞의 `geometry` 패키지의 판형 설정 영역에서 주석으로 처리되는 영역이, A4 용지를 사용하는 경우를 예시한 것입니다.
#### A5 용지를 사용하는 경우
종이 출판을 위해서 원고를 넘길 때, 재단선이 없는 실제 46배판 크기의 결과를 요구하기도 합니다. 이 경우에는 앞의 geometry 패키지의 판형 설정 영역에서 주석처리 되지 않은 영역을 사용합니다.
여기서 중요한 것은, `국배판` $=$ A4, `46배판` $\approx$ B5의 관계[^paper]라는 점입니다. 그래서 `geometry` 설정에서 `paper`\index{paper}\index{geometry!paper} 설정이 아니라, `paperheight`\index{paperheight}\index{geometry!paperheight}, `paperwidth`\index{paperwidth}\index{geometry!paperwidth}를 사용했습니다.
그리고 물리적인 용지 크기와 판형의 크기가 동일하기 때문에 재단선 출력을 설정하는 `showcrop`\index{showcrop}\index{geometry!showcrop}을 설정하지 않았습니다.
#### 레이아웃 설정
`geometry` 패키지의 페이지 설정 파라미터는 [@fig-layout]\과 같습니다. 머리글과 바탕글 위치는 각각 `head`\index{head}\index{geometry!head}와 `foot`\index{foot}\index{geometry!foot}입니다. 그러므로 설정 시에는 `top`\index{top}\index{geometry!top}보다 `headsep`\index{headsep}\index{geometry!headsep}이 작아야 하고, `bottom`\index{bottom}\index{geometry!bottom}보다 `footskip`\index{footskip}\index{geometry!footskip}이 작아야 합니다. 즉, `top` 영역 안에 `headsep`이 포함되고, `bottom` 영역 안에 `footskip`이 포함되기 때문입니다.
출판 저작물을 생성하는 저자는, 현재 bitPublish의 기본 페이지 레이아웃을 참고해서 레이아웃을 정의하기 바랍니다.
```{r}
#| label: fig-layout
#| echo: false
#| out-width: "95%"
#| fig-align: "center"
#| fig-cap: "geometry 패키지의 레이아웃 설정 파라미터"
#| fig-pos: "htb!"
knitr::include_graphics("img/geometry.png")
```
[^paper]: 한국정기간행물햡동조합 홈페이지, http://kptc.or.kr/pds/paperstorys.html 참고
### 폰트 설정
bitPublish는 전자책이 아닌 종이에 출력되는 책의 저작을 목적으로 만들어졌기 때문에, 폰트의 선택에서 `TTF`(`True Type Font`)\index{TTF}\index{True Type Font}가 아닌 `OTF`(`Open Type Font`)\index{OTF}\index{Open Type Font}를 선택하였습니다.
#### 폰트 선정의 기준
- 출판 시 발생할 라이센스 이슈 제거
- **모든 폰트를 상업적으로 이용이 가능한 폰트로 선정**
- serif[^serif] 영어 폰트인 Times New Roman\index{Times New Roman} 저작권의 이슈
- 가독성이 뛰어난 범용적인 세리프체로 영문 에세이와 학위 논문의 표준 폰트로 자리잡았으나
- 상업용으로 쓸 땐 저작권 면책 조건을 확인해야 함
- sans-serif[^sans-serif] 영어 폰트인 Helvetica\index{Helvetica} 저작권의 이슈
- 대표적인 산세리프 글꼴로 20세기에 널리 쓰였음
- 출판 인쇄물의 미적 완성도
- 가독성, 심미성 등
#### 한국어 폰트
- serif 폰트:
- **KoPubWorld바탕체_Pro**
- sans-serif 폰트:
- **KoPubWorld돋움체_Pro**
#### 영어 폰트
- serif 폰트:
- Times New Roman 대체 폰트
- **STIX Two Text**
- sans-serif 폰트:
- **Nimbus Sans L**
#### 한자 폰트
- **KoPubWorld돋움체_Pro**
#### Mono space 폰트
- mono space 폰트
- **D2Coding**
- 영어/한국어 모두 동일한 폰트 사용
- 영어 mono space\index{mono space}와 한국어 mono space를 혼용하면 자간격이 틀어짐
#### Math 폰트
- STIX Two Math
#### R 그래픽스 이미지 폰트
- 한국어 폰트
- **나눔스퀘어**
- 영어 폰트
- **Nimbus Sans L**
[^serif]: serif 폰트는 바탕체 폰트를 의미합니다. 글자의 획에서 부리처럼 날카롭게 튀어나온 부분을 `세리프`(`serif`)\index{세리프}\index{serif}라 합니다. 영어는 `로만체`, 한국어의 경우에는 과거에 `명조체`라는 이름으로 통용되던 `바탕체`\index{바탕체} 서체를 의미합니다.
[^sans-serif]: serif 폰트는 `돋움체`\index{돋움체} 폰트를 의미합니다. 프랑스어로 sans는 "~가 없이"라는 뜻으로, `sans-serif`\index{sans-serif}는 세리프가 없는 서체입니다. 한국어의 경우에는 과거에 `고딕체`라는 이름으로 통용되던 `돋움체`\index{돋움체} 서체를 의미합니다.
#### 주의사항
모든 폰트는 \_extensions/bit2r/bitPublish/fonts 디렉토리에 위치합니다. 그래서 따로 설치할 필요도 없고, 이미 설치된 폰트도 중복으로 위치하게 됩니다. 그리고 `KoPubWorld바탕체_Pro`와 `KoPubWorld돋움체_Pro` 폰트를 사용하기 위해서는 `한국출판인회의` 홈페이지인 https://forms.gle/aQU7b3EoaF53zMKaA에 사용자 정보를 등록 후 무료로 사용하실 수 있습니다. 이 경우에는 https://www.kopus.org/wp-content/uploads/2021/04/서체_라이센스.pdf 페이지의 라이센스를 일독하시기 바랍니다.
### 머리글 바닥글
`머리글`(`header`)\index{머리글}\index{header}과 `바닥글`(`footer`)\index{바닥글}\index{footer}는 `fancyhdr`\index{fancyhdr} 패키지를 사용해서 정의하였습니다.
\_extensions/bit2r/bitPublish/_extension.yml 파일에 다음과 같이 설정되어 있습니다.
```{tex}
\usepackage{fancyhdr}
\pagestyle{fancy}
중간 생략
\fancyhf{}
\fancyhead[EL]{\changesize \numberfont --- bitPublish를 이용하여}
\fancyhead[OR]{\changesize \numberfont 한글 책 조판하기 ---}
\fancyfoot[EL]{{\pagefont\thepage}{\hskip4mm}{\changesize \leftmark}}
\fancyfoot[OR]{{\changesize \rightmark}{\hskip4mm}{\pagefont\thepage}}
```
만약에 머리글과 바닥글의 모양을 바꾸려면 직접 LaTeX 스크립트를 수정하면 됩니다. 책의 제목을 바꾸기 위해서는 `fancyhead`\index{fancyhead}의 `EL`\index{EL}과 `OR`\index{OR}을 변경하면 됩니다.
### 글줄 사이
줄간격, 행간 등으로 부르는 글줄 사이\index{글줄 사이}(line spacing\index{line spacing})는 1.5로 설정되었습니다. 수정이 필요하다면, _extensions/bit2r/bitPublish/bitPublish.tex 파일의 다음 행을 수정합니다.
```{tex}
%% 줄간격 정의
\linespread{1.5}
```
## bitPublish 서식 이용하기
bitPublish는 본문에서 예제, 연습문제, 주의, 정보, 인용 등을 표현할 수 있는 여러 LaTeX 서식을 지원합니다. 이 서식은 다음과 같은 구조의 LaTeX `환경`\index{환경}(`enviroment`\index{enviroment})으로 제공합니다.
```{tex}
\begin{enviroment name}[optional argument]{main argument}
text of enviroment
\end{enviroment name}
```
또한 다음과 같은 LaTeX `명령`(`command`)으로도 제공합니다.
```{tex}
\command name[optional argument]{main argument}
```
### 멀티 아웃 포맷
bitPublish 서식은 전자출판이 아닌, 종이로 된 서책의 출판을 염두에 둔 것이라서 LaTeX을 기반으로 서식을 정의합니다. 그러나 이 경우에는 종이 서책 출판을 위한 PDF 포맷은 지원하지만 전자책 위한 HTML 포맷을 지원하지 못하는 단점이 있습니다.
bitPublish 초기 버전에서 대부분의 서식은 LaTeX 출력을 지원하지만, 전자책을 위한 HTML 출력도 동시에 지원하는 `멀티 아웃 포맷`(`multiple output formats`)\index{멀티 아웃 포맷}\index{multiple output formats}으로 업그레이드하려 합니다.
### 사용자 정의 블록
bitPublish 서식의 대표적인 것에 `커스텀 블록`(`custom blocks`)\index{사용자 정의 블록}\index{custom blocks}[@xie2022rmcook]이 있습니다. 사용자 정의 블록은 보고서나 책의 일부 콘텐츠를 블록으로 정의하여 본문보다 돋보이게 하여 독자가 핵심 포인트를 쉽게 이해할 수 있도록 주목도를 높이는 서식입니다.
사용자 정의 블록은 `팬독`의 `fenced Div blocks` 기능을 사용합니다. 이 기능은 Div 블록을 HTML과 LaTeX 모두로 변환해줍니다.
다음의 `팬독` 사용자 정의 블록은,
```{md}
::: {.verbatim data-latex=""}
We show some _verbatim_ text here.
:::
```
LaTeX 출력일 경우에는 다음과 같이 변환하고,
```{tex}
\begin{verbatim}
We show some \emph{verbatim} text here.
\end{verbatim}
```
HTML 출력일 경우에는 다음과 같이 변환해 줍니다.
```{html}
<div class="verbatim">
We show some <em>verbatim</em> text here.
</div>
```
### 정보 블록
정보 블록\index{정보 블록}은 멀티 아웃 포맷을 지원하는데, 다음과 같은 네 개의 유형을 지원합니다. 네 개의 유형은 HTML과 LaTeX에서 우주 똑같은 모양은 아니지만, 거의 유사한 모습으로 출력됩니다.
- 정보
- information
- 주의
- caution
- 경고
- warning
- 팁
- tip
멀티 아웃 포맷을 지원하기 위한 `팬독` 사용자 정의 블록의 구문은 다음과 같습니다. 그리고 정보 블록에 들어갈 내용은 마크다운 문법으로 기술해야 합니다.
```{md}
::: {.infobox .<type> data-latex="{<type>}{<title>}"}
text of infobox
:::
```
#### 정보 블록
본문에서 서술하는 것보다 **유용한 정보**를 기술하는 데 사용하는 `정보`(`information`) `블록`\index{정보 블록!정보 블록} 블록은 다음처럼 사용합니다.
블록 청크의 옵션 중에 `data-latex`는 LaTeX에 전달하는 인수입니다. 정보(information)를 의미하는 .information와 {information}가 중복으로 기술된 것은, 멀티 아웃 포맷을 위한 것이므로 반드시 이 형식을 따라야 합니다.
```{md}
::: {.infobox .information data-latex="{information}{information의 용도}"}
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다.
:::
```
::: {.infobox .information data-latex="{information}{information의 용도}"}
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다.
:::
다음은 정보 블록에서 제목을 생략한 예제입니다.
```{md}
::: {.infobox .information data-latex="{information}{}"}
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다.
:::
```
::: {.infobox .information data-latex="{information}{}"}
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다..
:::
infobox를 팬독 블록으로 정의할 경우 HTML에서는 제목이 출력되지 않는 버그[^bug]가 있습니다. 이 경우에는 다음처럼 기술하면 재목이 출력되는 멀티 아웃 포맷이 가능합니다. 즉, 본문에서 제목을 표현하는 방법입니다.
[^bug]: 원인을 알고 있으나 저자의 웹 프로그래밍 기술적인 한계로 해결하지 못했음
```{md}
::: {.infobox .information data-latex="{information}{}"}
**information의 용도**
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다.
:::
```
::: {.infobox .information data-latex="{information}{}"}
**information의 용도**
information은 독자에게 전하고 싶은 정보나 아이디어를 기술하는 데 사용합니다.
짙은 회색 테두리에 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
환경의 내부에는 **Markdown**으로 문장을 기술합니다.
:::
또 하나의 방법은 bitPublish가 제공하는 사용자 정의 R 함수 custom\_block()를 사용하는 방법이 있습니다.
```{md}
custom_block(msg, type, title)
```
```{r init2, include=FALSE}
# source(here::here("_extensions", "bitPublish", "init_environments.R"))
source(here::here("_extensions", "bit2r", "bitPublish", "init_environments.R"))
```
이 방법도 멀티 아웃 포맷을 지원합니다. 다음과 같은 `knitr` 청크를 이용합니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
custom_block("
**information**은 본문에서 서술하는 것보다 **유용한 정보**를 기술하는 데 사용합니다.
파란색 테두리와 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
", title = "information의 용도", type = "information")
```
````
```{r}
#| echo: false
#| results: asis
custom_block("
**information**은 본문에서 서술하는 것보다 **유용한 정보**를 기술하는 데 사용합니다.
파란색 테두리와 정보를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
", title = "information의 용도", type = "information")
```
사용자 정의 함수인 custom\_block()를 사용하기 위해서는 사전에 다음처럼 init_environments.R 파일을 로드해야 합니다.
````md
```{r}`r ''`
#| label: init
#| include: false
source(here::here("_extensions", "bit2r", "bitPublish", "init_environments.R"))
```
````
#### 주의 블록
당부하고 싶은 **주의사항**을 기술하는 데 사용하는 `주의`(`caution`) `블록`\index{정보 블록!주의 블록}은 다음처럼 사용합니다.
```{md}
::: {.infobox .caution data-latex="{caution}{}"}
**caution의 용도**
**caution**은 당부하고 싶은 **주의사항**을 기술하는 데 사용합니다.
주황색 테두리에 주의를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
```
::: {.infobox .caution data-latex="{caution}{}"}
**caution의 용도**
**caution**은 당부하고 싶은 **주의사항**을 기술하는 데 사용합니다.
주황색 테두리에 주의를 나타내는 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
#### 경고 블록
주의사항보다 더 치명적인 문제를 야기할 **경고**를 기술하는 데 사용하는 `경고`(`warning`) `블록`\index{정보 블록!경고 블록}은 다음처럼 사용합니다.
```{md}
::: {.infobox .warning data-latex="{warning}{}"}
**warning의 용도**
**warning**은 주의사항보다 더 치명적인 문제를 야기할 **경고**를 기술하는 데 사용합니다.
붉은색 테두리에 폭탄을 표현한 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
```
::: {.infobox .warning data-latex="{warning}{}"}
**warning의 용도**
**warning**은 주의사항보다 더 치명적인 문제를 야기할 **경고**를 기술하는 데 사용합니다.
붉은색 테두리에 폭탄을 표현한 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
#### 팁 블록
유용하게 사용할 수 있는 **아이디어나 비법**을 설명하는 데 사용하는 `팁`(`tip`) `블록`\index{정보 블록!팁 블록}은 다음처럼 사용합니다.
```{md}
::: {.infobox .tip data-latex="{tip}{}"}
**tip의 용도**
**tip**은 유용하게 사용할 수 있는 **아이디어나 비법**을 기술하는 데 사용합니다.
초록색 테두리에 아이디어를 나타내는 전구 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
```
::: {.infobox .tip data-latex="{tip}{}"}
**tip의 용도**
**tip**은 유용하게 사용할 수 있는 **아이디어나 비법**을 기술하는 데 사용합니다.
초록색 테두리에 아이디어를 나타내는 전구 아이콘을 배치하여 주위를 환기시킵니다.
블록 내부를 채울 텍스트는 **Markdown 문법**으로 기술합니다.
:::
### 이야기 블록
이야기 블록은 저자가 독자에게 강조해서 하고 싶은 이야기나, 명사의 명언을 인용하여 이야기할 때 사용하는 블록으로 멀티 아웃 포맷을 지원합니다.
#### PDF 저작 전용
PDF 문서로만 저작할 경우에 사용하는데, `shadequote` 환경을 이용합니다. 이야기 블록 구문은 다음과 같습니다.
```{tex}
\begin{shadequote}[<alignment>]{<author>}
text of quote
\end{shadequote}
```
다음처럼 괄호를 비우면, 저자의 이야기를 표시합니다.
```{tex}
\begin{shadequote}{}
통상적으로 많은 사람들은 `수준을 등급의 높고 낮음을 의미하는 가치의 척도'로
인식하고 있다. 그러나 통계학계에서는 levels을 수준으로 직역하여 사용해 왔다.
혼동스럽다면, \textbf{수준을 범주형 데이터의 범주로 이해}하기 바란다.
\end{shadequote}
```
```{=tex}
\begin{shadequote}{}
통상적으로 많은 사람들은 `수준을 등급의 높고 낮음을 의미하는 가치의 척도'로
인식하고 있다. 그러나 통계학계에서는 levels을 수준으로 직역하여 사용해 왔다.
혼동스럽다면, \textbf{수준을 범주형 데이터의 범주로 이해}하기 바란다.
\end{shadequote}
```
명사의 명언을 인용하여 이야기할 경우에는 화자의 이름을 첫째 괄호에 기입합니다. 이 예제는 화자의 이름을 오른쪽 정렬하였습니다. 정렬은 l, c, r로 표기합니다. 각각 왼쪽, 가운데, 오른쪽 정렬을 의미합니다.
```{tex}
\begin{shadequote}[r]{안창호}
진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.
\end{shadequote}
```
```{=tex}
\begin{shadequote}[r]{안창호}
진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.
\end{shadequote}
```
#### HTML 저작 전용
HTML 문서로만 저작할 경우에 사용하는데, `blockquote` 태그를 이용합니다. 이야기 블록 구문은 다음과 같습니다.
```{html}
<blockquote class="otro-blockquote">
text of quote
<span>author</span>
</blockquote>
```
다음과 같이 기술하며, 화자의 이름의 정렬을 지원하지 않습니다. 왼쪽 정렬로 출력됩니다.
```{html}
<blockquote class="otro-blockquote">
진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.
<span>안창호</span>
</blockquote>
```
```{=html}
<blockquote class="otro-blockquote">
진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.
<span>안창호</span>
</blockquote>
```
#### 멀티 아웃 포맷
멀티 아웃 포맷을 지원하는 구문은 다음과 같습니다. `align`은 PDF 저작에서만 동작합니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
quote_block("
text of quote
", speaker = author, align = align)
```
````
앞의 안창호 선생님의 명언을 이용하는 방법은 다음과 같습니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
quote_block("진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.",
speaker = "안창호", align = "right")
```
````
```{r}
#| echo: false
#| results: asis
quote_block("진실은 반드시 따르는 자가 있고, 정의는 반드시 이루는 날이 있다.",
speaker = "안창호", align = "right")
```
저자의 이야기는 다음처럼 표현합니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
quote_block("통상적으로 많은 사람들은 '수준을 등급의 높고 낮음을 의미하는 가치의
척도'로 인식하고 있다. 그러나 통계학계에서는 levels을 수준으로 직역하여 사용해 왔다.
혼동스럽다면, 수준을 범주형 데이터의 범주로 이해하기 바란다.")
```
````
```{r}
#| echo: false
#| results: asis
quote_block("통상적으로 많은 사람들은 '수준을 등급의 높고 낮음을 의미하는 가치의 척도'로
인식하고 있다. 그러나 통계학계에서는 levels을 수준으로 직역하여 사용해 왔다.
혼동스럽다면, 수준을 범주형 데이터의 범주로 이해하기 바란다.")
```
### 타이틀 박스
앞의 예제에서 `학습목표'를 정의한 블록 서식을 타이틀 박스라 부르겠습니다. 여러 용도로 사용될 수 있어 목적으로 이름을 특정할 수 없기 때문입니다. 학습 시나리오, 학습의 목표, 뭐든 상관없습니다.
타이틀 박스도 멀티 아웃 포맷을 지원합니다.
#### PDF 저작 전용
PDF 문서로만 저작할 경우에 사용하는데, `titlebox` 명령을 이용합니다. 타이틀 박스 블록 명령은 다음과 같으며, 블록의 내부를 채울 색상 테마를 지정합니다.
```{tex}
\titlebox}{text of title}{color theme}{text of box}
```
다음은 학습목표를 설명하는 용도로 타이틀 박스 블록을 사용한 예제입니다.
```{tex}
\titlebox{학습 목표}{Cbluejeans}{bitPublish가 제공하는 기능을 이해하고,
bitPublish을 이용해서 원하는 책을 저작할 수 있다.}
```
```{=tex}
\titlebox{학습 목표}{Cbluejeans}{bitPublish가 제공하는 기능을 이해하고,
bitPublish을 이용해서 원하는 책을 저작할 수 있다.}
```
`Cbluejeans'는 색상을 지정하기 위한 컬러입니다. 프리엠블에서 미리 지정해 놓은 컬러에는 다음과 같은 것을 사용할 수 있습니다. 이름과 이름에 해당하는 RGB값입니다.
```{=tex}
\begin{itemize}
\item Cgrapefruit
\begin{itemize}
\item \textcolor{Cgrapefruit}{\#DA4453}
\end{itemize}
\item Cbittersweet
\begin{itemize}
\item \textcolor{Cbittersweet}{\#E95546}
\end{itemize}
\item Csunflower
\begin{itemize}
\item \textcolor{Csunflower}{\#F6BA59}
\end{itemize}
\item Cgrass
\begin{itemize}
\item \textcolor{Cgrass}{\#8BC163}
\end{itemize}
\item Cmint
\begin{itemize}
\item \textcolor{Cmint}{\#34BC9D}
\end{itemize}
\item Caqua
\begin{itemize}
\item \textcolor{Caqua}{\#3BB0D6}
\end{itemize}
\item Cbluejeans
\begin{itemize}
\item \textcolor{Cbluejeans}{\#4B8AD6}
\end{itemize}
\item Clavander
\begin{itemize}
\item \textcolor{Clavander}{\#977BD5}
\end{itemize}
\item Cpinkrose
\begin{itemize}
\item \textcolor{Cpinkrose}{\#D870A9}
\end{itemize}
\item Clight
\begin{itemize}
\item \textcolor{Clight}{\#E6E9ED}
\end{itemize}
\item Cnight
\begin{itemize}
\item \textcolor{Cnight}{\#434A53}
\end{itemize}
\item Cgray
\begin{itemize}
\item \textcolor{Cgray}{\#AAB2BC}
\end{itemize}
\end{itemize}
```
#### HTML 저작 전용
HTML 문서로만 저작할 경우에 사용하는데, `titlebox` 태그를 이용합니다. 타이틀 박스 블록 구문은 다음과 같습니다.
```{md}
<titlebox class="color theme 클래스">
<h4><span class="color of title">text of title</span></h4>
<p>text of box</p>
</titlebox>
```
다음과 같이 기술하며, 타이틀 색상과 블록의 테두리를 채울 색상 테마를 지정합니다.
```{html}
<titlebox class="bluejeans">
<h4><span class="Cbluejeans">학습목표</span></h4>
<p>bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는 책을
저작할 수 있다.</p>
</titlebox>
```
```{=html}
<titlebox class="bluejeans">
<h4><span class="Cbluejeans">학습목표</span></h4>
<p>bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는 책을
저작할 수 있다.</p>
</titlebox>
```
#### 멀티 아웃 포맷
멀티 아웃 포맷을 지원하는 구문은 다음과 같습니다. `theme` 인수로 HTML과 PDF에서의 타이클 박스 블록의 색상을 정의합니다.
그러나 블록의 모양과 색상의 표현은 두 포맷에서 상이합니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
titlebox_block("text of box", title = "text of title", theme = "color theme")
```
````
앞의 학습 목표 예제는 다음과 같이 기술합니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
titlebox_block("bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는
책을 저작할 수 있다.", title = "학습목표", theme = "bluejeans")
```
````
```{r}
#| echo: false
#| results: asis
titlebox_block("bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는 책을 저작할 수 있다.",
title = "학습목표", theme = "bluejeans")
```
색상과 타이블 제목을 바꿔봅니다.
````md
```{r}`r ''`
#| echo: false
#| results: asis
titlebox_block("bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는
책을 저작할 수 있다.", title = "이 장을 마치면", theme = "lavander")
```
````
```{r}
#| echo: false
#| results: asis
titlebox_block("bitPublish가 제공하는 기능을 이해하고, bitPublish을 이용해서 원하는 책을 저작할 수 있다.",
title = "이 장을 마치면", theme = "lavander")
```
### 예제
Quarto에서 제공하는 `정리`(`theorems`)\index{정리}\index{theorems}의 변형을 이용합니다. 이 방법은 아주 심플하고 멀티 아웃 포맷과 크로스-레퍼런스까지 지원합니다. 다만 이전에 LaTeX으로 구현한 서식이 있는 블록보다 너무 평범해서 본문에서 두드러지지는 않습니다. 그러나 문법이 쉽고 불필요한 카운터의 정의가 필요없기 때문에, bitPublish는 이 방법을 표준으로 정했습니다.
다음과 같이 사용합니다.
- `#exr-label`은 예제를 알려주는 지시자이면서,
- 크로스-레퍼런스에 사용될 라벨입니다.
- `title of exercise`는 예제의 타이틀입니다.
- 만약 예제의 타이틀을 사용하지 않는다면 기술하지 않습니다.
- `text of exercise`는 예제의 본문입니다.
```{md}
::: {#exr-label}
### title of exercise
text of exercise
:::
```
::: {.infobox .warning data-latex="{warning}{}"}
**라벨 접두어**
예제가 정상적으로 동작하기 위해서는 라벨을 정의할 때, 반드시 접두어 **exr-**을 사용해야 합니다.
:::
다음은 타이틀을 포함한 예제입니다.
```{md}
::: {#exr-bitformat}
### bitPublish 서식 예제
bitPublish의 서식 중에서 예제, 연습문제, 주의, 정보, 인용을 만들어 보아라.
:::
```
::: {#exr-bitformat}
### bitPublish 서식 예제
bitPublish의 서식 중에서 예제, 연습문제, 주의, 정보, 인용을 만들어 보아라.
:::
다음은 타이틀을 제외한 예제입니다.
```{md}
::: {#exr-bitformat2}
bitPublish의 서식 중에서 예제, 연습문제, 주의, 정보, 인용을 만들어 보아라.
:::
```
::: {#exr-bitformat2}
bitPublish의 서식 중에서 예제, 연습문제, 주의, 정보, 인용을 만들어 보아라.
:::
라벨을 레퍼런스하는 방법은 다음과 같습니다.
```{md}
[@exr-bitformat]에서 연습한 bitPublish의 서식은 반드시 숙지하시기 바랍니다.
```
[@exr-bitformat]에서 연습한 bitPublish의 서식은 반드시 숙지하시기 바랍니다.
### 연습문제
연습문제는 현재 멀티 아웃 포맷을 지원하지 않습니다. PDF 아웃 포맷만 지원하기 때문에, 어느정도 LaTeX애 대한 지식이 필요합니다.
#### LaTeX 환경
기술서나 학습서의 경우에는 연습문제를 제공하는 경우가 많습니다. bitPublish에서 연습문제 서식은 `Exercise` 환경을 이용합니다.
```{tex}
\begin{Exercise}
text of exercise
\end{Exercise}
```
또한 연습문제의 해답 서식은 `Answer` 환경을 이용합니다.
```{tex}
\begin{Answer}
text of answer
\end{Answer}
```
#### tasks 환경
또한 연습문제의 내용을 위해서 `tasks` 환경과 `task`\index{tasks} 명령을 사용할 수 있습니다. 4지선다형의 객관식에 유용하게 사용할 수 있습니다.
다음 예제는 4지선다형의 객관식 문제의 예시입니다. 각 문항은 아라비아 숫자로 표현하게 됩니다.
```{tex}
\noindent 1. 다음 중에서 tidyverse에 포함되지 않는 패키지는 무엇인가?
\begin{tasks}[label=(\arabic*)](1)
\task dplyr
\task ggplot2
\task tidyr
\task dlookr
\end{tasks}
```
이 LaTeX 스크립트는 다음과 같이 조판됩니다.
```{=tex}
\noindent 1. 다음 중에서 tidyverse에 포함되지 않는 패키지는 무엇인가?
\begin{tasks}[label=(\arabic*)](1)
\task dplyr
\task ggplot2
\task tidyr
\task dlookr
\end{tasks}
```
#### Verbatim 환경
연습문제나 연습문제의 해답에 R 스크립트와 같은 프로그램 코드를 사용할 수 있습니다. 이 경우에는 `Verbatim` 환경을 사용하면 좋습니다.
다음 예제는 간단한 R 스크립트로 글자 색상이나 크기를 지정할 수 있습니다.
```{tex}
\begin{Verbatim}[fontsize=\small,formatcom=\color{black}]
if(!require("ragg")){
install.packages("ragg")
library("ragg")
}
\end{Verbatim}
```
이 LaTeX 스크립트는 다음과 같이 조판됩니다.
```{=tex}
\begin{Verbatim}[fontsize=\small,formatcom=\color{black}]
if(!require("ragg")){
install.packages("ragg")
library("ragg")
}
\end{Verbatim}
```
#### 연습문제 설정
연습문제는 다음과 같이 두 가지 설정을 사용자가 선택할 수 있습니다.
- 연습문제 헤더의 넘버링
- 장(chapter)에 한 번의 연습문제를 사용할 경우의 넘버링
- "1장. 연습문제"
- 장(chapter)에 여러 번의 연습문제를 사용할 경우의 넘버링
- 넘버링은 {장 번호}.{절 번호}의 형식을 따름
- "1.1 연습문제"
- 연습문제 헤더의 이름
- {넘버링} {이름}의 형식으로 기본 이름 설정은 "연습문제"임
- "1장. 연습문제"
- 이름 설정을 "Exercise"로 설정하면, 다음과 같이 출력됨
- "1장. Exercise"
다음은 헤더의 넘버링을 장에 여러 번 연습문제를 사용하는 예시입니다. `chapterexerlevel`의 값을 `false`로 지정했기 때문입니다. 만약 이 값을 `true`로 지정하면 장에 한 번의 연습문제를 사용하는 형식이 됩니다.
`Exercise` 환경에서 `label`은 반드시 지정해야 합니다. 이 라벨은 연습문제의 해답 페이지에 연습문제가 있는 페이지로 하이퍼링크를 생성할 때 크로스-레퍼런스로 사용됩니다. 이 예제에서는 `label`을 `exerbitpublish`로 지정했습니다.
```{tex}
\setboolean{chapterexerlevel}{false}
\begin{Exercise}[label={exerbitpublish}, name={Exercise}]
text of exercise
\end{Exercise}
```
`chapterexerlevel`의 값이 `true`인 연습문제 헤더의 넘버링은 [@fig-chapter]\와 같이 출력됩니다.
```{r}
#| label: fig-chapter
#| echo: false
#| out-width: "90%"
#| fig-align: "center"
#| fig-cap: "장에 한 번 연습문제를 사용하는 예시"
#| fig-pos: "htb!"
knitr::include_graphics("img/chapter_header.png")
```
`chapterexerlevel`의 값이 `false`인 연습문제 헤더의 넘버링은 [@fig-section]\와 같이 출력됩니다.
```{r}
#| label: fig-section
#| echo: false
#| out-width: "90%"
#| fig-align: "center"
#| fig-cap: "장에 여러 번 연습문제를 사용하는 예시"
#| fig-pos: "htb!"
knitr::include_graphics("img/section_header.png")
```
다음은 헤더의 이름을 `Exercise`로 지정하는 예시로 [@fig-section2]\와 같이 출력됩니다.
```{tex}
\setboolean{chapterexerlevel}{false}
\begin{Exercise}[label={exerbitpublish}, name={Exercise}]
text of exercise
\end{Exercise}
```
```{r}
#| label: fig-section2
#| echo: false
#| out-width: "90%"
#| fig-align: "center"
#| fig-cap: "헤더 이름을 변경한 예시"
#| fig-pos: "htb!"
knitr::include_graphics("img/section_header2.png")
```
#### 연습문제 해답 설정
연습문제는 다음과 같이 세 가지를 설정해야 합니다.
- 장(chapter)에 처음 나타나는 연습문제의 해답 여부
- `firstanswerofthechapter`을 `true` 혹은 `false`로 설정
- `true`이면 장 정보를 출력하고,
- `false`이면 장 정보를 출력하지 않는다.
- 장(chapter)의 이름(제목) 설정
- 연습문제 해답에 정보로서의 장 제목을 출력하기 위해서,
- `AnswerChapter` 명령에 해당 장의 라벨을 설정해줌
- 해당 연습문제의 라벨정보 설정
- 해답 위치에서 연습문제로 하이퍼 링크를 연결해 주기 위한 크로스-레퍼런스
- `ref` 인수에 라벨정보 할당
다음은 연습문제 헤더 정보에 장의 정보를 출력합니다. `firstanswerofthechapter`의 값을 `true`로 지정했기 때문입니다. 만약 이 값을 `false`로 지정하면 장 정보를 출력하지 않고 해답을 출력해 줍니다. 중요한 것은 `Answer` 환경이 끝난 위치에 `firstanswerofthechapter`의 값을 `false`로 초기화해야 한다는 것입니다.
또한 `AnswerChapter` 명령에는 연습문제가 포함된 장의 라벨인 `sec-bitpublish`를 지정했습니다.
`Answer` 환경에서 `label`은 반드시 지정해야 합니다. 이 라벨은 연습문제의 해답 페이지에 연습문제가 있는 페이지로 하이퍼링크를 생성할 때 크로스-레퍼런스로 사용됩니다. 이 예제에서는 `label`을 `exerbitpublish`로 지정했습니다.
```{tex}
\renewcommand{\AnswerChapter}{\nameref{sec-bitpublish}}
\setboolean{firstanswerofthechapter}{true}
\begin{Answer}[ref={exerbitpublish}]
text of answer
\end{Answer}
\setboolean{firstanswerofthechapter}{false}
```