Zotero

提供:Turgenev's Wiki
2025年4月2日 (水) 18:33時点におけるTurgenev (トーク | 投稿記録)による版 (Notion-MW)

文献管理ソフト。Firefox界隈由来のOSSで、割と自由に何でも設定できるので、そういうのが好きな人にはおすすめ。

初期設定

Zoteroが提供するストレージは300MBとかしかないので外部のクラウドストレージで論文ファイルを管理するのがおすすめ。これに関しては[1]nmd_mw_mark_linkが大変詳しく、これでほぼ十分であるが、いくつか追加しておく。

  • Zotero自体がもともとFirefoxのアドオンに由来している関係で、Zoteroの拡張機能の拡張子.xpiはFirefoxのアドオンのものと同一であるため、FirefoxからZoteroの拡張機能をダウンロードしようとしてクリックすると(アドオンと混同されて)「ファイルが壊れています」などと出ることがある。なので右クリックから保存を選ぶ。
  • ファイルの自動命名は日本人だと苗字がLastNameと判断されてしまうなど微妙であったが、うまく直せなさそうなのでデフォルト設定のままでよさそう。
  • コレクションごとにフォルダ分けしたい場合は、”Usesubfolderdefinedby”を\%c(linuxでもこれで大丈夫だが/%cでもよい)にする(この場合は、複数のコレクションに属するアイテムが発生しないよう気を付ける)。参考:[2]nmd_mw_mark_linkなど

ブラウザ拡張の使い方など

ブラウザ拡張はZotero起動時のみ使える。Zoteroのウインドウで論文を入れたい対象のコレクションを開いておいてからブラウザで拡張機能アイコンをクリックするとそこに入れてくれる。普通に左クリックしたときにEmbeddedMetadataを使用しろみたいなエラーがでることがあるので、そういうときは右クリックしてそれっぽいのを選ぶ。

ブラウザ拡張を経由せずに(ローカルにあるpdfを)入れるときは、ZoteroのウインドウにD&D(このとき元の場所にファイルを残しておく必要がなければshiftを押せば削除される(移動になる))して取り込む。日本語論文などで文献情報がうまく読まれない場合は、ManualEntryを作成するしかない場合もあるが、J-STAGEなどから取ってきたものであれば、改めてWebでその論文を探してブラウザ拡張で入れるとうまくいくこともある(pdfエディタで注釈などを記入済みならファイルだけ後で差し替えればよい)。

ブラウザ拡張を経由しない場合、ZotFileのフォルダ内の適切なコレクションには分類されないので、適宜アイテムを選択してRenameAttachmentsをする必要がある。なお(最初のサイトで推奨されている通り)”サブコレクションからアイテムを表示”がonだと特定コレクションの中身(サブコレクション内部を含め)すべてに対してRenameAttachmentできて便利だが、実はonでしなくてもマイ・ライブラリを押したときは全アイテムが表示されるのでそれで十分だと思う(あと、サブコレクションから表示されてるアイテムを別コレクションに移動しようとしても正しく元の場所から削除されずコピー扱いになってしまうデメリットもこれで解決できる)。なお、前述のようにクラウドストレージのフォルダをLocationofFilesに指定して同期している場合、RenameAttachmentsすることで初めてファイルが同期されることになるので、できるだけ早めにやっておくべし。

また、Zotero内のゴミ箱に移動してもファイルは自動で移動されないし、完全に削除してもファイルは消えない。今のところの筆者の運用としては、一旦DELETEという名前のコレクションに移動してからRenameandmoveを実行し、適宜ゴミ箱に移動して(アイテムを)削除し、DELETEフォルダの中身も定期的に削除する、とやっている。

dateデータのフォーマットについて

ZoteroConnectorはサイトやpdfから論文の投稿(掲載?)日時を自動で取得してくれるが、結果の文字列はブラウザ本体の言語設定によって変わる。具体的には、日本語であれば「4月22,2011」、英語であれば「April22,2011」のようになる。なお、そもそも日付が取得できず年と月だけあるいは年だけの論文、また日付まで取れても「2011-04-22」のような書式になる論文もあり、これはどのサイトから取得するかなどによって異なるとみられるが詳細不明。

本来はこんな言語依存の単一文字列ではなく年、月、日それぞれ明示的に別のデータとして管理するのが筋だろう。実際、この仕様のせいで、BetterBibTeXの使用時に問題が発生していた(後述)。

<spanid="better-bibtex-for-zotero">

BetterBibTeXforZoteronmd_mw_mark_link

まずは普通に[3]nmd_mw_mark_linkからxpiをインストール、再起動すると再びdrag-and-dropを有効にするため再起動しろと言われるので再起動する。Citationkeyが追加されている。設定はZotfileのような別メニューではなくZoteroの設定画面に追加されている。[4]nmd_mw_mark_linkの通り、export→fieldsのfieldstoomitfromexportにabstract,file,doiと書く。[5]nmd_mw_mark_linkの通りCitationkeysを[auth:lower][year][shorttitle1_1]に変更する。

Citationkeyは「情報」タブに表示されているほか、メイン画面に表示することもできる。また検索でも使える(これは設定で無効にできる)

<spanid="日本語文献のcitation-keyについて">

日本語文献のCitationKeyについて

[6]nmd_mw_mark_link

<spanid="yearデータの不具合6760で修正済">

yearデータの不具合(6.7.60で修正済)

