はじめに
TeXを使って論文などの学術的な文章を書くとき、英語と日本語の文献の両方を扱いつつ正確に文献情報を掲載しようとすると、いろいろな困難が伴います。
特に、Chicago Manual of Style(以下CMOS)のように細かく定められた引用スタイルを採用しようとすると、手作業での修正が多数発生し、煩雑になってしまうことがあるかと思います。
この記事では、私が自分で使用するために開発した1つの解決策を紹介してみたいと思います。
『テクノロジーの〈解釈学〉』という長めの論考の草稿で用いた例はこちらです。
今回採用したCMOS(Notes and Bibliography)のサンプルはこちらに掲載されています。
なお、ここで紹介する方法は以下のような環境での使用を想定していますが、他の環境でも応用できます。
- XeLaTeX
- Zotero
準備
環境構築
まず、必要なツールをインストールしましょう。
中心となるのは、Citation Style Language(CSL)の非公式多言語拡張仕様であるCSL-Mに対応したプロセッサ「citeproc-lua」です。そのLaTeXパッケージ「citation-style-language.sty」は、TeX Live 2024(およびそれを基にしたMacTeX 2024など)に含まれています。citeproc-luaは発展途上にあるため、例えば次のようにするなどして更新しておきましょう。
sudo tlmgr update --self --all
もし、何らかの事情でアップデートできない場合には、リポジトリの説明に従ってインストールしましょう。
次に、日本語と英語の両方に対応したCSLファイル「chicago-fullnote-bibliography-short-title-subsequent-ja.csl」をダウンロードして適切な場所に配置します。
このほか、(もしまだであれば)Better BibTeXをインストールしましょう。
文献ファイルの準備
次に、文献ファイルを準備しましょう。
- コレクションを右クリック→メニューから[Export Collection...]を選択
- 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
ファイルを書き換えます。
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
おわりに
この記事で紹介したやり方を使えば、英語と日本語の文献が混在する文献の取り扱いがある程度楽になるはずです。必要とする人は限定的かもしれませんが、該当する方はぜひ試してみてください。また、もっとよいやり方をご存じの方がいらっしゃったら、コメントなどでお知らせいただければ幸いです。