文献データベース

PubMedからのインポート
Webアプリケーション
ローカルでやる場合
よくある問題
bibtex-mode で yomi などのオプショナルフィールドを付け加える方法
sixpack
設定
操作
har2nat
URMの文献スタイル
論文タイトルを文頭以外小文字に
著者名のファーストネームをイニシャルに
perl-Text-BibTeX
ファイルの読み込みと逐次処理
値の取り出し
試作
listbib
ichu
crossref
gPaper
Zotero
翻訳本
Bib2ML

PubMedからのインポート

Webアプリケーション

BibTeX形式に変換する

ローカルでやる場合

Pybliographerは書誌データベース管理ツー ルです。これはいくつかの書誌フォーマットをサポートしており GNOME 用の 快適なグラフィカルインタフェースを介して検索、編集、再フォーマットその 他が使用できる。

Pybliographerはその本質から多数の用途 (書誌検索者別 HTML を作成するなど)に拡張できる。これにはスクリプト例が 付いています。国際化、Medline サポート、LyXサポート、スピードアップ諸々 です。

PybliographerからPubMedの検索を行うこと ができ、その結果をインポートできる。

よくある問題

bibtex-mode で yomi などのオプショナルフィールドを付け加える方法

未検証だが、ここにメモっておく。

(setq bibtex-user-optional-fields
  '(("annote" "Personal annotation (ignored)")
  ("yomi" "Yomigana")
  ("location" "where it is (ignored)")
  ("memo" "Memorundum (ignored)")
))

sixpack

perl-Tk が必要。

インストール

設定

設定ファイル

操作

起動すると

%0 [0 of 0]>

上記のようなプロンプトがでるので、helpでコマンドを参照し、適当にimport やshowで試す。

-1>%6 [0 of 0] /tmp/pedi.bib>show 25
del:
last: ,
#             = 25
Bibtype       = Article
CiteID        = susumu03
Author        = 谷村 晋
Title         = 空間疫学アプローチは疾病対策にどのように役に立つか
Journal       = 日本熱帯医学会雑誌
Year          = 2003
 yomi = {たにむら}

日本語もOKの模様。-guiオプションをつけて起動するとTcl/Tk版のsinpackが 起動する。日本語は化け化け。

har2nat

既存のファイルが harvard スタイルを採用している場合、強制的に natbib に移行できるようにするLaTeXスタイルファイル。harbardにあってnatbibにな いコマンドを提供する。\usepackage{harvard}を \usepackage{natbib}\usepackage{har2nat}で置換できる。ただし、読み込む 順番を気をつけなければいけない。

URMの文献スタイル

URMSBJの文献スタイルの例は、ここにあります。これは、Vancouverスタイルと呼ばれるもので、幸いにも(vancouver.bst [詳細])がCTANにあります。これを使って

 \bibliographystyle{vancouver}
 \bibliography{使用するbibファイル名}

とすればOKです。

このvancuver.bstは、論文タイトルをbibファイルにかかれているとおりに出力します。

論文タイトルを文頭以外小文字に

Lacetなどに投稿する際には文頭以外は小文字にした方がよいでしょう。自動的に論文タイトルの文頭以外を小文字にするには、vancouver.bstの546行目付近の

 FUNCTION {format.title}
 { title
 %%duplicate$ empty$ 'skip$
 %%  { "t" change.case$ }
 %%if$
   "title" bibinfo.check
 }

この部分の%を削除します。

著者名のファーストネームをイニシャルに

vancouver.bstでは、例えば、bibファイルの中に Donald E. Knuth と書かれ ていれば、 Knuth DonaldEと出力してしまいます。bibファイルの中を D. E. Knuthと代えれば、 Knuth DE と本来の出力をします。vancouver.bstを 編集して、Donald E. KnuthでもD. E. Knuthでも Knuth DEと出力するように しましょう。vancouver.bstの467行目

"{vv~}{ll}{ ff{}}{ jj}"

"{vv~}{ll}{ f{}}{ jj}"

と編集します。

perl-Text-BibTeX

2006年11月 9日現在の最新バージョンは0.37 モジュールは下記の通り

モジュール名 説明
Text::BibTeX interface to read and parse BibTeX files
Text::BibTeX::BibFormat formats bibliography entries
Text::BibTeX::BibSort generate sort keys for bibliographic entries
Text::BibTeX::Entry read and parse BibTeX files
Text::BibTeX::File interface to whole BibTeX files
Text::BibTeX::Name interface to BibTeX-style author names
Text::BibTeX::NameFormat format BibTeX-style author names
Text::BibTeX::Structure provides base classes for user structure modules
Text::BibTeX::Value interfaces to BibTeX values and simple values

