1
0

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で論文を書いて英文誌に投稿するまで (2) -- メタデータ記入からデータ埋め込みまで

Last updated at Posted at 2025-03-31

データ解析からQuarto導入までの続きです。
論文に関する情報、メタデータを準備していきます。
解析結果を埋め込むために、データの読み込みも行っていきます。

Step 3. メタデータの記入

以降は、ジャーナルテンプレートをダウンロードしたときに自動で生成された、paper.qmd を書き換える形で論文執筆していきます。

paper.qmd の冒頭を見ると、1行目と54行目に、--- と書いてあります。
--- から --- までの行には、メタデータと呼ばれる情報を、YAML形式で記入していきます。
不要な情報のある行は削除してしまって大丈夫です。

わかりにくい点だけご紹介しましょう。

author: affiliations: id

author:
  - name: Alice Anonymous
    affiliations: 
        - id: some-tech

の部分は、所属のコードです。
論文の著者欄に、

Gonbei Nanashinoa, b
a: Nantoka University
b: Doutara Research Institute

みたいに書かれてますよね。
この a とか b とかです。
例だと some-tech となっていますが、登場順に a とか b とかにするのが一般的かと思います。

attributes: corresponding

author:
  - name: Alice Anonymous
    attributes:
        corresponding: true

のように、corresponding: true となっていると、その筆者が corresponding author として示されます。
たとえば elsevier テンプレートだと、

Gonbei Nanashinoa, b, *
* Corresponding Author

と表示されます。

format: elsevier-pdf: keep-tex

format:
  elsevier-pdf:
    keep-tex: true

の箇所は、keep-tex: true のままにしておきましょう。
Quarto は、.qmd ファイルを .pdf に変換するにあたって、まず .tex ファイルを生成します。
TeX のファイルですね。
.tex ファイルを介して .pdf に変換するわけです。
この中間ファイルである .tex を残しておくかどうかがこのオプションです。
.tex ファイルは投稿する際に用いるので、true にしておきましょう。

format: elsevier-pdf: journal

format:
  elsevier-pdf:
    keep-tex: true
    journal:
      name: Journal Name
      formatting: preprint
      # model: 3p # Don't set a model with preprint
      cite-style: authoryear

name には、投稿先のジャーナル名を入力してください。
formatting 以下については、テンプレートの詳細をご確認ください。

一部、フィールドの追加が必要です。
keep-tex の 上あたりに、echo: falsewrap: preserve を加えてください。

elsevier-pdf:
  echo: false  # ←追加
  wrap: preserve  # ←追加
  keep-tex: true

といった形です。

Step 4. 参考文献・略語リストの準備

略語リストを作成する

解析時の変数名などに使った略語と、論文に掲載する正式語の対応表を作成しましょう。
以下のような .ini ファイルで作成します。

{abbr.ini}
[quest]
    external = External
    internal = Internal
    neuro = Neuroticism
    extra = Extraversion
    open = Openness
    agree = Agreeableness
    consc = Conscientiousness

[stat]
    mean = \textit{M}
    std = \textit{SD}
    r = \textit{r}
    p.unc = $p_{\mathrm{unc.}}$
    p.corr = \textit{p}\textsubscript{Bonf.}

これを、paper.qmd と同じ位置に置きます。
[quest][stat] といったセクション分けは、ご自身の使いやすいよう適当に設定してください。
\textit{} で囲むことで、イタリックになります。
\textsubscript{} なら下付き文字です。
$$ で囲むことによって、数式を記述することもできます。

実際には、論文を書きながら項目を追加していく形になるでしょう。

参考文献リストを作成する

Quarto が生成した bibliography.bib を編集して、自身の参考文献リストを作成します。
.bib ファイルの作り方については別の記事に譲ります。
なんらかの論文管理ソフトから生成するのがよいかと思います。

Step 5. データの読み込み

Step 0 にて、.ini, .csv, .png ファイルとして用意した結果を読み込ませましょう。
読み込みをするための .R ファイルを作成します。

.R ファイルではなく、.py ファイルなど、Quarto で実行可能なファイルならなんでもOKです。
ただし、後述の理由から R をオススメします。
ややこしいコードは書かないので、私のように普段 R を使わない人でも大丈夫です。

in-render.R というファイルを、paper.qmd と同じ位置に作成します。

project
├─ (解析に必要なファイルたち)
├── result
└── publish
    └── paper
        ├── (略)
        ├── paper.qmd
        ├── in-render.R  ←新規作成
        └── tools

in-render.R には、以下のようなコードを書きます。

in-render.R
source('tools/helper.R')

# --- Settings ---
nr <- NumRenderer(
  sdgt_general = 1,
  sdgt_not_greater_than_one = 2,
  sdgt_percent = 2,
  sdgt_pval = 3,
  min_pval = 0.001,
  abbr_ngto_head = TRUE
)
dir_home <- "../../"
dir_result <- file.path(dir_home, "result")

path_abbr_ini <- file.path("abbr.ini")

path_method <- file.path(dir_result, "method.ini")
path_table_descriptive <- file.path(dir_result, "table_descriptive.csv")
path_table_corrs <- file.path(dir_result, "table_corrs.csv")
path_fig_scatter <- file.path(dir_result, "fig_scatter.png")

embeded_fig_exts = '.png'
# --- ------- ---

