Lumen

Lumen

Eager to know more, about the world, about the intelligence, and about myself.
github

よりエレガントな引用キー

私は常に Obsidian の Markdown を使用して学術ノートを書き、Zotero で文献を管理しています。これら 2 つのアプリを接続するのは、Obsidian 内のZotero Integration プラグインです。このプラグインは非常に便利で、私の日常的なニーズのほとんどを満たしています。私は関連する文献を citation key の形式でテキストに挿入し、後で LaTeX で作業する必要がある場合には、単に私の bibtex をインポートするだけで、Markdown に埋め込まれた citation を自動的に LaTeX で使用できます。

Citation key の主な目的は、一意の文字列を使用して文献ライブラリ内の特定の記事を指すことです。そのため、Citation Key にはしばしば同じキーが出現しないように、多くの論文関連情報が含まれます。また、このキーはランダムに生成された ID とは異なり、一定の意味情報を持っています。最も一般的なのは、著者名、発行年、論文のタイトルです。例えば、LearningFineGrainedBimanualManipulationZhao2023は、2023 年に発表された "Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware" という論文を指しており、第一著者は "Tony Z. Zhao" です。

しかし、このような Citation Key には問題もあります。最も大きな問題は、キーが長すぎることです。例えば、LearningFineGrainedBimanualManipulationZhao2023は、長い単語として Markdown テキストに埋め込まれるため、しばしば別の行を占める必要があります。これは本来、見た目にも疑問があるでしょう。また、1 つの文で複数の記事を引用する必要がある場合、この問題はさらに深刻になります。以下は私が引用した 3 つの記事の例です。

\cite{bousmalisRoboCatSelfImprovingFoundation2023,brohanRT2VisionLanguageActionModels,reedGeneralistAgent2022}

これはノートの見た目を大きく損ない、前後の文が同時に表示されないようにし、連結された見出しを分割するために追加の労力が必要となり、可読性が損なわれます。Zotero Integration は、論文の通常の表示方法を含め、さまざまな引用方法を提供していますが、これらの方法は私が後で LaTeX に移行する際には適していません。そのため、私は試した後でも Citation Key の形式で引用することにしました。私は Citation Key に一定の可読性を持たせ、キーから大まかにどの記事かを推測できるようにし、同時に十分に短くし、重複する可能性が低いようにしたいと考えています。

Better BibTex のドキュメントを読んだ後、Better BibTex の Citation Key Generator には非常に豊富なツールがあることがわかりました。実際には、CitationKey をカスタマイズするための非常に良い方法があります。以下は私が最終的に選んだルールです。

Title.skipWords(true).abbr(3).substring(1,8) + shortyear + postfix

これを分解すると、タイトルから始めて、SkipWordsは一般的な機能語(of、from、A など)を無視し、記号を削除します。これにより、比較的クリーンなタイトルが得られます。次に、abbr(3)は各単語の最初の 3 文字を取り出し、substring(1,8)は最後に 8 文字だけを使用することを保証します。最後に、2 桁の年を追加します。

実際、この段階では重複する可能性は非常に低くなります。毎年、私はあまり多くの記事を読むことはできませんし、新しい年が来ると新しい名前空間ができます。ただし、ドキュメントでは、一意性を保証するための追加のpostfix関数も提供されています。説明は以下の通りです。

a pseudo-function that sets the citekey disambiguation postfix using an sprintf-js format spec for when a key is generated that already exists. Does not add any text to the citekey otherwise. You must include exactly one of the placeholders %(n)s (number), %(a)s (alpha, lowercase) or %(A)s (alpha, uppercase). For the rest of the disambiguator you can use things like padding and extra text as sprintf-js allows. With start set to 1 the disambiguator is always included, even if there is no need for it when no duplicates exist. The default format is %(a)s. 

簡単に言えば、文献ライブラリに重複するキーがあるかどうかをチェックし、ない場合は何もしないで、ある場合は一意性を保証するために一定のルールに従ってサフィックスを追加します。これにより、理論的には Citation key の一意性が完全に保証されます。

以前と同じ引用の 3 つの記事と比較すると、このようなルールに基づいて生成されたキーは次のようになります。

\cite{RobSelFo23,RT2VisMo,GenAge22}

かなり簡潔になり、どの記事かも大まかに推測できます。これは、問題を解決するために試行錯誤した結果として非常に良い結果です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。