1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Quarto (バッド)ノウハウ集

Last updated at Posted at 2024-09-03

はじめに

今年度に入ってからR markdownを止めてQuartoに移行して大量に資料を作ってみたところ,とりあえず計算結果が確認できればいいやとササッとhtmlで作る分には非常にお手軽なのですが,人に見せるレポートをPDFで作ろうとしたりすると細かいところの調整などに結構時間がとられてしまいます.そうした悪戦苦闘の記録を備忘録を兼ねてここに公開しておきます.多くは時間がない中でそれらしく見えればいいやの精神で作っていますので,もっといいやり方もあるかもしれませんが,そこはバッドノウハウということで….

当然のようにtidyverseパッケージの利用が前提です.

library(tidyverse)

フォーマット共通

表の中にLaTeX数式を入れる

kableExtra::kbl()kableExtra::kable_styling()でLaTeXコードをエスケープしないようにして,チャンクオプションにresults: asisを指定し,最後にprint()で出力します.

#| label: tbl-latex-math
#| tbl-cap: LaTeX数式を含む表
#| results: asis

df_latex <- tibble(
  x = c("$x_1$", "$x_2$", "$x_3$"),
  y = c("$y_1$", "$y_2$", "$y_3$")
)

df_latex |>
  kbl(escape = FALSE) |>
  kable_styling(protect_latex = TRUE) |>
  print()

出力フォーマットに応じて処理を変える

knitr::is_*()関数を使います.例えば,stargazer::stargazer()関数を使って回帰分析の結果を出力する際に,html形式とlatex形式でオプションを切り替えるには次のようにします.

if (is_html_output()) {
  stargazer::stargazer(model, type = "html")
} else if (is_latex_output()) {
  stargazer::stargazer(model, type = "latex")
}

docx形式への出力かどうかを判定したいときはknitr::pandoc_to()関数を使います.

if (pandoc_to("docx")) {
  head(mpg) |> gt()
} else {
head(mpg) |>
  kbl(booktabs = TRUE) |>
  kable_styling(latex_options = "striped")
}

PDF編

TeXファイルで出力する

参考文献のスタイルにjecon.bstを指定するとPDFでの出力に失敗するので,LaTeX形式で出力してからlatexmkを使いましょう.

LuaLaTeX + jlreqを使うものとして,必要最小限のYAMLヘッダーは次のようになります.

format: 
  latex: 
    documentclass: jlreq
    classoption: 
      - article
    knitr:
      opts_chunk: 
        dev: cairo_pdf
    cite-method: natbib
    include-in-header: 
      file: "preamble.tex"
    biblio-style: jecon
bibliography: references.bib

preamble.texは最低限の内容なら以下の通り.

preamble.tex
\usepackage{luatexja}
\usepackage[haranoaji, deluxe]{luatexja-preset}

ggplot2ggrepelで日本語フォントを使う

セットアップチャンクで次を実行.

#| label: setup
library(ggplot2)
library(ggrepel)
library(extrafont)

fontfamily <- "好きなフォント名"
theme_update(text = element_text(family = fontfamily))
update_geom_defaults("text", list(family = fontfamily))
update_geom_defaults("label", list(family = fontfamily))
update_geom_defaults("text_repel", list(family = fontfamily))
update_geom_defaults("label_repel", list(family = fontfamily))

当然ですが,あらかじめextrafont::font_import()でシステムのフォントを読み込んでおく必要があります.

Revealjs編

ポインターを使う

qmdファイルがあるディレクトリで次を実行しポインタープラグイン1を追加します.
Rコンソールではなく,シェルで実行します.

> quarto add quarto-ext/pointer

qmdファイルのYAMLヘッダーに以下を追加します.

revealjs-plugins: 
  - pointer

プレゼンテーション中にqを押すとポインターが有効になります.

PDFへのエクスポートで数式が消えるのを防ぐ

Revealjsプレゼンテーションはプレゼン中にEを押すことでPDFにエクスポートすることができますが,このときに数式が消えてしまうことがあります.

数式なし.png-2.png

これを防ぐためには,YAMLヘッダーのrevealjs:以下に次を追加します.

html-math-method: mathjax

数式あり.png-2.png

既定の数式表示はmathjaxになっているはずなのですけどね.PDFのプロパティで比較すると,html-math-method: mathjaxを指定していない場合,MathJax_Size2_Regularってのが欠けてるみたいです.

タイトルで改行する

YAMLヘッダーのタイトルの中に<br>を入れます.

title: "タイトル1行目<br>タイトル2行目"

タイトル1行目 タイトル2行目.png

その他

ネタが増えたら(思い出したら)追記します.

  1. https://github.com/quarto-ext/pointer

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?