🔬

【Zotero + BibLaTeX】和欧混在の文献リスト対応。理系レポートの引用スタイルを自動化 (実践編)

に公開

はじめに:なぜスタイルを自作するのか

Unicodeネイティブでフォント設定が容易な LuaLaTeX の普及に伴い、参考文献管理も古くからの pBibTeX ではなく、より高機能な BibLaTeX + Biber の組み合わせに変化しつつあります。しかし、 BibLaTeXは非常に強力な反面、「日本語の理系論文スタイル」への最適化がデフォルトでは不十分です。一方で、かつての標準であった junsrt (pBibTeX) は、日本語の扱いは完璧ですがUnicodeとの相性が良くありません。

そこで本記事では、LuaLaTeX + BibLaTeX というモダンな構成を使いつつ、言語判定(langid)を用いて表示するフォーマットを自動で切り替えるスタイル (.sty) を実装します。
今回はISO690(国際標準化機構による引用のルール)やバンクーバー方式(理系でよく使われる)に準拠した、シンプルで割とオーソドックスなスタイルにしました。加えて、物理学会誌の投稿規定に従ったスタイルファイルも作成しました。よければぜひご利用ください。

謝辞

本記事で紹介する.styファイルの作成にあたっては、梁震さんの記事日本語で論文を書く際のLaTeXテンプレートで紹介されている手法を大変参考にさせていただきました。 元の記事では人文社会の論文向けの汎用的な設定でしたが、本記事ではこれを自然科学分野での標準的でなるべくシンプルな内容という観点で、梁震さんのファイルを下にカスタマイズを行いました。素晴らしい知見を公開してくださった梁震さんに深く感謝いたします。

できること:言語に応じて自然な表記の参考文献リストを作る

言語に応じて、下のような切り替えが可能です。

  • 英語文献 \rightarrow Smith J, Doe A. (イニシャル表記・半角カンマ + 半角ピリオド)
  • 日本語文献 \rightarrow 田中 太郎,鈴木 次郎. (姓 名・全角カンマ + 全角ピリオド)
    実際のコンパイル結果はこのようになります。日本語の文献は全角ピリオドや全角カンマを使うことで自然な空白を出すことができます。

これを、「Zoteroから取り込んだデータを、ほぼ手直しせずに」 実現する方法を紹介します。

実行環境

  • PC: MacBook Air (M1, 2020)
  • OS: macOS Sequoia 15.6
  • エディタ: VS Code + LaTeX Workshop
  • TeXディストリビューション: TeX Live 2025 (LuaLaTeX)
  • Zotero: Version 7.0

実行手順

Step 0: Zoteroでの適切なデータ収集

今回のスタイルファイルは、.bibファイルの 「言語 (Langid)」 フィールドを見て、英語フォーマットと日本語フォーマットを自動で切り替えるため、Zoteroに保存するときにうまくそれが取得されている必要があります。以下のデータベースから、Zotero Connectorを使って取り込むと、言語の情報がうまく反映されます。

文献の種類 推奨ソース URL / 検索方法
英語論文 各ジャーナル公式サイト Nature, Science, Elsevier, Wiley 等
日本語論文 J-STAGE jstage.jst.go.jp
日本語書籍 CiNii Books ci.nii.ac.jp/books
英語書籍 WorldCat worldcat.org

取り込み後に、Zotero上で英語文献の言語フィールドにenenglishと書いてあることを確認してください。言語フィールドの値と適用結果は以下のとおりです。

  • en, english の場合:
    英語フォーマット(洋書・英語論文用)が適用されます。

  • ja, japanese, または 空欄 の場合:
    日本語フォーマット(和書・日本語論文用)が適用されます。

個人の経験的に日本語の論文は英語に比べて言語フィールドに値を入れないことが多いので、このような形で適用スタイルを決定しています。

Step1. styファイルの設置

下に設置された.styファイルをコピーするか、Githubでダウンロードするかしてこのようなディレクトリ構成にします。

https://github.com/hirafk/biblatex-mixed-langage-style

【クリックして展開】mybibstyle.sty のコード
% mybibstyle.sty
% --------------------------------------------------
% BibLaTeX スタイル定義ファイル
% --------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mybibstyle}[2025/01/01 My Custom BibLaTeX Settings]

