😸

【VSCode】LaTeX環境にpBibTeXを追加して保存時全自動ビルドできるようにしてみた

2023/02/01に公開

BibTeXってなに?

BibTeXはLaTeXファイルと連携して、参考文献のリストを簡単に記述したり、データベースと連携したりできるシステムです.

https://ctan.org/pkg/pbibtex-base?lang=en

LaTeXに直接参考文献を書くときはこんな感じでbibitem環境を使いますね?

report.tex
\begin{thebibliography}{99}
  \bibitem{waarrk} おなまえたろう、「こんにちは金星の女神」、https://zenn.dev/articles/hoge、(2022年)
\end{thebibliography}

しかしこれ、数が増えてくると管理が面倒な上に、謎の空白が生成されたり、並び順や括弧のありなしとか提出先によって記述方法が違う事もあるので中規模以上の作文をする時には面倒かと思います.
それがBibTeX環境を使うとこちら!

report.tex
\nocite{*}
\bibliographystyle{jplain}
\bibliography{refs}
refs.bib
@misc{hoge,
  author = {おなまえたろう},
  note   = {\url{https://zenn.dev/articles/hoge}},
  title  = {こんにちは金星の女神},
  year   = {2022年}
}

と、別ファイルに項目ごとに分かれた設定ファイルを書くことで、LaTeX文書に反映できるようになります.参考文献の並び順や年号とURLどちらが先かなども設定ファイルに記述でき、入稿先によっては設定ファイルが配布される場合もあるようです.

そしてなんならJ-STAGEとかの論文検索システムには大抵BibTeXの配布リンクがついているので、ダウンロードしてあげれば参考文献の記述ファイルがダウンロードできて後これを自分の論文なりのBibTeXのリストを書くファイルに転記すれば完璧です.
(環境によっては@article{----,}の部分を英語にする必要がある)

tenki_68_67_ja.bib
@article{松田 佳久2021,
  title={金星気象学の回顧と展望},
  author={松田 佳久 and 高木 征弘},
  journal={天気},
  volume={68},
  number={2},
  pages={67-83},
  year={2021},
  doi={10.24761/tenki.68.2_67}
}

※全く私とは関係ございません.説明のためリンクをお借りしました.
https://www.jstage.jst.go.jp/article/tenki/68/2/68_67/_article/-char/ja/

CLIでBibTeXを動かしてみよう

env

  • MacBook Pro Apple M1 16GB ( MacOS 13.1 )
  • Visual Studio Code v: 1.74.3 (Universal)
  • TeX 3.141592653 (TeX Live 2022)

TeXLiveが組版できる状態でインストールが終わっている前提で話を進めていきます.
BibTeX環境はTeXLiveに入っているので、追加インストールなしで大丈夫です.

今回使うもののサンプルはこちらにおいておきました

https://github.com/waarrk/latex_pbibtex_sample

ファイルの作成

BibTeX環境を使うには、.texファイルの他に、.bibファイルが必要です.

https://github.com/waarrk/latex_pbibtex_sample/blob/main/sample.tex

https://github.com/waarrk/latex_pbibtex_sample/blob/main/refs.bib

report.tex
\nocite{*}
\bibliographystyle{jplain}
\bibliography{refs}

のようにして.bibの拡張子以外の部分を\bibliographyに渡せばOKです.
今回はurl環境も使っているので\usepackage{url}も忘れずに.

スタイルの指定

\bibliographystyle{}で指定しているのが.bstファイルというもので、参考文献の見た目を規定するファイルです.学会によってはこれが配られたりするっぽいです.
TeXLiveのpBibTeX環境にデフォルトで入っていて使いそうなのはこんな感じかと思います.指定がなければ、好きなのを選んでください.

欧文 和文対応 効果
plain jplain 一番プレーンな表記(ラベルが番号になる)
alpha jalpha ラベルが人名プラス年号になる
abbrv jabbrv plainの著者省略版
jname [] name: ---みたいになる
unsrt junsrt 参考文献を引用された順に出力
[2] 松田佳久, 高木征弘. 金星気象学の回顧と展望. 天気, Vol. 68, No. 2, pp. 67–83, 2021.

[松田 21] 松田佳久, 高木征弘. 金星気象学の回顧と展望. 天気, Vol. 68, No. 2, pp. 67–83, 2021.

[2] 松田, 高木. 金星気象学の回顧と展望. 天気, 68(2):67–83, 2021.

[松田 21] 松田, 高木:金星気象学の回顧と展望, 天気, Vol. 68, No. 2, pp. 67–83, 2021.

ビルドしてみよう

ここまで上手くできていればCLIを使ってとりあえず動作確認が取れるはずなのでやってみてください.
BibTeXを反映させるには

  1. LaTeXをビルド
  2. BibTeXをビルド
  3. LaTeXをビルド
  4. LaTeXをビルド

という4ステップを踏む必要があります.
今回は、日本語も英語も使えるpbibtexを使って試します.

Step 1

(base) ╭─waarrk@waarrks-MacBook-Pro ~/Documents/software_prayground/latex_pbibtex_sample ‹main› 
╰─$ platex sample 
This is e-pTeX, Version 3.141592653-p4.0.0-220214-2.6 (utf8.euc) (TeX Live 2022) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./sample.tex
pLaTeX2e <2021-11-15> (based on LaTeX2e <2021-11-15> patch level 1)
L3 programming layer <2022-02-24>
...

Step 2

╰─$ pbibtex sample
This is pBibTeX, Version 0.99d-j0.34 (utf8.euc) (TeX Live 2022)
The top-level auxiliary file: sample.aux
The style file: jplain.bst
Database file #1: refs.bib

データベースファイルができたのがわかります.

Step 3

╰─$ platex sample 
This is e-pTeX, Version 3.141592653-p4.0.0-220214-2.6 (utf8.euc) (TeX Live 2022) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode

...

LaTeX Warning: Citation `hoge' on page 1 undefined on input line 12.
(./sample.bbl) [1] (./sample.aux)
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
)
Output written on sample.dvi (1 page, 944 bytes).
Transcript written on sample.log.

本文中で引用しているhogeが見つからないと怒っています

Step 4

╰─$ platex sample
This is e-pTeX, Version 3.141592653-p4.0.0-220214-2.6 (utf8.euc) (TeX Live 2022) (preloaded format=platex)
 restricted \write18 enabled.
entering extended mode
(./sample.tex
pLaTeX2e <2021-11-15> (based on LaTeX2e <2021-11-15> patch level 1)
L3 programming layer <2022-02-24>
(/usr/local/texlive/2022/texmf-dist/tex/platex/jsclasses/jsarticle.cls
Document Class: jsarticle 2021/06/28 jsclasses (okumura, texjporg)
(/usr/local/texlive/2022/texmf-dist/tex/platex/jsclasses/jslogo.sty))
(/usr/local/texlive/2022/texmf-dist/tex/latex/url/url.sty)
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
(./sample.aux) (./sample.bbl) [1] (./sample.aux) )
Output written on sample.dvi (1 page, 896 bytes).
Transcript written on sample.log.

できました.
とりあえずここまでできればOKです.何かエラーが出たら解決しましょう.

LaTeX WorkShop

さすがにこの4回ビルドはダルすぎるので、自動でできるようにします.
latexmkrcを書くという方法もありますが、自分は複数のPCでVSCodeの設定を同期しておくほうが楽なので、次のような方法をとっています.

まずVSCodeにこちらの拡張機能をいれましょう
https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop

よくわかるsettings.jsonの設定

この拡張機能をうまいこと使ってやるには、あれこれ設定が必要です.
VSCodeの設定からsettings.jsonを開いて書き換え(書き足し)ましょう

ぼくのかんがえたさいきょうのsettings.json
  // ---------- LaTeX Workshop ----------
  "latex-workshop.intellisense.package.enabled": true, // パッケージやコマンドのインテリセンス有効
  "latex-workshop.latex.autoBuild.run": "onSave", // 保存時に自動ビルド
  "latex-workshop.latex.autoClean.run": "onBuilt", // ビルド時に一時ファイルを削除
  "latex-workshop.latex.outDir": "%DIR%", // ビルド時の出力先
  "latex-workshop.view.pdf.viewer": "tab", // PDFビューアをタブで開く
  "latex-workshop.bibtex-format.sort.enabled": true, // bibtexのソートを有効
  "latex-workshop.bibtex-fields.sort.enabled": true, // bibtexのフィールドのソートを有効
  "latex-workshop.latex.clean.fileTypes": [ // 生成する一時ファイルのうち削除する拡張子
    "*.aux",
    "*.bbl",
    "*.blg",
    "*.idx",
    "*.ind",
    "*.lof",
    "*.lot",
    "*.out",
    "*.toc",
    "*.acn",
    "*.acr",
    "*.alg",
    "*.glg",
    "*.glo",
    "*.gls",
    "*.ist",
    "*.fls",
    "*.log",
    "*.fdb_latexmk",
    "*.snm",
    "*.nav",
    "*.dvi",
    "*.synctex.gz"
  ],

  "latex-workshop.latex.recipes": [ // ビルドレシピ
    {
      "name": "standard",
      "tools": ["ptex2pdf", "pbibtex", "ptex2pdf", "ptex2pdf"]
    }
  ],
  "latex-workshop.latex.tools": [ // ビルドツール設定
    {
      "name": "ptex2pdf",
      "command": "ptex2pdf",
      "args": [
        "-interaction=nonstopmode",
        "-l",
        "-ot",
        "-kanji=utf8 -synctex=1",
        "-outdir=%OUTDIR%",
        "-halt-on-error",
        "-file-line-error",
        "%DOC%"
      ],
      "env": {
            "PATH": "/Library/TeX/texbin"
      }
    },
    {
      "name": "pbibtex",
      "command": "pbibtex",
      "args": ["%DOCFILE%", "-kanji=utf8"],
      "env": {
            "PATH": "/Library/TeX/texbin"
      }
    }
  ],

上の方の設定は、コメント読んでいただくとなんとなくわかるかと思いますが、保存時にビルドを自動でかけたり、一時ファイルを消し飛ばしたりする設定です.

BibTeXに関わるのはこのあたり

settings.json
"latex-workshop.latex.recipes": [ // ビルドレシピ
   {
     "name": "standard",
     "tools": ["ptex2pdf", "pbibtex", "ptex2pdf", "ptex2pdf"]
   }
 ],
 "latex-workshop.latex.tools": [ // ビルドツール設定
   {
     "name": "ptex2pdf",
     "command": "ptex2pdf",
     "args": [
       "-interaction=nonstopmode", //重大なエラー以外は警告として表示
       "-l",
       "-ot",
       "-kanji=utf8",
   "-synctex=1", //タブで開いたPDFとリンクできる
       "-outdir=%OUTDIR%",
       "-halt-on-error", //最初のエラーで処理を止める
       "-file-line-error", //エラーのスタイルをLaTeXWorkShopに合わせる
       "%DOC%"
     ],
     "env": {
           "PATH": "/Library/TeX/texbin"
     }
   },
   {
     "name": "pbibtex",
     "command": "pbibtex",
     "args": ["%DOCFILE%", "-kanji=utf8"],
     "env": {
           "PATH": "/Library/TeX/texbin"
     }
   }
 ],

"tools": ["ptex2pdf", "pbibtex", "ptex2pdf", "ptex2pdf"]が、先述した地獄の4回コンパイルを設定しているとこです.各引数は、//ビルドツール設定と書いてあるところの対応する項目を呼び出します.

正直最後に1回だけpdf化すればいいのでptex2pdfを3回使う必要もないのですが、まあ面倒なのでこれで済ましました.高速化したい人はいいようにやればいいと思います.

各引数はお好みで設定ください.
あとは.texをCtrl + Sで保存して自動ビルドされればOKです.F1をおしてView LaTeX PDF file in VSCode tabすればお隣にPDFが表示されます.

便利ツール紹介

BibTeX entry from URL

Google Chromeの拡張機能で、クリック一発でURLをBibTeX用に取得してくれる神ツールです.

https://chrome.google.com/webstore/detail/bibtex-entry-from-url/mgpmgkhhbjgkpnanlmlhibjfgpdpgjec/related

misc{BibTeXen61:online,
author = {},
title = {BibTeX entry from URL - Chrome ウェブストア},
howpublished = {\url{https://chrome.google.com/webstore/detail/bibtex-entry-from-url/mgpmgkhhbjgkpnanlmlhibjfgpdpgjec/related}},
month = {},
year = {},
note = {(Accessed on 02/01/2023)}
} 

BibDesk

TeXLiveに入っているGUIツールで.bibをダブルクリックすると起動します.
どんなパラメータ使えたんだっけなーと考える事なくGUIで参考文献を打ち込めます.

Discussion