あなたが探しているのは、金のスクリプトですか、銀のスクリプトですか

…いいえ、ただのPerlスクリプトです


... Nein, ich suche freie Perl Scripts


  1. BibTeXとPerlを使って論文リストを作る

    水谷の文献リストはTeXで利用できるデータベースBibTeXを元にして作成しています。

  2. 工技院時代の研究成果発表データ(csvファイル)から自分の名前が含まれる行を抜き出す

    工技院時代からいる産総研の人用。 イントラからダウンロードしたデータのチェックに使います。水谷はWindows上でCygwinを入れてBashの上で動かしています。

  3. Nanoscope の断面ファイルをPerlでテキスト化する

    PerlはBinaryの取り扱いもできるんですね。 NanoScopeのツールでもテキストにできるのですが、 ファイル名の付け替えが面倒だし、横軸の数値は計算する必要があります。 使い方の説明はしませんが、、、

  4. SciFinderで文献検索して落としたrtfファイルからbibファイルを生成する

    レビュー論文で引用をたくさんするときには便利でしょう。 これも使い方の説明はしませんが、、、

  5. TeXで書いたAbstractをテキストに変換する

    dvi2ttyを使うのも手ですが、段落ごとにつなげたテキストにしてしまうので 送った先でWORDで読むにはこちらのほうが見やすいかも。

    2004.3.9 Listのバグ修正で発生した番号付けのバグ修正
    必要に駆られて、引用文献と図番だけは直しました。 スパゲッティ状態がますます悪化。 まだ数式の番号付けはうまくいかないはず。 (数式の入ったファイルを処理する必要があるまで待ってください)

    2004.1.12 Listのバグ修正
    itemize, enumerate の二重のリストに対応。 リスト環境に空行があると止まっていたのもfix。 でもスクリプトはぐちゃぐちゃである。

    2003.9.30 citeのバグ修正
    これで Abstract だけでなく、長めの論文でもなんとか使えるでしょう。 まだバグあるし、数式、図はダメだけど。

  6. 重複行を除きアルファベット順に並べかえる

    入力ファイルをソートして打ち出すには、ミニマムで、

    print sort(<>);
    でできてしまう。Perlエライ。

    重複行を取り除くには、ちょっと複雑にする必要がある。

    … unless $seen{$_}++
    最初 $seen は空っぽ。 初めての行の時、$seen{$_}が偽なのでインクリメントされて 1 (真)になる。 重複した行が現れると $seen は真なので unless の前のコマンドは実行されない。

  7. 平均値と標準偏差を求める

    一行に数字を一つだけ書いたデータファイルを処理する。 データファイルの行の先頭に#か%を書くとコメントになります。

  8. ヒストグラムを作る

    フォトンカウンティング用に作ったので整数だけ。 上のスクリプトを拡張しました。

  9. 文章に混じっている2バイト文字を退治する

    > jperl -ne "tr/A-Za-z0-9()?!/A-Za-z0-9()?!/;print;" original.txt > new.txt
    これは DOS 窓で動かします。

  10. スペースデータベースで場所コードを調べる
    産総研企画本部のサイトからスペースデータベースで第四事業所、ナノテクノロジー研究部門で検索し、出てきた表をCSVに変換して元テキスト(basho.txt)とする。 これには余分なものが入っているのですっきりした表にするスクリプト
    % jperl basho.pl basho.txt > temp.txt
    みたいに使う。
    CSVの取り扱いは要注意。
    abc,"123","456,789",xyz
    みたいなデータをちゃんと取り扱うのは難しい(split(/,/)とかsplit(/","/)ではうまくいかない)。 こことかここを参考にしました。
    use Text::ParseWords; 
    …
    @space = quotewords(",", 0, $_);
    
    が一番簡単かな。

  11. BibTeX クリニック(暫定版)
    【症状】
    
    1. 論文を書いていて、文章の追加・削除、段落の入れ替えをしているうちに
       文献の引用番号を手で付け替えたため、文献番号が混乱し記憶喪失になった。
    
    2. 引用文献リストの書式が雑誌によって異なる。代表的なものとして物理系、化学系、
       イギリス式、細かいところでは年号をページ数の前に置くか後ろに置くか、区切りが
       コンマだったり、セミコロンだったり、コロンを使うといったつまらない違いが
       あって、別の雑誌用に直しているうちにストレスが溜まり胃が痛くなってしまった。
    
    3. 引用する文献番号の書き方にも、上付数字だけ、上付きと丸かっこ閉じとか角かっこ
       でそのままなどいろいろあって、間違っているから直せといわれて頭痛がした。
    
    4. 連続した引用文献番号を表示するのに[1-10]のように処理したいのに、どうやっても
       [1,2,3,4,5,6,7,8,9,10] となってしまうので血圧が上がった。
    
    上のような症状でお悩みの方のために BibTeX はあります。
    もちろん少々 TeX を使う必要がありますが、、、
    (実は 1,2 が BibTeX の守備範囲であり、3,4 には TeX のスタイルファイルを使います。)
    
    【治療法】
    
    ・データベースファイル(*.bib)を作成する。
    ・参考文献リストのスタイルファイル(*.bst)を用意する。
    ・引用の書式のスタイルファイル(cite.sty, overcite.sty)を用意する。
    
    これだけで上の1-4の問題を完全にクリアできます。
    
    まず 4 の症状に効く特効薬は、cite.sty です。TeX文書のはじめ(プリアンブル)に
       \usepackage{cite}
    と書くだけで、お望みの表示が出来ます。
    
    cite.sty の効用は、この他にもあります。
    文献番号は最初に \cite{ref1,ref2} と引用された順番につけられますが、cite.sty 
    を使わないと、原稿の後半で  \cite{ref2,ref1} と引用すると、表示が[2,1]のように
    なってしまいます。cite.sty を使うと自動的に番号の小さい順[1,2]と直してくれます。
    
    例えば上付きのかっこなし数字であれば、同じくプリアンブルに
       \usepackage{overcite}
    と引用の書式を指定します。
    ちょっと難しい「上付き数字丸かっこ閉じ」にも対応する sty があると思うのですが、
       \usepackage{cite}
       \makeatletter 
       \def\@cite#1{\textsuperscript{#1)}} 
       \makeatother 
    という四行をプリアンブルにコピペすればOKなはず。この技は応用が効きます。
    (例えば、\def\@cite#1{\textsuperscript{【#1】}} なんてこともできる)
    
    さらに参考文献リストの括弧をデフォルトの[1]から1)に変更するには、
       \usepackage{cite}
       \makeatletter 
       \def\@cite#1{\textsuperscript{#1)}}
       \renewcommand*{\@biblabel}[1]{#1)\hfill}%
       \makeatother 
    とします。
    
    次に、参考文献を入れたい場所に
       \bibliography{stm_sam}% 文献データベース(拡張子 .bib は省略)
       \bibliographystyle{prsty} % PRL用の文献リスト(拡張子 .bst は省略)
    のようにbibファイルとbstファイルを指定します。
    
    さて、上の準備を行った論文 test.tex ファイルが用意できたら、まずは
    TeXをかけてauxファイルを作成します。
       C> platex test
    これで test.aux ができます。
    BibTeXは、auxファイルを参照して文献リストファイル test.bbl を作成します。
       C> jbibtex test
    TeXをもう一回起動すると、文献リストを含んだdviファイルを作製しますが、
    この段階ではまだ番号が順番になっていません。
    番号の代わりに[?]と表示されることもあります。
       C> platex test
    文献番号を順番に付け直すために再度TeXをかければできあがり。
       C> platex test
    dvioutなどで作成された文書を確認して下さい。
    
    【効用】
    
    論文を見直して、ここに一つ文献を引用した方が良かったと思ったら、
    もう迷うことはありません。
       \cite{newref}
    (newrefは、データベースbibに入っている引用したい文献のタグ)
    としておけば、BibTeXがきちんと番号をつけ、リストを作ってくれます。
    この文章はいらないけど、文献を引用しているから削っちゃうと文献番号を
    前にずらさなくちゃ、面倒だからあんまり必要じゃないけど埋め合わせに
    別の文献を入れておこう、、なんて考える必要もありません。
    
    万が一、PRLにrejectされた論文をJJAPに出し直すときは
       \bibliographystyle{prsty} % PRL用の文献リスト
    を
       \bibliographystyle{jjap} % JJAP用の文献リスト
    に書き換えて
       C> platex test    *スタイルが変わったことを aux ファイルに書き込む
       C> jbibtex test   *新しいスタイルで文献リストを作成
     ( C> platex test )  *文献の番号が変わらないときは省略可
       C> platex test
    とすれば、すぐに再投稿できます。
    (本当は著者名などJJAPのスタイルファイルに従って書き直さないと
    いけないんだけれど、、、)
    
    それから、論文を tex ファイルで送る場合には、
       \bibliography{stm_sam}
       \bibliographystyle{prsty}
    の部分を作成された bbl ファイルの中身
       \begin{thebibliography}{10}
         ・・・・・・・
       \end{thebibliography}
    と置き換えておいたほうが間違いがなくてよいでしょう。
    
    【BibTeX で(まだ)できないこと】
    
    これほど強力な BibTeX ですが、対応できないことがいくつかあります。
    もちろんそれは自動化できないということで、TeX のレベルで手作業で
    修正すればどんな形式にでも組むことができます。ただし、この手作業の
    修正は、原稿作成の最終段階で行うことです。原稿を修正して再度 BibTeX 
    を必要とした場合、手作業をやり直さなくてはならなくなるからです。
    
    例えば、一つの文献番号に2つ以上の文献を(a)…,(b)…,(c)…と列記する
    なんてことをやりたいときには、列記する文献はいつも連続して cite しておき、
    最終段階で bbl ファイルを手で修正します。もっとも、こんなやっかいな文献
    の引用の仕方を規則として要求されることはないでしょう。思うに、文献を増や
    すことで文献番号の順送りなど管理が面倒になるのを避けるために容認された
    形式ではないでしょうか。
    

    もう一つ、例を挙げると、Christoph Smith のイニシャルを省略して、Ch. Smith にしたいというのも難しい。自動化しようとしたらbibファイルの中で Ch.~Smith と 定義しておくくらいしかないんじゃないかな。イニシャルの省略規則の例外は まだあるかもしれませんが、作成したbllファイルを手で直すか、漏れたものは proof段階で訂正するしかないでしょう。でも、C. Smith でも許容範囲だと思います。

    【BibTeX と pdf による文献管理】
    最近はたいていの論文を pdf ファイルでダウンロードできる。古い論文もスキャナーを使って pdf ファイルに変換できる。論文誌からコピーした紙のファイルではなく、コンピュータのハードディスクの中に論文のデータベースができてしまう。 論文の管理には BibTeX の bib ファイルが使える。 bib ファイルには、文献情報+アルファ、つまり検索に使うキーワードや、論文内容の簡単なメモを書くこともできる。著者の名前とかタイトルの一部でも思い出せば、bib ファイルを検索して目的の文献を見つけだすことができる。
     
    ここで、タグ(下の例では davis1998)は文献固有の呼び出しキーであるが、これを pdf のファイル名と一致させておけば(例えば davis1998.pdf)、ファイル検索して目的の pdf ファイルを簡単に探し出せる。 画面上で随時参考文献の内容をチェックして引用することができるのだ(LaTeX では、\cite{davis1998}と入力すればよい。参考文献表記のフォーマットはBibTeXにおまかせである)。 これで重い文献のバインダーを持ち運ばなくても、ラップトップ一つでどこでも論文が書ける(はず)。

    bib ファイル記述例

    
    Electron transfer from electron-donor to electron-acceptor 
    molecules via a molecular 'bridge'
    PPVのβ値として0.04、DNAは 0.2--1.4
    @article{ davis1998,
    author = "William B. Davis and Walter A. Svec and Mark A. Ratner 
    and Michael R. Wasielewski",
    journal= "Nature",
    volume = "396",
    title =  "Molecular-wire behaviour in p-phenylenevinylene oligomers",
    year  =  1998,
    pages =  "60-63"
    }
    


E-mail: W.Mizutani@aist.go.jp
[Return]