-
Notifications
You must be signed in to change notification settings - Fork 6
/
quarto3.qmd
523 lines (380 loc) · 28.3 KB
/
quarto3.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
---
resources:
- "reveal_demo/beamer/index.pdf"
---
# Quarto [スライド] {#sec-quarto3}
## YAMLヘッダー
まず、簡単なスライドから作ってみよう。適宜プロジェクトを作成し、File > New File > Quarto Presentationを選択する。表示されるダイアログでUse visual markdown editorのチェックを**外し**、Createをクリックする。Quarto PresentationとQuarto Documentの違いは、YAMLヘッダーの内容であり、`.qmd`ファイルを使うという点では同じだ。もう少し具体的に言うと、`format: html`が`fotmat: revealjs`に代わり、サンプルがスライドの例になっている程度だ。極めて単純なスライドじゃない限り、どうせYAMLヘッダーを大幅に修正することになるので、Quarto Documentを選択しても良い。
続いて、YAMLヘッダーをとりあえず以下の内容で置き換えてから保存し、レンダーしてみよう。スライドを全体画面で表示する場合はキーボードの{{< kbd F >}}キー(**F**ull screen)を押せば良い。
:::{.panel-tabset}
## コード
```{.yaml}
---
title: "ほとんど無害な『私たちのR』"
subtitle: "『私たちのR』をR教の聖典にすべき"
date: "2024/6/22"
author: "<ruby>羽鳥<rt>ハドリー</rt></ruby>ウィッカム"
institute: "整然大学"
format:
revealjs:
width: 1600
height: 900
slide-number: true
footer: <https://www.jaysong.net/RBook/>
theme: white
---
```
## 結果
```{=html}
<iframe class="slide-deck" src="reveal_demo/01/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
ここでは`revealjs:`以降の項目について説明する。まず、スライドの大きさは`width`と`height`で指定できる。デフォルトはそれぞれ1050と700であるが(縦横比だと3:2)、使用するプロジェクターやモニターの縦横比が4:3ならこれでも良いだろう。しかし、16:9なら横を長めに設定すると空間に無駄がなくなる。また、あまりないだろうが、UWQHDモニターとかでプレゼンテーションするなら21:9でも良いだろう。続いて、`slide-number: true`(または、`true`の代わりに`c`)でスライド番号も付けよう。デフォルトは`false`になっているため、スライド番号を出したい場合は必ず指定する必要がある。最後に`footer`でスライドの中央下段のテキストを指定する。
とりあえずこれくらいで通常のスライドは作成できる。もし、見た目(テーマ)を変更したいなら`theme:`から変えよう。デフォルトは`white`だが、他にも`black`、`sky`、`night`などいくつかの既定テーマがある。ポジティブに言えばシンプルなテーマではあるが、お世辞でも綺麗なテーマとは言い難い。自分でテーマをいじったり、修正したい場合は`.scss`ファイルを追加してテーマをカスタマイズする必要があるが、これらについては次章で解説する。
また、よく使いそうな機能がフォントサイズの指定だが、残念ながらフォントサイズの調整はできない。ただ、フォントサイズが固定されていることを考えると、`width`と`height`の調整することで間接的にサイズの調整はできる。つまり、`width`と`height`を小さくすればするほど、フォントサイズは(相対的に)大きくなる。厳密に調整したい場合は、別途の`.scss`ファイルを用意し、`theme: [default, ほにゃほにゃ.scss]`のようにスタイルを修正する必要があるが、SCSSの使い方については次章で解説する。
## スライドの作り方
YAMLヘッダーを設定すると表紙スライドは自動的に生成される。重要なのは本文の方だが、これは通常のHTML文書と同じ感覚で使える。大事なのはページの区切りとセクション(章)の区切りだろう。この区切りに使用するのは見出し(`#`や`###`など)だ。ページは`##`で、セクションは`#`で区切られる。つまり、ちゃんと構造化した文書を意識しながらHTML文書を作ったら`format: html`を`format: revealjs`に変更するだけで、そこそこ悪くないスライドが出来たりもする。
その他の書き方は通常のHTML文書と同じだ。図表の挿入、段組み、タブセット、コールアウトなどHTML文書で使えた文法はここでも全て使えると思っても良いだろう。
:::{.panel-tabset}
## コード
```{.yaml}
---
title: "ほとんど無害な『私たちのR』"
subtitle: "『私たちのR』をR教の聖典にすべき"
date: "2024/6/22"
author: "<ruby>羽鳥<rt>ハドリー</rt></ruby>ウィッカム"
institute: "整然大学"
format:
revealjs:
width: 1600
height: 900
slide-number: true
footer: <https://www.jaysong.net/RBook/>
theme: white
embed-resources: true
---
## 概要
::::{.columns}
:::{.column width=30%}
![](https://jaysong.net/RBook/Figs/Cover.png)
:::
:::{.column width=70%}
- 近年、爆発的に売り上げを伸ばした『私たちR』の紹介
- 2.7秒に1冊売れているらしい。
- メリットとデメリットの紹介
:::
::::
# 『私たちのR』のここがすごい!
## ネコが書いた本格R入門書
- 世界人口を8割を占めているネコのための本格R入門書
- ネコの、ネコによる、ネコのためのR入門書
## ふざけた例が満載
- 世界各国の社会経済的データなどふざけた例が多い
- ラーメン屋データのような真面目な例も少なめではあるが、一応ある。
# 『私たちのR』のここがダメ!
## ネコしか読めない
- にゃーにゃにゃーにゃーにゃーにゃにゃにゃ
- にゃーにゃーにゃーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーにゃーにゃにゃ
## ふざけた例しかない
- にゃーにゃにゃーにゃーにゃーわん!わん!わん!
- にゃーにゃーわんーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーわんーにゃにゃ
```
## 結果
```{=html}
<iframe class="slide-deck" src="reveal_demo/02/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
スライドの見た目をカスタマイズしないのであれば、以上の内容だけで立派なスライドが作成できる。以下ではスライド(reveal.js)ならではの機能をいくつか紹介する。
## 各種機能
Quartoで作成するHTML形式スライドには本書で紹介しきれないほど、たくさんの機能を提供している。公式ホームページの[Advanced Revealページ](https://quarto.org/docs/presentations/revealjs/advanced.html)からも確認できるが、ここではよく使う機能をいくつか紹介する。
### コードのハイライト
チャンクオプションの`code-line-numbers`で強調したい行の番号を指定する。たとえば、4行目のコードを強調したい時には`code-line-numbers: "4"`と指定する。ちなみに`#|`で始まるチャンクオプションはコードとしてカウントされない。したがって、以下の例の場合3行目は`drop_na(PPP_per_capita) |>`となる。
```{{r}}
#| eval: false
#| code-line-numbers: "4"
Country_df |>
filter(Continent == "Europe") |>
drop_na(PPP_per_capita) |>
mutate(Country = fct_reorder(Country, PPP_per_capita)) |>
ggplot() +
geom_segment(aes(y = Country, yend = Country,
x = 0, xend = PPP_per_capita)) +
geom_point(aes(y = Country, x = PPP_per_capita), color = "orange") +
labs(x = "一人あたり購買力平価GDP (USD)", y = "国") +
theme_bw(base_size = 12)
```
複数の行は`,`で区切り、連続している行なら`-`で表記する。また、クリックするたびに強調する行を変えたい場合は`|`で区切る。`|6-8|10`だと、「まずは全てハイライト $\rightarrow$ 6〜8行ハイライト $\rightarrow$ 10行ハイライト」となる。`6-8|10`なら最初から6〜8行ハイライトの状態になる。以下はその例だ。授業用スライドを作成する際、重宝する機能だ。
```{=html}
<iframe class="slide-deck" src="reveal_demo/highlight/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::{.callout-note}
## スライドでRコードが表示されない場合
Quartoスライドの場合、**チャンク内コードの非表示が既定値**になっている。実際、R教育用のスライドを除き、スライド内でコードを見せることは滅多にないだろう。コードを表示したいチャンクに`#| echo: true`オプションを付けるか、全チャンクのコードを出力するなら以下の例のようにYAMLヘッダーで指定した方が効率的だろう。
```{.yaml}
---
title: "タイトル"
format: revealjs
knitr:
opts_chunk:
echo: false
---
```
:::
### コードブロックの最大高さ
Quartoスライドのコードチャンクは基本的には非表示であるが、表示する場合、コードブロックの最大高さは500pxだ。Quartoスライドのデフォルトサイズが横1050px、縦700pxだから、画面の最大7割までコードブロックになる。ここでコードが長すぎる場合、どうなるだろうか。500pxを超える内容であれば、コードブロック内でスクロール可能な状態になる。この最大高さを調整するためにはYAMLヘッダーを以下のようにする必要がある。既定値は500pxだが、これを150pxに修正するためには以下のようにYAMLヘッダーを修正する。
:::{.panel-tabset}
## コード
````{.yaml}
---
format:
revealjs:
width: 1200
height: 675
slide-number: true
theme: white
embed-resources: true
code-block-height: 150px
knitr:
opts_chunk:
echo: true
error: true
---
## 高さ150pxの例
```{{r}}
#| eval: false
#| code-line-numbers: "3"
Country_df |>
filter(Continent == "Europe") |>
drop_na(PPP_per_capita) |>
mutate(Country = fct_reorder(Country, PPP_per_capita)) |>
ggplot() +
geom_segment(aes(y = Country, yend = Country,
x = 0, xend = PPP_per_capita)) +
geom_point(aes(y = Country, x = PPP_per_capita), color = "orange") +
labs(x = "一人あたり購買力平価GDP (USD)", y = "国") +
theme_bw(base_size = 12)
```
````
## 結果
```{=html}
<iframe class="slide-deck" src="reveal_demo/code_block_height/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
コードと出力結果を1画面に表示させたい場合、コードが長すぎると結果を別のページに載せざるをえないケースがしばしばあるが、この機能で多少は緩和できよう。ただし、これはあくまでもHTML形式スライドならではの機能であるため、PDFやPowerpointでは使えない。
### 箇条書きのアニメーション
箇条書きの項目を上から順番に一つずつ見せたい場合は、`:::{.incremental}`と`:::`の間に箇条書きを書く。こちらは人によってはよく使う機能かも知れない。
:::{.panel-tabset}
## コード
YAMLヘッダーの箇所は省略
```{.markdown}
## 高知のおすすめラーメン
宋が訪問したことのある店のみ紹介(順不同)
::: {.incremental}
1. 蔵木(牛モツつけ麺)
1. まんしゅう(じゃんめん+白ご飯)
1. 鶏と魚(メニューがよく変わる)
1. チョンマゲ(ラーメン零)
1. とさの家(ラーメン+のり多め+硬め濃いめ少なめ)
1. 呑兵衛屋台(しじみラーメン)
1. 谷口食堂(鍋焼きラーメン)
:::
```
## 結果
```{=html}
<iframe class="slide-deck" src="reveal_demo/incremental/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
より高度な操作をしたい場合はフラグメント(fragment)機能を使う必要があり、詳細は[Quarto公式ホームページ](https://quarto.org/docs/presentations/revealjs/advanced.html#fragments)を参照されたい。
### 右下のロゴ
スライド右下に所属機関などのロゴを入れることもできる。YAMLヘッダーの`revealjs:`の下位オプションとして`logo:`を追加し、ロゴファイルのパスを指定するだけだ。もし、`.qmd`ファイルと同じフォルダーならファイル名のみで良いが、`fig`フォルダー内であれば`fig/ファイル名`のようにパスを指定する必要がある。
```{.yaml}
---
format:
revealjs:
width: 1600
height: 900
logo: my_logo.png
---
```
### スピーカービュー
プロジェクターの画面がプレゼンテーションに使用するPC画面をミラーリングするだけなら、{{< kbd F>}}キーでフルスクリーンすれば良い。しかし、Powerpointのように聴衆が見る画面と発表者が見る画面が異なる場合はどうだろうか。このようなスピーカービューは次のスライドや現時刻・開始からの経過時間が確認できる長所がある。また発表者のみに見えるメモやノートも見れる。Quartoで作成したプレゼンテーションでも似たような機能が使用できる。
プロジェクター(または、聴衆用モニター)と発表用PCのミラーリングを解除[^mirroring-off]し、{{< kbd S >}}キーを押すだけだ。そうすれば新しいウィンドウが表示され、そこに次のスライド、時間、ノートなどが表示される。あとは元のスライドをプロジェクターの画面へ動かしてからフルスクリーン({{< kbd F>}})にし、発表用のPCにはスピーカービューのウィンドウを残しておく。2つのウィンドウのスライドは連動するため、スピーカービューのウィンドウでスライドをめくっても問題ない。
[^mirroring-off]: つまり、2台のモニターに異なる画面が映っている状態にすることを意味する。macOS(15.0.1)であれば、システム環境設定 > ディスプレイ > ディスプレイをミラーリングの**チェックを解除**すれば良い。Windows 11であれば、「<i class="bi bi-windows"></i> + P」を押せば小さいウィンドウが表示されるが、ここで「拡張」を選べば良い。ちなみに「複製」はミラーリングを意味する。
発表者用のノートは以下の例のように`:::{.notes}`と`:::`の間に書くだけだ。聴衆側から見ればノートの内容は見えないが、スピーカービューでは見える。
```{.markdown}
## 高知のおすすめラーメン(順不同)
宋が訪問したことのある店のみ紹介(**太字**は大阪支店あり)
1. 蔵木(牛モツつけ麺)
1. **まんしゅう**(じゃんめん+白ご飯)
1. 鶏と魚(メニューがよく変わる)
1. チョンマゲ(ラーメン零)
1. **とさの家**(ラーメン+のり多め+硬め濃いめ少なめ)
1. 呑兵衛屋台(しじみラーメン)
1. 谷口食堂(鍋焼きラーメン)
::: {.notes}
- 鶏と魚はドライトマトが乗っているやつがあれば間違いない
- チョンマゲはラーメンよりも玉子焼き飯がうまいことも言っておく
- 谷口食堂は鍋焼きラーメン発祥の店だが、そもそも鍋焼きラーメンが宋の好みではない
:::
```
### ホワイトボードとペン機能
`revalejs:`の下位オプションとして`chalkboard: true`を指定すると、ホワイトボードやペン機能が使えるようになる。スライドの見た目はあまり変わらないが、{{< kbd C >}}キーか左下のブラシをクリックするとペンが、{{< kbd B >}}キーか左下のホワイトボード(厳密には黒板?)が使える。同じキーをもう一度押すと、元のスライドに戻れる。他にもいくつかのショートカットキーがあるが、スライドの状態で{{< kbd H >}}キーを押すと各種ショートカットキーの案内が表示されるので確認しておこう。また、後述するが`embed-resources: true`と`chalkboard: true`は同時に使えないことには注意されない。
### スライドを隠す
特定のスライドを非常時にする場合はスライドタイトル(`# タイトル`や`## タイトル`)の後ろに`{visibility="hidden"}`を付ければ良い。必要なくなったスライドだけど、削除するにはもったいない場合、とりあえず非表示にしておくことも良いだろう。また、スライドは表示するものの、右下のページ番号を維持したい場合は`{visibility="uncounted"}`を付ける。
以下は最初の概要スライドは非表示となり、セクションの区切りとなるスライド(タイトルが`#`のみになっている箇所)ではスライド番号が増加しない例である。
:::{.panel-tabset}
## コード
```{.yaml}
---
title: "ほとんど無害な『私たちのR』"
subtitle: "『私たちのR』をR教の聖典にすべき"
date: "2024/6/22"
author: "<ruby>羽鳥<rt>ハドリー</rt></ruby>ウィッカム"
institute: "整然大学"
format:
revealjs:
width: 1600
height: 900
slide-number: true
footer: <https://www.jaysong.net/RBook/>
theme: white
embed-resources: true
---
## 概要 {visibility="hidden"}
::::{.columns}
:::{.column width=30%}
![](https://jaysong.net/RBook/Figs/Cover.png)
:::
:::{.column width=70%}
- 近年、爆発的に売り上げを伸ばした『私たちR』の紹介
- 2.7秒に1冊売れているらしい。
- メリットとデメリットの紹介
:::
::::
# 『私たちのR』のここがすごい! {visibility="uncounted"}
## ネコが書いた本格R入門書
- 世界人口を8割を占めているネコのための本格R入門書
- ネコの、ネコによる、ネコのためのR入門書
## ふざけた例が満載
- 世界各国の社会経済的データなどふざけた例が多い
- ラーメン屋データのような真面目な例も少なめではあるが、一応ある。
# 『私たちのR』のここがダメ! {visibility="uncounted"}
## ネコしか読めない
- にゃーにゃにゃーにゃーにゃーにゃにゃにゃ
- にゃーにゃーにゃーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーにゃーにゃにゃ
## ふざけた例しかない
- にゃーにゃにゃーにゃーにゃーわん!わん!わん!
- にゃーにゃーわんーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーわんーにゃにゃ
```
## 結果
```{=html}
<iframe class="slide-deck" src="reveal_demo/hidden/index.html" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
## スライドの配付
Quartoで作成可能なスライドのフォーマットは[reveal.js](https://revealjs.com/)ベースの`.html`、$\LaTeX$(Beamer)ベースの`.pdf`、Microsoft Powerpointの`.pptx`である。`.pdf`や`.pptx`は図表を含む全ての内容が一つのファイルに保存されているため、そのファイルだけ共有すれば良い。しかし、多くの人が利用するであろう`.html`ファイルを他の人に共有したり、学会発表のためにUSBメモリに入れる際は注意が必要だ。なぜなら、`.html`ファイルにはスライドのテキスト情報と書式の指定のみが残っている。つまり、「この文字は強調する」といった書式の指定は`.html`ファイル内に残っているが、強調の仕方、つまり文字の太さや大きさ、色など、通常、CSS内で指定されているものは`.html`ファイル内に含まれていない。したがって、`.html`ファイル**だけ**を共有したら、白い背景に文字しかない文書($\neq$スライド)が表示される。
解決方法は簡単だ。書式の具体的な内容や画像なども一緒に配布すれば良い。テキストを除く全ての情報、ファイルは`スライドのファイル名_files`フォルダーに格納されるため、このフォルダーも`.html`ファイルと一緒に共有する必要がある。
他にも[GitHub Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)や[Quarto Pub](https://quarto.org/docs/publishing/quarto-pub.html)などのサービスを使用し、ネット上にアップロードして共有することもできるが、詳細は各サービスの公式HPを参照されたい。。
### 一つのHTMLファイルに統合する
もし、**一つ**のファイルとしてスライドを配布したい場合、自己完結型(self-contained)HTMLを作成することも一つの選択肢だ。これはスライド内の画像などをすべて一つのHTMLファイルに埋め込まれた形式であり、`revealjs:`の下位オプションとして`embed-resources: true`を追加するだけだ。
```yaml
format:
revealjs:
embed-resources: true
```
ただ、`embed-resources: true`を指定しても数式は埋め込まれない。数式をレンダリングする数式ライブラリ(MathJaxとKaTeX)がサイズが大きいため、`embed-resources: true`でも自己完結型HTMLに含まれず、ネット経由で取得することになる。しかし、インターネットが使えない環境になるとせっかくの数式がレンダリングされない。この場合、`self-contained-math: true`を追加すると、数式ライブラリもHTMLファイルに保存される。ただ、この場合、スライドとは思えないサイズのHTMLになるため、注意が必要だ。場合によってはほぼ使い物にならなら程度のサイズになる可能性もある。
```yaml
format:
revealjs:
embed-resources: true
self-contained-math: true
```
一つ注意点としては`chalkboard: true`と併用してはいけないだということだ。`chalkboard: true`と`embed-resources: true`が同時に指定されるとレンダリングの際、エラーが発生する。自己完結型HTMLでスライドを作成する際、ホワイトボード機能は諦めよう(もし出来るとしてもファイルサイズが非常に大きくなり、実用性がほぼないだろう)。
### PDF出力
HTMLファイルを一つにまとめた場合、ファイルのサイズが大きくなる。大量の図が使用されたり、数式ライブラリまでHTMLファイルに含めると数十MBになる可能性もある。この場合、PDF形式で出力すればサイズを大幅に減らせることができよう。この場合、タブセット[^pdf-tabset]、スクロールのような**インタラクティブ(動的)な機能はすべて無効になる**が、そういった要素がないスライドであれば、自己完結型HTMLよりもPDFの方が合理的だろう。
[^pdf-tabset]: 2つ以上のタブで構成されたタブセットの場合、最初のタブのみが印刷される。
しかし、残念ながら2024年5月現在(最新の事情は[公式HP](https://quarto.org/docs/presentations/revealjs/presenting.html#print-to-pdf)を参照されたい)、HTML形式スライドをPDFに変換する方法は限られており、見た目もお世辞でも綺麗とは言えない。むろん、内容が変わったり、本来見えたものが見えなくなったりすることはない。それでも構わないという読者は以下のやり方でHTMLスライドをPDFに変換できる。用意するものはBlinkベースのウェブブラウザーだ。代表的にはGoogle社のChromeとChromiumがあり、Microsoft EdgeやOperaもBlinkエンジンを使用している。
HTMLファイルのPDF変換は言い換えれば、PDF形式で印刷することを意味する。
1. Blinkエンジンを使用するブラウザーでスライドを開く。
2. スライドが表示されたらキーボードの「E」、または「e」キーを押す。
3. macOSならCommand(⌘) + P、WindowsならControl(Ctrl)+ Pを押す。
4. 出力先をPDFにする。
5. 用紙のレイアウトを横向き(Landscape)に指定する。
6. 余白をなしにする。
7. 背景画像のオプションにチェックを入れる。
8. 「保存」をクリックする(ブラウザーによっては「印刷」と表示される)。
このやり方だと最後に余計な白紙のページが現れるが、これは手動で消そう(無害なのでほっといてもOK)。
### Beamer
以上の方法は「HTMLファイルをPDFに変換する」方法だ。HTML上で見やすいスライドをPDFに変換したからといってそのスライドが見やすいとは限らない。ベストは最初からスライドをPDFで作ることだろう。
:::{.panel-tabset}
## コード
```{.yaml}
---
title: "ほとんど無害な『私たちのR』"
subtitle: "『私たちのR』をR教の聖典にすべき"
date: today
author: "\\ltjruby{羽鳥}{ハドリー}ウィッカム"
institute: "整然大学"
format:
beamer:
pdf-engine: lualatex
theme: metropolis
classoption:
- 10pt
mainfont: "Noto Sans JP"
CJKmainfont: "Noto Sans JP"
include-in-header:
text: |
\usepackage{luatexja-ruby}
knitr:
opts_chunk:
dev: "ragg_png"
dpi: 300
fig.align: "center"
echo: false
message: false
warning: false
---
## 概要
::::{.columns}
:::{.column width=30%}
![](https://jaysong.net/RBook/Figs/Cover.png)
:::
:::{.column width=70%}
- 近年、爆発的に売り上げを伸ばした『私たちR』の紹介
- 2.7秒に1冊売れているらしい。
- メリットとデメリットの紹介
:::
::::
# 『私たちのR』のここがすごい!
## ネコが書いた本格R入門書
::: {.incremental}
- 世界人口を8割を占めているネコのための本格R入門書
- ネコの、ネコによる、ネコのためのR入門書
:::
## ふざけた例が満載
::: {.incremental}
- 世界各国の社会経済的データなどふざけた例が多い
- ラーメン屋データのような真面目な例も少なめではあるが、一応ある。
:::
# 『私たちのR』のここがダメ!
## ネコしか読めない
- にゃーにゃにゃーにゃーにゃーにゃにゃにゃ
- にゃーにゃーにゃーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーにゃーにゃにゃ
## ふざけた例しかない
- にゃーにゃにゃーにゃーにゃーわん!わん!わん!
- にゃーにゃーわんーにゃにゃーにゃにゃ
- にゃーにゃにゃーにゃーわんーにゃにゃ
```
## 結果
```{=html}
<iframe class="pdf" src="reveal_demo/beamer/index.pdf#toolbar=0&navpanes=0&scrollbar=0" width="100%" style="aspect-ratio: 16 / 9.5;"></iframe>
```
:::
日本語フォントは`mainfont`と`CJKmainfont`で指定できるため、適宜修正すること。UbuntuでNotoフォントを入れた場合、高確率で`"Noto Sans CJK JP"`になるし、macOSならヒラギノ(`"Hiragino Sans"`)、Windowsなら游ゴシック(`"Yu Gothic"`)で良いだろう。また、ルビを使いたい場合は`luatexja-ruby`パッケージの読み込みも忘れないこと。テーマは[Metroplis](https://github.com/matze/mtheme)を指定したが(ちなみに`Metropolis`にするとエラーが発生する。)、省略した場合デフォルトテーマになる。他にも`CambridgeUS`、`Singapore`など様々なテーマが使える。
まとめると、PDF形式にこだわりたいなら最初からRevealJSでなく、Beamerフォーマットでスライドを作成すべきだろう。一方、柔軟でありががら、スクロールやアニメーション、タブなどの動的な機能を活用したい場合はreveal.jsを使用し、GitHub等で配布するか、全てのリソースを格納した自己完結型HTMLを使うことを推奨する。とりあえずスライドを印刷がしたい場合はWebブラウザでPDFに変換し印刷する必要があるが、動的コンテンツは一部しか出力されないので、最初のスライド作成の段階から動的コンテンツ使用は極力控えるべきであろう(本書で紹介しなかったPowerpoint形式は筆者が使ったことがないため、なんとも言えない)。