LoginSignup
1
3

文献に英語と日本語が混在する論文などをTeXで書くための一つのやり方

Last updated at Posted at 2024-05-17

はじめに

TeXを使って論文などの学術的な文章を書くとき、英語と日本語の文献の両方を扱いつつ正確に文献情報を掲載しようとすると、いろいろな困難が伴います。

特に、Chicago Manual of Style(以下CMOS)のように細かく定められた引用スタイルを採用しようとすると、手作業での修正が多数発生し、煩雑になってしまうことがあるかと思います。

この記事では、私が自分で使用するために開発した1つの解決策を紹介してみたいと思います。

『テクノロジーの〈解釈学〉』という長めの論考の草稿で用いた例はこちらです。

今回採用したCOMS(Notes and Bibliography)のサンプルはこちらに掲載されています。

なお、ここで紹介する方法は以下のような環境での使用を想定していますが、他の環境でも応用できます。

準備

環境構築

まず、必要なツールをインストールしましょう。

  1. Citation Style Language(CSL)の非公式多言語拡張仕様であるCSL-Mに対応したプロセッサ「citeproc-lua」を、リポジトリの説明に従ってインストールする
  2. 日本語と英語の両方に対応したCSLファイル「chicago-fullnote-bibliography-short-title-subsequent-ja.csl」をダウンロードして適切な場所に配置する
  3. (もしまだであれば)Better BibTeXをインストールする

文献ファイルの準備

次に、文献ファイルを準備しましょう。

  1. コレクションを右クリック→メニューから[Export Collection...]を選択
  2. Formatに「Better CSL JSON」を選択→[OK]ボタンをクリックして出力する

使い方

TeXソース

例を以下に示します。ファイル名などはそれぞれの環境に合わせて変更してください。

% 日本語を使用するための設定
\documentclass[a4paper,xelatex,ja=standard]{bxjsarticle}

% TeXでCSLファイルを使用するための設定
\usepackage{citation-style-language}
\cslsetup{style = chicago-fullnote-bibliography-short-title-subsequent-ja.csl}
\cslsetup{locale = en}

% 文献ファイルを指定
\addbibresource{example.json}

\begin{document}

% 引用
D’Arcusは〜と報告した \cite{ITEM-1}% 文献目録を出力
\printbibliography

\end{document}

コンパイル

xelatex example.tex
citeproc-lua example.aux
xelatex example.tex

後処理

上記では対応できない次のようなケースがあります。本当はもっとエレガントな解決法を採用したいのですが、今のところ見つからないため、暫定的にZoteroで文献を登録する際に若干特殊な入力方法を採用しつつ、Pythonスクリプトで後処理をかけることで対応します。

著者名のカタカナ表記における中黒

次のように入力する。

(last) キム
(first) ・チョヨプ

なお、ラテン系の著者名等はそのままアルファベットで記載することを想定しているため、ここで対象となるのは韓国など「姓・名」の順で記載する場合に限定されます。

編著者

「Author」を選択した上で、最後の編著者に:編著をつけます。

(last) 鈴木
(first) 真紀:編著

監訳者

「Translator」を選択した上で、最後の監訳者に:監訳をつけます。

(last) 鈴木
(first) 真紀:監訳

その他

上記そのままだと、監訳の場合鈴木真紀:監訳:翻訳のようになってしまうだけでなく、書名における区切りやURLの表示など、いくつかの問題があります。これらを解決するために、次のPythonスクリプトを使用します。

その他に次のような問題がある。これらについてスクリプト上で対応する。

  • 書名における区切りなど意図的に入れた半角スペースが無視されてしまう
  • \bibitemタグで始まるセクションにおいて、その内部のURLに\urlタグが適用されない
  • \cslcitationタグで始まるセクションにおいて次のような問題がある
    • の後に不要なが入ってしまう
    • 」、『になるべきところが」『 になってしまう(書籍に収録された論文など)
    • 」…:訳となるべきところが 」、…:訳 になってしまう(書籍ではなく論文の翻訳者)

Pyhtonスクリプト

次のスクリプトで、.bblファイルを書き換えます。

update_bbl.py
import re
import sys
import shutil


def update_bbl_content(content):
    # 日本語文字の後の単一スペースに \mbox{ } を挿入
    # Unicode範囲を考慮し、日本語(漢字、ひらがな、カタカナ)、及び全角記号を対象とする
    content = re.sub(
        r"([\u3000-\u303F\u4E00-\u9FFF\u3040-\u309F\u30A0-\u30FF]) ([\u3000-\u303F\u4E00-\u9FFF\u3040-\u309F\u30A0-\u30FF])",
        r"\1\\mbox{ }\2",
        content,
    )

    # `\cslcitation` 内の `』、` を `』` に置換
    content = re.sub(r"(\\cslcitation\{[^}]*\}.*?『[^』]*)(』)、", r"\1\2", content, flags=re.DOTALL)

    # `\cslcitation` 内の `」、…:訳` を `」…:訳` に置換
    content = re.sub(r"(\\cslcitation\{[^}]*\}.*?)」、([^」]*:訳)", r"\1」\2", content, flags=re.DOTALL)

    # `\cslcitation` 内の `」『` を `」、『` に置換
    content = re.sub(r"(\\cslcitation\{[^}]*\}.*?)」『", r"\1」、『", content, flags=re.DOTALL)

    # `\cslcitation` 内の `:監訳:訳` を `:監訳` に置換
    content = re.sub(r"(\\cslcitation\{[^}]*\}.*?):監訳:訳", r"\1:監訳", content, flags=re.DOTALL)

    # `\bibitem` 内の `:監訳:翻訳` を `:監訳` に置換
    content = re.sub(r"(\\bibitem\{[^}]*\}.*?)(:監訳):翻訳", r"\1\2", content, flags=re.DOTALL)

    # `\bibitem`タグで始まるセクションを見つけ、その内部のURLだけを変換
    content = re.sub(
        r"(\\bibitem\{[^}]*\}.*?)(\\url\{([^}]*)\})",
        lambda match: match.group(1) + r"\texttt{" + match.group(2) + "}",
        content,
        flags=re.DOTALL,
    )

    return content


def process_bbl_file(filename):
    # ファイルを読み込む
    with open(filename, "r", encoding="utf-8") as file:
        content = file.read()

    # 内容を更新
    updated_content = update_bbl_content(content)

    # オリジナルのファイルをバックアップ
    shutil.copy(filename, filename + ".org")

    # 更新された内容をファイルに書き込む
    with open(filename, "w", encoding="utf-8") as file:
        file.write(updated_content)


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python update_bbl.py filename.bbl")
        sys.exit(1)

    filename = sys.argv[1]
    process_bbl_file(filename)

コンパイル

全ての処理をまとめると次のようになります。

xelatex example.tex
citeproc-lua example.aux
python3 update_bbl.py example.bbl
xelatex example.tex

おわりに

この記事で紹介したやり方を使えば、英語と日本語の文献が混在する文献の取り扱いがある程度楽になるはずです。必要とする人は限定的かもしれませんが、該当する方はぜひ試してみてください。また、もっとよいやり方をご存じの方がいらっしゃったら、コメントなどでお知らせいただければ幸いです。

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