BibTeXの.bstをRuby言語でおきかえる実装としてRubyBTeXというのがあるようだ.ちょっと遊んでみた.
使い方は普通のBibTeXと同様.つまり,まずソースを用意し.
\documentclass{jsarticle}
\begin{document}
\cite{jtexbook}
\bibliographystyle{plain}
\bibliography{texbook}
\end{document}
コンパイルする.
platex test.tex ruby rubybtex test platex test.tex platex test.tex dvipdfmx test.dviこれで出来るようだ.ちなみにtexbook.bibはTeX Wikiからもってきたもので,Shift_JISで保存してある.またkpathseaは動かないので,texbook.bibはカレントディレクトリにおいてある必要がある.
UTF-8だとinvalid byte sequence in windows-31Jと言われたので,
ruby -Eutf-8 rubybtex testとしてみたら動いた.
が,これだけではもちろん面白くないというか普通にbibtex叩けばいいだけなので,スタイルを少しいじってみる.上で指定したplainは既に用意されていて,plain_bst.rbというファイルが実体.おおまかには次のように書くようだ.
require_relative 'rubybsup.rb'
$entrytypes = ["article","book"]
$styles['article'] = "(:[:author:].:)(:\n\\newblock [:title:]:).(:\n\\newblock {\\em [:journal:]}:)(:, [:volnumpage:]:)(:, [:year:]:).(: [:note:].:)"
$styles['book'] = "(:[:book_author:].:)(:\n\\newblock {\\em [:title:]}.:)(:[:volume:]:)(:, [:chapterpages:]:)(:\n\\newblock[:numberseries:]:)(: [:publisher:]:)(:[:address:]:)(:[:edition:]:)(:, [:year:]:)(:[:note:]:)."
class Formatter
include NameFormatter
def f_author
author = $db[$cite]['author'];
if author == nil then return nil; end
name,number = format_names(author,'(:[:ff||~:] :)(:[:vv||~:]:)(:[:ll||:]:)(:, [:jj||:]:)',[' and ',' and '])
return name
end
def f_title
return $db[$cite]['title'];
end
def f_journal
return $db[$cite]['journal']
end
(他色々)
def widestlabel
return $cites.size.to_s
end
def sort
p $cites;
$cites.sort!{|a,b|
$db[a]["author"] <=> $db[b]["author"]
}
p $cites;
end
end
ええと,面倒になって色々適当ですごめんなさい.$entrytypeに文献の種類を配列で,$stylesでざっとしたstyleを指定するようだ.細かな挙動はFormatterクラス内で定義する.$stylesは(:A[:B:]C:)という形のが基本.これはFormatterクラス内のf_Bを呼び出し,戻り値がnilならば空文字列に,そうでなければA(f_Bの戻り値)Cに化ける.styles内で\bibitemの出力はする必要無くて,勝手にやってくれる.ただし\bibitem{ラベル名}で固定なので,alpha_bst.rbみたいなのは実装できない模様…….
Formatterクラスで定義しなければならないのは,stylesに現れているf_***と,widestlabel/sort.sortはそのままで,文献一覧の並び替えをする.widestlabelは\begin{thebibiliography}{*ここ*}を指定する.関数内では,次が参照可能.データベースの項目の呼称はbiblatexのそれにあわせる.
- $db:データベース.$db[エントリキー][フィールドキー]でアクセス可能.
- $cites:引用されている文献のエントリーキー一覧.
- $cite:(f_***だけかな?)今処理している文献のエントリーキー
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です