解説はCTANのText-BibTeX-0.37を参照する。

参考になりそうな http://doesen8.informatik.uni-leipzig.de/~david/reads/reads.pl から抜 粋

use Strict;
use Text::BibTeX;
$bibfile = new Text::BibTeX::File "reads.bbl"; #foo.bib
#$newfile = new Text::BibTeX::File ">newfoo.bib";

my $listAsHTML;
my %keywordsHash;
my %titleWordsHash;

while ($entry = new Text::BibTeX::Entry $bibfile) {
        next unless $entry->parse_ok;

        # hack on $entry contents, using various
        # Text::BibTeX::Entry methods
        # print "ok?\n";

        my $uwEntryAsHTML;

        my $key;
        my $author;
        my $title;
        my $year;
        my $url;
        my $booktitle;
        my $journal;
        my $address;
        my $keywordsString; my @keywords;
        my @titleWords; # split title with spaces

        # better syntax maybe:?
        # if ( $entry->exists ('title') ) { $title = $entry->get ('title'); }

        @authors = $entry->split ('author');

        $key = $entry->key();
        $author = $entry->get ('author');
        $year   = $entry->get ('year');
        $title = $entry->get ('title');
        $url    = $entry->get ('url');
        $booktitle=$entry->get ('booktitle');
        $journal = $entry->get ('journal');
        $address = $entry->get ('address');
        $keywordsString = $entry->get ('keywords');
        # inverted keyword listing
        @keywords = split(/, /,$keywordsString);
        foreach (@keywords) {
                my $currentIDs = $keywordsHash{$_};
                $keywordsHash{$_} = $currentIDs . " " . $key;
        }
        # inverted title word listing (the same as above)
        @titleWords = split(/ /,$title);
        @titleWords = map(lc, @titleWords); # all to lowercase # within nicer? no, here.
        foreach (@titleWords) {
                $_ = nicer($_);
                $_ = stem($_); # porter stemmer
                # if word has already IDs/keys, get them
                my $currentIDs = $titleWordsHash{$_};
                # add new ID/key to list of IDs
                $titleWordsHash{$_} = $currentIDs . " " . $key;
        }


        # to combine both journal and booktitle under one category to use with "In: "
        if (length($journal) > 0) {
                $within = $journal;
        } else {
                $within = $booktitle;
        }

        # whether we have a PDF or something else
        my $linktype;
        if (substr($url, length($url)-4) eq ".pdf") {
                $linktype = "pdf";
        } else {
                $linktype = "link";
        }
        # use url als linktype (forget the stuff ahead)
        $linktype = $url;

        # foreach(@authors) { print "$_, "; }
        # print "$author ($year) $title <$url>\n";
        $uwEntryAsHTML = "<div id=\"$key\" class=\"BibItem\">\n<uw:publication>\n";
        $uwEntryAsHTML.= "<span class=\"Author\"><uw:author>$author</uw:author></span>";
        $uwEntryAsHTML.= "<span class=\"Year\"> (<uw:year>$year</uw:year>)</span>";
        $uwEntryAsHTML.= "<span class=\"Title\"><uw:publicationTitle>$title</uw:publicationTitle></span>";
        if ($within) { $uwEntryAsHTML.= "<span class=\"TitleSecondary\"><uw:forumName>$within</uw:forumName></span>"; }
        if ($address) { $uwEntryAsHTML.= "<span class=\"Address\"><uw:forumLocation>$address</uw:forumLocation></span>"; }
        $uwEntryAsHTML.= "<span class=\"URL\"><uw:file><a href=\"$url\">$linktype</a></uw:file></span>\n";
        $uwEntryAsHTML.= "</uw:publication>\n</div>\n\n";
        $listAsHTML.= $uwEntryAsHTML;

        # $entry->write ($newfile);
}

ファイルの読み込みと逐次処理

use Text::BibTeX;
$bibfile = new Text::BibTeX::File "foo.bib";
$newfile = new Text::BibTeX::File ">newfoo.bib";
while ($entry = new Text::BibTeX::Entry $bibfile)
{
   next unless $entry->parse_ok;
   Text::BibTeX::Entryのメソッドを使って処理
   $entry->write ($newfile);
}

値の取り出し

use Text::BibTeX;
$entry = new Text::BibTeX::Entry;