abbr <- flatten_list(read.ini(path_abbr_ini))
ready_to_embed_fig(dir_result, embeded_fig_exts)

# Method

method <- read.ini(file = path_method)
n_subjects <- method$demographic$n_subjects
python_ver <- method$misc$python_ver
pingouin_ver <- method$misc$pingouin_ver

# Table

desc <- read.csv(path_table_descriptive, row.names = 2)
corr <- read.csv(path_table_corrs, row.names = 1)

set_table_appearance <- function(table) {
  return(
    table  |>
    kableExtra::kable(row.names = TRUE,
                      format = "latex",
                      escape = FALSE,
                      booktabs = TRUE) |>
    kableExtra::kable_styling(full_width = TRUE)
  )
}

上から順に見ていきましょう。

ツールを読み込む

私が書いたツールを読み込むために、

source('tools/helper.R')

から始めています。

表示桁数を設定する

# --- Settings ---
nr <- NumRenderer(
  sdgt_general = 1,
  sdgt_not_greater_than_one = 2,
  sdgt_percent = 2,
  sdgt_pval = 3,
  min_pval = 0.001,
  abbr_ngto_head = TRUE
)

の部分で、論文に数値を記載する際の小数点以下桁数を設定しています。
NumRenderer() は、tools/helper.R にて私が作った関数です。
数値の種類ごとに、表示する小数点以下桁数を設定します。

  • sdgt_general: 以下に示すパターン以外における数値
  • sdgt_not_greater_than_one: 比率や相関係数など、絶対値が1を超え得ない数値(p 値除く)
  • sdgt_percent: パーセンテージ
  • sdgt_pval: p 値

この関数を使うと、論文をPDFへ出力したとき、設定した通りの小数点以下桁数に丸めてくれます。
さらに、abbr_ngto_head = TRUE1 とすると、比率・相関係数または p 値における、頭の 0 を省略してくれます。

例:p = 0.051 → p = .051

また、min_pval に設定した値よりも小さい p 値を記載すると、

p < .001

といった表記に変換してくれます。
NumRenderer() の詳細な使い方は後ほどご説明します。

ファイルパスを設定する

dir_home <- "../../"
dir_result <- file.path(dir_home, "result")

path_abbr_ini <- file.path("abbr.ini")

path_method <- file.path(dir_result, "method.ini")
path_table_descriptive <- file.path(dir_result, "table_descriptive.csv")
path_table_corrs <- file.path(dir_result, "table_corrs.csv")
path_fig_scatter <- file.path(dir_result, "fig_scatter.png")

embeded_fig_exts = '.png'

で、読み込むファイルのあるパス名を設定します。
また、論文に埋め込む画像の拡張子を embeded_fig_exts に指定します。

略語リストを読み込む

abbr <- flatten_list(read.ini(path_abbr_ini))

path_abbr_ini に指定した、abbr.ini を読み込みます。
flatten_list() という helper.R にある関数を使って、セクション分けをつぶしてます。

Figure をコピーする

ready_to_embed_fig(dir_result, embeded_fig_exts)

によって、論文に埋め込む .png ファイルを、result/ から publish/paper/tex-source-files/ へコピーしています。
tex-source-files/ というディレクトリはこの関数により自動で生成されます。

result/ にある .png ファイルを直接埋め込んでも問題はありません。
しかし、PDF 生成に必要なファイルを一つのディレクトリ(tex-source-files/)にまとめておくことで、のちの作業がやりやすくなります。

.ini ファイルを読み込む

# Method

method <- read.ini(file = path_method)
n_subjects <- method$demographic$n_subjects
python_ver <- method$misc$python_ver
pingouin_ver <- method$misc$pingouin_ver

read.ini() を使って、.ini ファイルに保存した数値を読み込みます。
続けて、method の中身を各変数に格納しています。
paper.qmd 内にて method$demographic$n_subjects と打ち込んでもOKです。
しかし表記が長くて読みづらくなるので、こちらで n_subject といった変数に格納しています。

テーブルを読み込む

desc <- read.csv(path_table_descriptive, row.names = 2)
corr <- read.csv(path_table_corrs, row.names = 1)

row.names 引数に、行の名前に対応する列の番号を指定しています。
table-descriptive.csv のようなマルチインデックスの場合、低次なインデックスの方を指定します。

テーブル埋め込みを準備する

set_table_appearance <- function(table) {
  return(
    table  |>
    kableExtra::kable(row.names = TRUE,
                      format = "latex",
                      escape = FALSE,
                      booktabs = TRUE) |>
    kableExtra::kable_styling(full_width = TRUE)
  )
}

manuscript.qmd 中で kableExtra() を使って表を整えます。
しかし毎回同じ引数を入力したりも面倒なので、関数にしておきました。
関数 set_table_appearance() に 表 table を与えると、
kableExtra パッケージによっていい感じに見た目が整えられます。

paper.qmd に in-render.R を反映させる

paper.qmd に戻りましょう。
メタデータを書いた直後に、以下のように書いてやります。

paper.qmd
---
(略)
      cite-style: authoryear
---

```{r}
source('in-render.R')
```

これで、in-render.R に書いた内容が paper.qmd に反映されます。

今回はいったんここまでです。
次回は、本文執筆からPDF出力までです。

  1. ngto は Not Greater Than One の略です。私が勝手に略しました。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?