% ==================================================
% ここから設定コード 
% ==================================================
\RequirePackage[
    backend=biber,
    style=numeric,
    minbibnames=999,
    maxbibnames=999,
    uniquelist=false,
    sorting=none,
    defernumbers=true,
    labelnumber=true
]{biblatex}
% 言語マッピング
\DeclareLanguageMapping{japanese}{english}


% 姓名の順序設定
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{default}{family-given}

% 著者名の表示形式
% 日本語: 姓 名 (スペース区切り)
% 英語: 姓, 名イニシャル (Einstein, A.)
\DeclareNameFormat{default}{%
  % 1. 名前の表示
  \iffieldequalstr{langid}{english}
    {\namepartfamily\space\namepartgiveni}%
    {\namepartfamily\space\namepartgiven}%
  \ifnumequal{\value{listcount}}{\value{liststop}}
    {} % 最後の著者なら何もしない
    {% 最後の著者じゃなければ区切りを入れる
       \iffieldequalstr{langid}{english}
         {\addcomma\space} % [英語] 半角カンマ + スペース
         {,}%             % [日本語] 全角カンマ (スペースなし)
    }%
}

% 複数引用の区切り([1, 2] のコンマ)
\DeclareDelimFormat{multicitedelim}{\addcomma\space}
% --------------------------------------------------
% 3. 表示形式
% --------------------------------------------------
\DeclareFieldFormat[article]{title}{#1}
\DeclareFieldFormat[book]{title}{#1}
\DeclareFieldFormat{journaltitle}{#1}
\DeclareFieldFormat[article,book]{pages}{#1} % ページ番号の表示形式 
\renewbibmacro{in:}{}
%========-巻や号数、電子ジャーナにおける識別番号の表示形式についてのマクロ==========
\DeclareFieldFormat[article]{volume}{#1}       % 巻
\DeclareFieldFormat[article]{number}{(#1)}     % 号を括弧
\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \printfield{number}%
}

%======論文======================================
\DeclareBibliographyDriver{article}{%
  \printnames{author}%
  \setunit{\adddot\addspace}
  \printfield[title]{title}
  \iffieldequalstr{langid}{english}
    {\setunit{\adddot\space}}%  英語: 半角ピリオド+スペース
    {\setunit{.}}%  日本語: 全角ピリオド
  % --- 雑誌名 ---
  \printfield[journaltitle]{journaltitle}%
  \iffieldequalstr{langid}{english}
    {\setunit{\adddot\space}}% 英語: 半角ピリオド+スペース
    {\setunit{.}}% 日本語: 全角ピリオド
  \printfield{year}%
\setunit{\addsemicolon\space}% 半角セミコロン
  \usebibmacro{volume+number+eid}%
\setunit{\addcolon\space} 
  \printfield{pages}%
  \usebibmacro{finentry}%
}
%=======書籍======================================
\DeclareBibliographyDriver{book}{%
  \printnames{author}%
  \setunit{\adddot\addspace}%  著者名と書名の間のピリオド
  % --- 書名 ---
  \printfield[title]{title}%
  % --- 判定: 英語かどうか ---
  \iffieldequalstr{langid}{english}
    {\setunit{\adddot\space}}% 英語: 半角ピリオド+スペース
    {\setunit{.}}% 日本語: 全角ピリオド
  \printfield{edition}%
  \iffieldequalstr{langid}{english}
    {\addcomma\space}
    {\setunit{,}}
  % --- 出版社 ---
  \printlist{publisher}%
  % --- 判定: 英語かどうか ---
  \iffieldequalstr{langid}{english}
    {\setunit{\addsemicolon\space}}% 英語: 半角セミコロン+スペース
    {\setunit{;}}%  日本語: 全角セミコロン
  % --- 出版年 ---
  \printfield{year}
  \usebibmacro{finentry}
}
ディレクトリ構成
project-root/
  ├── main.tex          # 論文の本文
  ├── mybibstyle.sty    # ★今回作成したスタイル定義ファイル
  └── references.bib    # 文献データベース

Step2. コンパイル

以下のようなプリアンプルにして、コンパイルすれば言語に応じて切り替わる参考文献リストの完成です。

main.tex
\documentclass[a4paper]{article}
\usepackage{luatexja}
\usepackage{mybibstyle}
\addbibresource{references.bib}
\title{タイトル}
\author{名前}
\date{\today}
\begin{document}
\maketitle
内容
\printbibliography[title={参考文献}]
\end{document}

応用:日本物理学会誌用にカスタマイズ

分野によっては、この文献の書き方は気に食わないという方もいると思います。ここでは、よくある書誌情報の書き方にカスタマイズする方法を簡単に紹介します。該当箇所を下のコマンドで置き換えるだけです。

% 雑誌名を斜体 (Italic) にする
\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}}
\DeclareFieldFormat[book]{title}{\mkbibemph{#1}} % 書籍名も斜体に

% 巻数 (Volume) を太字 (Bold) にする
\DeclareFieldFormat[article]{volume}{\textbf{#1}}

% 年号 (Year) をカッコで囲む → (2024)
\DeclareFieldFormat{year}{(#1)}

このようなカスタムを続けていくと、分野が異なり多少のルールが違っていてもすぐに対応できます。下が、日本物理学会誌投稿規定に従った.styファイルです。論文誌名を略称で表記するなどの細かいルールは満たせていないですが、概ね合っている結果になっています。

https://github.com/hirafk/jpsj-biblatex-style

【クリックして展開】myphys.sty のコード
% myphys.sty
% --------------------------------------------------
% 日本物理学会誌 (JPS) 風カスタムスタイル
% --------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myphys}[2025/01/01 JPSJ Style Settings]

% 1. 基本設定
\RequirePackage[
    backend=biber,
    style=numeric,
    sorting=none,        
    maxbibnames=999,     
    minbibnames=1,
    defernumbers=true,
    labelnumber=true
]{biblatex}

% 言語マッピング
\DeclareLanguageMapping{japanese}{english}

% 2. 著者名のフォーマット(ここが肝)
\DeclareNameAlias{default}{family-given}
\DeclareNameAlias{sortname}{family-given}

\DeclareNameFormat{default}{%
  % --- 言語判定 ---
  \iffieldequalstr{langid}{english}
    {% === 英語文献の場合 ===
       % 3人目まで表示、かつ総数が4人以上の場合は3人目で打ち切り
       \ifnumgreater{\value{listtotal}}{3}
         {\ifnumgreater{\value{listcount}}{1}
            {} % 4人目以降は何もしない(表示しない)
            {\namepartfamily\space\namepartgiveni}% 姓+名イニシャル
         }
         {\namepartfamily\space\namepartgiveni}% 3人以下ならそのまま表示
       % --- 区切り記号と et al. の処理 ---
       \ifnumgreater{\value{listtotal}}{3}
         {% 4人以上の場合
            \ifnumequal{\value{listcount}}{1}
              {\space et al.,} % 1人目の後ろに et al.
              {\ifnumequal{\value{listcount}}{\value{listtotal}}{}{\addcomma\space}}% それ以外はカンマ
         }
         {% 3人以下の場合
            \ifnumequal{\value{listcount}}{\value{listtotal}}
              {}
              {\addcomma\space}%
         }
    }
    {% === 日本語文献の場合 (全員表示) ===
       \namepartfamily\space\namepartgiven%
       \ifnumequal{\value{listcount}}{\value{liststop}}
         {}
         {,}%
    }%
}

% 書籍名のフォーマット(和欧で『』とイタリックを分ける)
\DeclareFieldFormat[book]{title}{%
  \iffieldequalstr{langid}{english}
    {\mkbibemph{#1}} % 英語: イタリック
    {『#1』}         % 日本語: 『 』
}

% 4誌名・巻数・年号の装飾
% 雑誌名は英語なら省略形をbibファイルに書く前提
\DeclareFieldFormat{journaltitle}{#1} 

% 巻数 (Volume) はボールド
\DeclareFieldFormat[article]{volume}{\textbf{#1}}
% 論文の年号は ( ) で囲む
\DeclareFieldFormat[article]{year}{(#1)}
%書籍の年号はそのまま
\DeclareFieldFormat[book]{year}{#1}
%論文のページ数はp.をつける
\DeclareFieldFormat[article]{pages}{\mkfirstpage{#1}}
\DeclareFieldFormat[book]{pages}{p.\mkfirstpage{#1}}
% 5. 記事(Article)のドライバ再定義(著者, 誌名, 巻, 頁 (年))
\DeclareBibliographyDriver{article}{%
  \printnames{author}%
  \setunit{\addcomma\space}% 著者名の後はカンマ
  \printfield{journaltitle}%
  \setunit{\space}% 誌名と巻の間はスペース
  \printfield{volume}%
  \setunit{\addcomma\space}% 巻とページの間はカンマ
  \printfield{pages}%
  \setunit{\space}%
  \printfield{year}% (年号)
  \usebibmacro{finentry}%
}

% 6. 書籍(Book)のドライバ再定義
\DeclareBibliographyDriver{book}{%
  \printnames{author}%
  \setunit{\addcomma\space}%
  \printfield{title}%
  \setunit{\space}%
  % 出版社と年を ( ) でくくる処理
  \printtext[parens]{%
    \printlist{publisher}%
    \setunit{\addcomma\space}%
    \printfield{year}%
  }%
  \setunit{\space}%
  \printfield{pages}%
  \usebibmacro{finentry}%
}
\endinput

物理学会誌の投稿規定に従った出力結果:

インストール方法(グローバル設定)

上で紹介したように、作成した .sty ファイルをプロジェクトごとにコピーして使うこともできますが、TeXの「個人用ツリー(TEXMFHOME)」に配置することで、どのディレクトリにあるTeXファイルからでも \usepackage{...} だけで呼び出せるようになります。

論文を量産する際の手間が省けるため、この設定をしておくことを強く推奨します。
例としてmybibstyle.styをグローバルに設定する方法を紹介しますが、物理学徒用のmyphys.styも同様に設定できます。

macOS の場合

MacTeX (TeX Live) の場合、標準のホームディレクトリ (~/texmf) ではなく、ライブラリフォルダ内の ~/Library/texmf に配置する必要があります。ここがよくあるハマりポイントです。

ターミナルを開き、以下のコマンドを実行して配置してください(mybibstyle.sty がカレントディレクトリにある想定です)。

# 1. 保存用ディレクトリを作成(Libraryの中に作るのがポイント)
mkdir -p ~/Library/texmf/tex/latex/mybibstyle

# 2. ファイルをコピー
cp jpsj_style.sty ~/Library/texmf/tex/latex/mybibstyle/

Windows の場合

Windows (TeX Live) をお使いの場合は、ユーザーフォルダの直下に texmf フォルダを作成して配置します。
エクスプローラーを使って、以下の手順でフォルダを作成してください。

  1. C:\Users\あなたのユーザー名\ (ユーザーフォルダ)を開く。
  2. その中に texmf というフォルダを新規作成する。
  3. さらにその中に texlatexmybibstyle と順番にフォルダを作成する。
  4. 最後に、作成した mybibstyle フォルダの中に mybibstyle.sty を入れる。

最終的なファイルの配置場所(パス)は以下のようになります。

C:\Users\ユーザー名\texmf\tex\latex\mybibstyle\mybibstyle.sty

設定の確認:
配置ができたら、コマンドプロンプト(またはPowerShell)を開き、以下のコマンドを入力してください。

kpsewhich mybibstyle.sty

これでファイルへのパスが表示されれば、インストール成功です。
以下のように、普通のパッケージとして使うことができます。

main.tex
\documentclass[a4paper]{article}
\usepackage{luatexja}
\usepackage{mybibstyle}% biblatexの設定などは全てこのパッケージに含まれています
\addbibresource{references.bib}% 文献データベース(.bib)の指定
\begin{document}
...
\printbibliography
\end{document}

まとめ

前回の記事からさらに発展し、参考文献の取得・保存から表示までをいくつかのクリック操作だけで行うことができるようになりました。また、.styファイルは誰でも簡単に編集できるので、このファイルにさらに手を加えて自分の思い通りのリストを作ることができます。最後までよんでいただきありがとうございました。

参考文献

これらの記事を参考にさせていただきました。この場を借りて改めて感謝申し上げます。

Discussion