preserve_valuesフラグを1に設定。これで、値を取り出すときに、文字列では なくText::BibTeX::Valueオブジェクトになっている。

$entry->parse ($filename, $filehandle, 1);

値を取り出す。文字列ではなくText::BibTeX::Valueオブジェクトになってい ることに注意。

$value = $entry->get ($field);

Valueオブジェクトの処理

@all_values = $value->values;
$first_value = $value->value (0);
$last_value = $value->value (-1);

試作

#!/usr/bin/perl
use strict;
use Text::BibTeX;
my $bibfile = new Text::BibTeX::File 'test.bib'    # open file
      or die "test.bib: $!\n";
my $entry;
while (my $entry = new Text::BibTeX::Entry $bibfile)
{
                next unless $entry->parse_ok;
                print $entry->key(), "=>";
                print $entry->get ('title'), "\n";
}

出力結果

$ perl bibtext.pl
seki2002=>岡山県下における診療科別医療施設の分布と年次推移
uphoff04=>{Are influenza surveillance data useful for mapping presentations}
lexical buffer overflowed (reallocating to 4000 bytes)
odoi04=>Investigation of clusters of giardiasis using GIS and a spatial scan statistic
brody04=>{Breast cancer risk and historical exposure to pesticides from wide-area applications assessed with GIS}

{}がついているのは、2重括弧になっているデータだから。日本語大丈夫っぽ い。どうやら、簡単にbibファイルをparseできそうなので、研究業績書自動作 成システムができそう。特定の項目を削除するPerlスクリプトでも手始めに書 くか。

研究業績書の自動作成システムは、perlでTeXの雛形を吐いて、その中にbibファ イルからの出力を混ぜる。bibファイル以外の部分は、\include{}で別ファイ ルとして書くようにする。科研費LaTeXなみにうまくいく。

listbib

CTANにあるlistbibは、bibファイルの一覧を作成するスタイルファイルとプロ グラム。platexやjbibtexに対応させるために、一部変更する必要がある。

1. テンプレートファイルであるlistbib.texの\begin{document}直下に、 \bibliography{jplain}を追加する。これがないと、listbib.bstを読みに行き、 エラーになる。 1. シェルスクリプトlistbibのlatexをplatexに、bibtexをjbibtexに書き換え る 1. デフォルトの出力dviは、listedbibs.dviになっている

ichu

crossref

crossref の仕様がbstごとに異なり、複数のエントリからcrossrefされている エントリは、それ自体が引用されていなくても、jplainやjunsrtの場合、文献 リストに並ぶ。

jpainやjunsrtだと

のように引用していない、crossrefされている元のエントリが、 [4] として出現 する。さらに、 [1][2] の項目の中に [4] が入れられる。

jeconだと

のように、元のエントリが出現するが、文献リストに引用記号が埋め込まれる ことはない。

crossrefされる参照元が1回だけ読み出されるときは、参照しているエントリの 中に入れ込まれるが、複数回の場合は、入れ込まれずに、文献リストに文献と して追加される。ややこしい。業績集をつくるときは、stringsで逃げた方がい いのかも。美文書入門では、coressrefがややこしくなった場合、noteを代わり に使うように書かれている。

gPaper

http://gpapers.org/ GnomeベースのPDF管理ソフト。iTunesのPDF版と考えれば よいそうだが、iTunesが未だによく分からない。

$ sudo apt-get install gpapers
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ gpapers はデータベースには存在しますが、利用できません。
おそらく、そのパッケージが見つからないか、もう古くなっているか、
あるいは別のソースからのみしか利用できないという状況が考えられます
E: パッケージ gpapers にはインストール候補がありません
残念。

Zotero

BibTeXとは直接関係がないが、高機能な文献管理ソフトで、Firefoxのプラグイン。

翻訳本

jauthorjtitle などを使う。Jecon.bstで有効。

@Book{fujita99jp:_spatial_econom,
  author =       {Masahisa Fujita and Paul R. Krugman and Anthony
                  J. Venables},
  title =        {The Spatial Economy},
  publisher =    {MIT Press},
  address =      {Cambridge, MA},
  year =         1999,
  jauthor =      {小出博之},
  jtitle =       {空間経済学},
  jpublisher =   {東洋経済新報社},
  jyear =        2000
}

Bib2ML

bibファイルからデータベース的なHTMLを作成するユーティリティ。bibファイルに書かれた文献をWWWブラウザで対話的に閲覧できるようになる。


更新:2009年 3月 24日 火曜日 13:36:55 JST  Top