BibTeXを連想配列に分解するスクリプトを書きました。
BibTeXとは?
$\TeX$で文献を引用する際に利用するツールです。
GoogleScholarからデータをコピペで持ってくる事ができるなど、便利な点が色々あります。
BibTeXについては以下がとても参考になります。
- BiBTeXとは
- Texで書く論文の引用にはbibtexがオススメな4つの理由
背景
Google Spread Sheetで論文を整理しようとした際、「BibTeXの項目で分解できれば表の管理ラクじゃないか?」と思ったことがキッカケです。
ということで、BibTeX形式を分解することにしました。
スクリプト
元々はGAS(Google App Script)のために書いたものですが、互換性があるJavaScriptとして記載します。
resoluteBibtex.js
functionresoluteBibtex(bibtex_source){// BibTeXソースを要素ごとの連想配列に分解varbibtex_source_tailcut=bibtex_source.replace(/}[\n]*}/,'');// 末尾の'} }'を削除varbibtex_splited=bibtex_source_tailcut.split(/},[\n]*/);varbibtex_contents={};varvalue,value_splited;for(varindexinbibtex_splited){value=bibtex_splited[index];// @xxxxx{label, となっている部分の対応if(value.charAt(0)=='@'){value_splited=value.split('{');bibtex_contents['@']=value_splited[0];bibtex_contents['label']=value_splited[1].substring(0,value_splited[1].indexOf(','));varnext_content_by_label=value_splited[1].replace(/[\w]*, */,'');bibtex_contents[next_content_by_label.replace('=','')]=value_splited[2];}else{value_splited=value.split('={');bibtex_contents[value_splited[0]]=value_splited[1];}}returnbibtex_contents;}
使用例
入力:BibTeX形式のデータ
出力:連想配列
// BibTeX形式のデータvarbibtex_source="@inproceedings{shvachko2010hadoop,
title={The hadoop distributed file system.},
author={Shvachko, Konstantin and Kuang, Hairong and Radia, Sanjay and Chansler, Robert and others},
booktitle={MSST},
volume={10},
pages={1--10},
year={2010}
}";varbibtex_contents=resoluteBibtex(bibtex_source);
実行結果
変数bibtex_contents
の中身は以下のようになっています。
// キー:値 で表示"@":"inproceedings","label":"shvachko2010hadoop","title":"The hadoop distributed file system.","author":"Shvachko, Konstantin and Kuang, Hairong and Radia, Sanjay and Chansler, Robert and others","booktitle":"MSST","volume":"10","pages":"1--10","year":"2010"
title
やauthor
といった項目名は上記の例以外でも対応しています。
まとめ
BibTeX形式を連想配列に分解するスクリプトを書きました。
JavaScriptやGoogle App ScriptでBibTeXを扱う場合にご利用ください。