# BibTeX鍵(キー)生成機構の自作

JabRef設定の「BibTeX鍵の生成」タブでは、BibTeXラベルの自動生成に使用されるフィールドを設定することができます。パターンは、標準的な項目型それぞれに対して設定することができます。

## 鍵(キー)パターン

パターンには、特定の項目フィールドを鍵(キー)内のその場所に入れることを示すフィールドマーカーの他、好きな文字列を含めることができます。フィールドマーカーは、[volume]のように、通常、フィールド名を角括弧で囲ったものです。鍵を生成するときに、項目内でフィールドが定義されていなければ、フィールドマーカーには何も挿入されません。

フィールド中の特定部分を抜き出す特殊フィールドマーカーがいくつか用意されています。これらを下記に列挙します。追加したい特殊フィールドマーカーがありましたら、ぜひお知らせください。

特殊フィールドマーカー

- [`auth`]: 第1著者の姓
- [`authors`]: 全著者の姓
- [`authorLast`]: 末尾著者の姓
- [`authorsN`]: N人めの著者までの姓。それよりも多い著者がいる場合は、その後に"EtAl"を付けます。
- [`authorsAlpha`]: BibTeXスタイル「alpha」に対応します。著者1名の時：姓の最初の3文字。著者2〜4名：姓の最初の文字を繋げたもの。著者5名以上：最初の著者3名の最初の文字を繋げ、最後に「+」を付けたもの。
- [`authIniN`]: 各著者の姓の頭部最大N文字。
- [`authorIni`]: 第1著者の姓の最初5文字と、残りの著者の姓の頭文字。
- [`authN`]: 第1著者の姓の頭部N文字。
- [`authN_M`]: M番目の著者の姓の頭部N文字。
- [`auth.auth.ea`]: 最初の著者2名の姓と、3名以上著者がいる時には「.ea」を追加。
- [`auth.etal`]: 第1著者の姓の後に、著者が2名の時は第2著者の姓、著者が3名以上の時は「.etal」。
- [`authshort`]: 著者1名の時はその姓、著者2名以上の時は、3名までの著者の姓の最初の文字。4名以上の著者がいる時には、その後に+文字。

《註》(編集書籍など)著者がいない場合には、上記の`[auth...]`マーカーはすべて、編者を(ある場合には)代わりに使用します。したがって、著者のいない書籍の編者は、ラベル生成用には著者として取り扱われます。この挙動を望まない、即ち著者がいない場合は何も出力しないマーカーが必要な場合には、上記のコードにおいて`auth`の代わりに`pureauth`を使用してください。例：`[pureauth]`や`[pureauthors3]`など。

- [`edtr`]: 第1編者の姓
- [`edtrIniN`]: 各編者の姓の頭部N文字以内
- [`editors`]: 全編者の姓
- [`editorLast`]: 最後の編者の姓
- [`editorIni`]: 第1編者の姓の頭部5文字と、残りの編者の姓の頭文字
- [`edtrN`]: 第1編者の頭部N文字
- [`edtrN_M`]: 第M編者の頭部N文字
- [`edtr.edtr.ea`]: 最初の2編者の姓と、3名以上の場合は「.ea」を追加。
- [`edtrshort`]: 編者1名の時はその姓、編者2名以上の時は、3名までの編者の姓の最初の文字。4名以上の編者がいる時には、その後に+文字。
- [`firstpage`]: 発行物の最初のページ番号(注意：bibtexは`7,41,73--97`あるいは`43+`という表記をするので、pagesフィールド中の最小のページ番号を返します)
- [`keywordN`]: "keywords"フィールドのN番目のキーワード。キーワードがコンマかセミコロンで区切られていると仮定します。
- [`lastpage`]: 発行物の最後のページ(`firstpage`の註を参照)
- [`shorttitle`]: タイトルの最初の3単語
- [`shortyear`]: 出版年の下2桁
- [`veryshorttitle`]: タイトルの最初の単語。「the」「a」「an」を除く。

フィールド名(もしくは上記の準フィールド名)には、1つ以上の修正辞を後ろに付けることができます。修正辞は記述順に適用されます。

- :abbr: フィールド名や特殊フィールドマーカーで生成された文字列を短縮形にします。最初の文字と、その後は空白の次の文字のみを使います。例えば、[journal:abbr]は、ジャーナル名"Journal of Fish Biology"を"JoFB"と出力します。
- :lower: フィールドマーカーが挿入した文字列を強制的に小文字にします。例えば、[auth:lower]は、第1著者の姓を小文字で出力します。
- :upper: フィールドマーカーが挿入した文字列を強制的に大文字にします。例えば、[auth:upper]は、第1著者の姓を大文字で出力します。
- :(x): xには任意の文字列を入れてください。この修正辞の前のフィールドマーカーの値が空の時、括弧の間の文字列を挿入します。例えば、[volume:(unknown)]というマーカーは、項目の`volume`フィールドが設定されていれば、それを返し、設定されていなければ、unknownを返します。

ある項目型に対して鍵パターンを定義していない場合には、既定鍵パターンが使われます。既定パターンは変更することができ、設定ダイアログの鍵パターンセクションの項目型一覧の上で設定します。

既定鍵パターンは[auth][year]となっており、これは`Yared1998`のような鍵を生成します。現在のデータベース中で鍵が一意でない場合には、鍵が一意になるようにa-zのうち1文字を付け加えます。したがって、ラベルは以下のような形になります。

`Yared1998`
`Yared1998a`
`Yared1998b`

## 正規表現での置換

鍵パターンを適用して鍵を生成した後、鍵生成機構に特定の正規表現を検索させ、それを文字列で置換することができます。正規表現文字列と置換文字列は、鍵パターン一覧の下にあるテキストフィールドに入力します。置換文字列が空の場合、正規表現に一致した文字列は、生成された鍵から削除されます。例えば、置換対象に`\p{Punct}`あるいは`[:/%]`を入れ、置換文字列を空にした場合、鍵から不必要な文字を取り除くことができます。これは、BibTeX鍵にしたがってPDFの名前を付ける時便利です。