参考文献には出版年を書く必要があり、BibTeXではyearというフィールドに書かれる。このデータはZoteroの文献情報のdateのところから取得されており、「April22,2011」「2011-04-22」のようなdateのデータからは正しく「2011」だけを抽出してくれるが、dateが前述の「4月22,2011」のような書式になっていた場合はうまくいかず、この文字列全てがBibTeX(.bib)に出力されてしまう(報告済み:[7]nmd_mw_mark_link、6.7.61あたりで修正済み)。←の通り、BetterBibTeXのエクスポート時に適用されるscript(Export→postscript)のところにデータを置換するための以下のようなコードを書いておくとよい。

<syntaxhighlightlang="python">vb.net if(tex.has.year){ tex.add({name:'year',replace:true,value:tex.has.year.value.replace(/.*/,)}) }</syntaxhighlight> 設定箇所はこんな感じ↓

zot-settings.jpg
  • 今は治っているかもしれないが、デバッグ出力を有効化して再起動してからスクリプトを一度編集しないとスクリプトが読み込まれないバグがあった([8]nmd_mw_mark_link)。

<spanid="zotero-protocolを使用した操作">

ZoteroProtocolを使用した操作

このセクションに含まれる情報は比較的貴重なものである可能性があります。

ZoteroはGUIのソフトであるが、コマンドラインからも一定の操作が可能である。具体的には、zotero://という形式のURL(URIスキーム)を以下のように指定してZoteroを起動することができる(既に起動していた場合は、画面に変化が起こる)。

<syntaxhighlightlang="python">python zotero.exe-url"zotero://url/here"</syntaxhighlight> URLについては、明確にAPIとして仕様が定められたものではなさそうで、全体的にあまりドキュメントは充実していない。

一例として、特定のコレクション内のアイテムが選択された状態にするということができる。コメントが不親切でわかりづらいが[9]nmd_mw_mark_linkのscopeObjectなどと書いてあるあたりをよく読むと、zotero://select/library/collections/{collection_key}/items/{item_key}という形式で指定すればよいことがわかる(groupIDなどと書いてある部分もあって紛らわしいが、groupというのはcollectionとは別の概念で、複数ユーザー間での共有のライブラリのようなものを指すようである)。collection_keyitem_keyはどちらも1A2B3C4Dのような英数字による8文字の識別子である。ちなみにcollectionとitemにはそれぞれIDも割り当てられているがこちらは1~3桁くらいの数字でありkeyとは別なので注意。

<spanid="指定されたcitation-keyのアイテムをzoteroで開く">

指定されたCitationkeyのアイテムをZoteroで開く

前述の方法を応用して実装してみる。ここではCitationkeyとしてBetterBibTeXのものを使うことを仮定する。

まず、Citationkeyからアイテムのキーを取得する部分を作る。CitationkeyはBetterBibTeXが管理しているので(ここではデフォルトの~/Zoteroに各種データがあると仮定して)~/Zotero/better-bibtex.sqliteを読めばアイテムのkeyとの対応がわかる。次にアイテムが所属するコレクション(複数ある場合は最初のもの)のkeyをzotero.sqliteから取得する。ここではIDを一旦経由する必要がある。

Zoteroの起動中はデータベースファイルがロックされているが、[10]nmd_mw_mark_linkにある通り、(Windowsなら)sqlite3"file:Zotero\\zotero.sqlite?mode=ro&nolock=1"のようにしてやると読み取り専用で開くことはできる(書き込まないのでこれで充分)。今回はpythonで実装するが、pythonのsqliteでもこのパラメータが同じく使える。

コード例:

python
importsqlite3
importsys
importjson
importsubprocess
db=sqlite3.connect('file:'+sys.argv[1]+'?mode=ro&nolock=1',uri=True)
cur=db.cursor()
cur.execute('SELECTdataFROM"better-bibtex"wherename="better-bibtex.citekey"')
d=json.loads(cur.fetchone()[0])
mydict={}
foritemind["data"]:
mydict[item["citekey"]]=item["itemKey"]
myKey=mydict[sys.argv[3]]

db2=sqlite3.connect('file:'+sys.argv[2]+'?mode=ro&nolock=1',uri=True)
cur2=db2.cursor()
cur2.execute("SELECTitemIDFROMitemsWHEREkey=?",(myKey,))
item_id=cur2.fetchone()[0]
cur2.execute("SELECTcollectionIDFROMcollectionItemsWHEREitemID=?",(item_id,))
#所属する最初のコレクションIDを取得
collection_id=cur2.fetchone()[0]
#collectionIDからcollectionKeyを取得
cur2.execute("SELECTkeyFROMcollectionsWHEREcollectionID=?",(collection_id,))
collection_key=cur2.fetchone()[0]
print(collection_key)
subprocess.run(f'"C:\ProgramFiles(x86)\Zotero\zotero.exe"-url"zotero://select/library/collections/{collection_key}/items/{myKey}')
db.close()
db2.close()

<divstyle='text-align:center;'>zoto.py

上記コードは以下のように起動できる。

<syntaxhighlightlang="python">c# python"path\to\zoto.py""%USERPROFILE%\Zotero\better-bibtex.sqlite""%USERPROFILE%\Zotero\zotero.sqlite"%1</syntaxhighlight>

その他

アイテムが入っているコレクションを知りたいときはアイテムが選択された状態でCtrlキーを押すとよい。