Helm-Bibtex:Ivy-Bibtex:
Helm-Bibtex和Ivy-Bibtex允許您搜索和管理Bibtex參考書目。他們都共享相同的通用後端,Bibtex-Completion,但一個人使用Helm Eleverion框架和另一個常春藤作為前端。
bibtex-completion-watch-bibliography 。可以用來停用參考書目的自動重新加載。ivy-bitex中的多個條目上進行標記和作用。請參閱此處。helm-bibtex-with-local-bibliography和ivy-bibtex-with-local-bibliography定義的書目。這些是使用新的#+BIBLIOGRAPHY:關鍵詞和變量org-cite-global-bibliography中的參考書目。bibtex-completion-format-citation-org-cite (用於配置可變bibtex-completion-format-citation-functions )=has-pdf= and =has-note=使用PDF和註釋的條目。helm-bibtex-with-notes和ivy-bibtex-with-noted並在有註釋的條目中搜索搜索。author-or-editor 。@string常數的添加支持。有關舊新聞,請參見News.org。
Helm-Bibtex'和Ivy-Bibtex'的主要銷售點是在大型書目中使用強大的搜索表達式進行有效的搜索,並將其緊密整合到您的EMAC工作流程中。他們倆都可以在與搜索表達式匹配的條目上執行以下操作:打開與條目,其URL或DOI關聯的PDF,插入該條目的引用,Bibtex鍵,Bibtex條目或純文本參考,將PDF附加到電子郵件上,請注意,請記住註釋,編輯Bibtex條目。許多方面都可以配置為適合個人喜好。
下面是一個屏幕截圖,顯示了包含“眼睛跟踪”表達式的條目搜索的helm-bibtex搜索。

正則表達eye.?tracking軌道允許搜索不同的拼寫(“眼睛跟踪”,“眼睛追踪”,“眼影”)。條目旁邊的循環方形符號(⌘)表示可用的PDF。筆符號(✎)意味著此條目附有筆記。在底部,有一些條目可用於在線數據庫中搜索。
安裝Helm-Bibtex或Ivy-Bibtex的最簡單方法是通過Melpa。另外,將文件bibtex-completion.el和helm-bibtex.el或ivy-bibtex.el放在加載路徑中包含的目錄中,然後將以下行添加到啟動文件中(通常為init.el ):
( autoload 'helm-bibtex " helm-bibtex " " " t )或者
( autoload 'ivy-bibtex " ivy-bibtex " " " t )
; ; ivy-bibtex requires ivy's `ivy--regex-ignore-order` regex builder, which
; ; ignores the order of regexp tokens when searching for matching candidates.
; ; Add something like this to your init file:
( setq ivy-re-builders-alist
'((ivy-bibtex . ivy--regex-ignore-order)
( t . ivy--regex-plus)))Helm-Bibtex和Ivy-Bibtex取決於如果您使用MELPA,將自動安裝的許多軟件包。
使用Helm-Bibtex或Ivy-Bibtex時,請確保正確配置了Helm或Ivy(請參閱Helm Documentation或Ivy文檔)。
最小的配置涉及告訴Bibtex-Completion可以找到您的書目:
( setq bibtex-completion-bibliography
'( " /path/to/bibtex-file-1.bib "
" /path/to/bibtex-file-2.bib " )) org-bibtex用戶還可以指定ORG模式書目文件,在這種情況下,將假定存在具有相同名稱和擴展BIB而不是ORG的Bibtex文件。如果BIB文件具有不同的名稱,請使用CONS單元格("orgfile.org" . “bibfile.bib") :
( setq bibtex-completion-bibliography
'( " /path/to/bibtex-file-1.bib "
" /path/to/org-bibtex-file.org "
( " /path/to/org-bibtex-file2.org " . " /path/to/bibtex-file.bib " )))指定可以在哪裡找到PDF:
( setq bibtex-completion-library-path '( " /path1/to/pdfs " " /path2/to/pdfs " )) Bibtex-Completion假定PDF的名稱由Bibtex鍵組成,遵循的是用戶定義的後綴(默認情況下為.pdf )。例如,如果Bibtex條目具有密鑰Darwin1859 ,則Bibtex-Completion搜索Darwin1859.pdf 。
如果Bibtex條目具有指定PDF的完整路徑的字段,則也可以使用該字段。例如,jabref和Zotero存儲PDF的位置,在一個名為File的字段中:
( setq bibtex-completion-pdf-field " File " )如果bibtex-completion-pdf-field是非nil,則Bibtex-Completion將首先嘗試檢索該字段中指定的文件。如果未為條目設置字段或不存在指定的文件,則Bibtex-Completion返回到上述方法(在bibtex-completion-library-path中列出的目錄中搜索鍵 + .pdf )。
文件規格可以是裸路路徑,也可以遵循Jabref,Zotero,Caliber和Mendeley使用的格式。這種格式還允許指定多個文件(例如,主紙和補充材料)。示例:
File = {/path/to/article.pdf}File = {:/path/to/article.pdf:PDF}File = {:/path/to/article.pdf:PDF;:/path/to/supplementary_materials.pdf:PDF}Bibtex-Completion支持兩種存儲註釋的方法。它可以將所有註釋存儲在一個文件中,也可以將存儲筆記存儲在多個文件中,每個出版物一個文件。在第一種情況下,必須將“自定義變量bibtex-completion-notes-path設置為註釋文件的完整路徑:
( setq bibtex-completion-notes-path " /path/to/notes.org " )如果每個出版物都有一個文件,則bibtex-completion-notes-path應該指向用於存儲註釋文件的目錄:
( setq bibtex-completion-notes-path " /path/to/notes " )這些文件的名稱由bibtex鍵以及用戶定義的後綴(默認情況.org )。
在這一點上,大多數人都準備好去。跳過下面的用法,查看如何使用Helm-Bibtex和Ivy-Bibtex。
調用helm-bibtex或ivy-bibtex時,當點上點時,將自動選擇該鍵。但是,org引文上的默認org-open-at-point將帶您進入相應的參考書目條目。以下代碼將改變此行為,而是通過輸入RET或單擊“遵循組織引用”時打開helm-bibtex-follow :
( setq org-cite-follow-processor 'helm-bibtex-org-cite-follow )注意如果有多個鍵的組織引用,則以上代碼在選擇[cite: pottion extion時不會預選任何條目。請參閱此處的常春藤替代方案。
可變的bibtex-completion-display-formats可用於自定義搜索結果如何以次級類型為基礎顯示。默認值為
'(( t . " ${author:36} ${title:*} ${year:4} ${=has-pdf=:1}${=has-note=:1} ${=type=:7} " ))這意味著所有輸入類型均以相同的方式呈現:作者,標題,年份,……以這種格式字符串,數字表示相應字段保留了多少空間。如果有一個*而不是數字,則意味著該字段將獲得任何空間。這是一種對不同條目類型使用不同佈局的設置:
( setq bibtex-completion-display-formats
'((article . " ${=has-pdf=:1}${=has-note=:1} ${=type=:3} ${year:4} ${author:36} ${title:*} ${journal:40} " )
(inbook . " ${=has-pdf=:1}${=has-note=:1} ${=type=:3} ${year:4} ${author:36} ${title:*} Chapter ${chapter:32} " )
(incollection . " ${=has-pdf=:1}${=has-note=:1} ${=type=:3} ${year:4} ${author:36} ${title:*} ${booktitle:40} " )
(inproceedings . " ${=has-pdf=:1}${=has-note=:1} ${=type=:3} ${year:4} ${author:36} ${title:*} ${booktitle:40} " )
( t . " ${=has-pdf=:1}${=has-note=:1} ${=type=:3} ${year:4} ${author:36} ${title:*} " )))為此,您必須將journal和booktitle添加到bibtex-completion-additional-search-fields 。請參閱下一節。
用於搜索的默認字段是:作者,標題,年,bibtex鍵,輸入類型(文章,Inproceedings,…)。可變的bibtex-completion-addition-search-fields可用於擴展此列表。例子:
( setq bibtex-completion-additional-search-fields '(keywords))( setq bibtex-completion-pdf-symbol " ⌘ " )
( setq bibtex-completion-notes-symbol " ✎ " )如果PDFS文件遵循與Bibtex鍵 + .pdf不同的命名方案,則可以修改函數bibtex-completion-find-pdf-in-library以適應它。
默認情況下,Emacs用於打開PDF文件。這意味著要么使用DocView,要么,如果安裝了眾多優越的PDF-Tools擴展名,它提供了諸如PDF文件中的增量搜索以及與Adobe Software兼容的註釋的創建和修改等功能。
為了配置另一個PDF查看器,可以使用自定義變量bibtex-completion-pdf-open-function 。這是OS X PDF Viewer的示例配置:
( setq bibtex-completion-pdf-open-function
( lambda ( fpath )
( call-process " open " nil 0 nil " -a " " /Applications/Skim.app " fpath)))這是Linux PDF查看器Evince的另一個示例:
( setq bibtex-completion-pdf-open-function
( lambda ( fpath )
( call-process " evince " nil 0 nil fpath)))有時希望擁有選項(Emacs本身和外部查看器)以打開PDF。除了帶有P p常規emacs查看器外,以下添加了與evince的動作。該動作與Ivy-Bibtex一起使用;必須對Helm-Bibtex進行調整(如有必要,將路徑更改為另一個觀眾):
( defun bibtex-completion-open-pdf-external ( keys &optional fallback-action )
( let ((bibtex-completion-pdf-open-function
( lambda ( fpath ) ( start-process " evince " " *helm-bibtex-evince* " " /usr/bin/evince " fpath))))
(bibtex-completion-open-pdf keys fallback-action)))
(ivy-bibtex-ivify-action bibtex-completion-open-pdf-external ivy-bibtex-open-pdf-external)
(ivy-add-actions
'ivy-bibtex
'(( " P " ivy-bibtex-open-pdf-external " Open PDF file in external viewer (if present) " )))您可以存儲給定條目的其他PDF,例如原始PDF的註釋版本,包含補充材料或分會文件的文件。如果將file字段用於將PDF鏈接到條目(請參閱第PDF文件),則可以簡單地將這些附加的PDF添加到該字段中。如果觸發操作“打開的PDF文件”,則將提示您打開該文件。
如果未使用file字段,而是命名方案bibtex-key + .pdf (再次參見PDF文件),則可以通過以下方式獲得相同的行為
( setq bibtex-completion-find-additional-pdfs t )然後,所有名稱以Bibtex鍵開頭的文件都將與條目關聯。然後,足以相應地命名您的文件(例如,使用重命名實用程序)。示例:
bibtex-key-annotated.pdfbibtex-key-supplemental.pdfbibtex-key-chapter1.pdf請注意,出於績效原因,僅在觸發操作時才檢測到這些附加文件,例如“打開PDF文件”。當加載整個書目時,僅檢測到“主” pdf bibtex-key.pdf 。
如果通過命名方案bibtex-key.pdf引用文檔,但是您以與PDF不同的格式存儲文件,則可以相應地設置變量bibtex-completion-pdf-extension 。例子:
( setq bibtex-completion-pdf-extension " .djvu " )如果您以各種格式存儲文件,則可以指定列表而不是單個文件類型:
( setq bibtex-completion-pdf-extension '( " .pdf " " .djvu " , " .jpg " ))然後,對此列表中的擴展程序進行順序嘗試,直到找到文件為止。當心,這可以降低大型書目的性能。
默認情況下,Bibtex-Completion使用Emacs的任何默認值。但是,有多種替代方案(有關完整列表,請參見bibtex-completion-browser-function的文檔)。例子:
( setq bibtex-completion-browser-function 'browser-url-chromium )也可以使用用戶定義的功能:
( setq bibtex-completion-browser-function
( lambda ( url _ ) ( start-process " firefox " " *firefox* " " firefox " url)))可以使用bibtex-completion-watch-bibliography配置自動加載。
Bibtex-Completion基於插入引文的主要模式創建引用:
可以擴展模式列表,並可以使用自定義變量bibtex-completion-format-citation-functions更改引文函數。例如,不使用ebib的人可能喜歡在組織模式文件中鏈接到PDF而不是ebib-links:
( setq bibtex-completion-format-citation-functions
'(( org-mode . bibtex-completion-format-citation-org-link-to-PDF)
( latex-mode . bibtex-completion-format-citation-cite)
( markdown-mode . bibtex-completion-format-citation-pandoc-citeproc)
( default . bibtex-completion-format-citation-default)))當您想在ORG模式中創建讀取待辦事項列表時,您可以使用鏈接中的PDF文件標題來啟用。為了實現此目標,您可以使用以下代碼段來修改變量bibtex-completion-format-citation-functions :
( setq bibtex-completion-format-citation-functions
'(( org-mode . bibtex-completion-format-citation-org-title-link-to-PDF)
( latex-mode . bibtex-completion-format-citation-cite)
( markdown-mode . bibtex-completion-format-citation-pandoc-citeproc)
( default . bibtex-completion-format-citation-default)))引用函數必須接受鍵列表作為輸入,然後返回包含引用的字符串。有關示例,請參見預定義的引文函數。
Bibtex-Completion在將引用插入乳膠文檔中時提示乳膠引用命令。可以使用可變的bibtex-completion-cite-commands來定義可自動完成的命令列表。
默認設置包含Biblatex中定義的所有CITE命令(Multicite命令和volcite等人除外)。如果未輸入命令,則使用默認命令,可以使用bibtex-completion-cite-default-command進行配置。默認命令的默認值是cite 。變量bibtex-completion-cite-default-as-initial-input控制默認命令的使用方式。如果t ,請在閱讀用戶的輸入之前將其插入迷你吧。如果nil ,則不會將其插入迷你吧,而是用作用戶輸入任何內容的默認值。
默認情況下,Bibtex-Completion還提示了引用的可選前註釋和後註釋。可以通過將可變的bibtex-completion-cite-prompt-for-optional-arguments設置nil來關閉。
另請參見下面的“插入乳膠命令”部分。
可以使用自定義變量bibtex-completion-fallback-options配置在線數據庫。該變量包含一個alist,其中每個條目的第一個元素是數據庫的名稱,第二個元素是URL或函數。 URL必須在應插入當前搜索表達式的位置中包含a %s 。如果使用函數,則該函數應將此搜索表達式作為單個參數。
要快速訪問參考書目,請將搜索命令, helm-bibtex或ivy-bibtex綁定到方便的鍵。
Helm-bibtex :我將菜單鍵用作所有頭盔命令的前綴鍵,並將helm-bibtex綁定到b 。然後可以使用<menu> b啟動Helm-Bibtex。將helm-resume綁定到helm-command-map中的<menu>也很有用。有了這種綁定, <menu> <menu>可用於重新打開最後的頭盔搜索。
( global - set - key ( kbd " <menu> " ) ' helm-command-prefix)
(define-key helm-command-map "b" ' helm - bibtex )
( define - key helm - command - map " B " ' helm-bibtex-with-local-bibliography)
(define-key helm-command-map "n" ' helm - bibtex - with - notes )
( define - key helm - command - map ( kbd " <menu> " ) ' helm-resume) Ivy-Bibtex :您可以類似地將ivy-bibtex綁定到<menu> b和ivy-resume <menu> <menu> 。
為了方便起見,可以頻繁地搜索以命令捕獲並綁定到關鍵組合。下面是示例代碼,它定義了“ Jane Doe”撰寫的出版物的搜索,並將搜索命令綁定到Cx p 。
Helm-Bibtex :
( defun helm-bibtex-my-publications ( &optional arg )
" Search BibTeX entries authored by “Jane Doe”.
With a prefix ARG, the cache is invalidated and the bibliography reread. "
( interactive " P " )
(helm-bibtex arg nil " Jane Doe " ))
; ; Bind this search function to Ctrl-x p:
( global-set-key ( kbd " C-x p " ) 'helm-bibtex-my-publications )Ivy-Bibtex :
( defun ivy-bibtex-my-publications ( &optional arg )
" Search BibTeX entries authored by “Jane Doe”.
With a prefix ARG, the cache is invalidated and the bibliography reread. "
( interactive " P " )
( when arg
(bibtex-completion-clear-cache))
(bibtex-completion-init)
(ivy-read " BibTeX Items: "
(bibtex-completion-candidates)
:initial-input " Jane Doe "
:caller 'ivy-bibtex
:action ivy-bibtex-default-action))
; ; Bind this search function to Ctrl-x p:
( global-set-key ( kbd " C-x p " ) 'ivy-bibtex-my-publications )在出版物上按<enter>觸發與出版物相關的PDF(如果存在)或其URL或DOI相關的“默認操作”。按Helm-Bibtex或In In Ivy-Bibtex中的Mo下按<tab> ,將顯示一個動作菜單,列出了可用操作。這是所有可用操作及其功能的列表(這些是通用操作函數,對於Helm-bibtex,函數名稱以helm-bibtex-而不是bibtex-completion-開頭,而對於Ivy-Bibtex,它們以ivy-bibtex-相反) - 相反):
bibtex-completion-open-anybibtex-completion-open-pdfbibtex-completion-open-url-or-doi doibibtex-completion-insert-citationbibtex-completion-insert-referencebibtex-completion-insert-key keybibtex-completion-insert-bibtexbibtex-completion-add-PDF-attachmentbibtex-completion-edit-notesbibtex-completion-show-entrybibtex-completion-add-pdf-to-library to-library Helm-Bibtex :可以通過命令helm-add-action-to-source和helm-delete-action-from-source修改操作列表。例如,以下添加了一個新的動作helm-bibtex-open-annotated-pdf (請參見上文),就在上面列表中的第一個項目之後:
(helm-add-action-to-source
" Open annotated PDF (if present) " 'helm-bibtex-open-annotated-pdf
helm-source-bibtex 1 )如果helm-add-action-to-source ,則在列表的末尾添加了新操作。由於默認操作只是操作列表中的第一個條目,因此可以通過刪除操作並將其重新插入列表的頂部來更改默認操作。以下是一個示例,顯示如何製作“插入bibtex鍵”默認操作:
(helm-delete-action-from-source " Insert BibTeX key " helm-source-bibtex)
(helm-add-action-to-source " Insert BibTeX key " 'helm-bibtex-insert-key helm-source-bibtex 0 ) Ivy-Bibtex :分別設置默認操作和其他可用操作。默認操作由變量ivy-bibtex-default-action和ivy-bibtex-default-multi-action控制,後者旨在用於標記條目的列表(請參閱對多個條目的應用程序)。例如,以下代碼將默認操作更改為“插入bibtex鍵”:
( setq ivy-bibtex-default-action 'ivy-bibtex-insert-key )以同樣的方式,以下代碼設置了“插入bibtex鍵”的標記條目列表的默認操作,該操作將插入一個不錯的逗號分隔的鍵列表:
( setq ivy-bibtex-default-multi-action 'ivy-bibtex-insert-key )通過將所需的操作列表傳遞給命令ivy-set-actions來設置其他操作。例如,除默認一個外,以下代碼僅保留兩個可用的操作:
(ivy-set-actions
'ivy-bibtex
'(( " p " ivy-bibtex-open-any " Open PDF, URL, or DOI " ivy-bibtex-open-any)
( " e " ivy-bibtex-edit-notes " Edit notes " ivy-bibtex-edit-notes)))字母p和e是動作菜單中兩個操作的關鍵綁定。鍵綁定o用於默認操作。該代碼中該動作的第二次出現提醒ivy ,該操作可以處理標記條目的列表。如果要做的正確的事情就是依次將操作應用於每個條目,則可以安全地省略它。
如果您只想在操作列表的末尾添加新操作,則可以使用命令ivy-add-actions 。例如,以下添加了一個新的操作ivy-bibtex-open-annotated-pdf (請參見上文)在操作列表末尾:
(ivy-add-actions
'ivy-bibtex
'(( " P " ivy-bibtex-open-annotated-pdf " Open annotated PDF (if present) " ivy-bibtex-open-annotated-pdf)))可以通過三個步驟為Helm-Bibtex或Ivy-Bibtex創建新的動作。有關一個示例,請參見上面打開帶註釋的PDF的操作。
第一個也是主要步驟是創建一個通用的操作函數bibtex-completion-<action> (例如bibtex-completion-open-annotated-pdf )。該函數應作為單個參數列表bibtex鍵,並在相應的bibtex條目上執行操作。
第二步是針對Helm-Bibtex或Ivy-Bibtex量身定制通用動作函數,以便將其運行在正確的緩衝區中並接收所選條目的鍵)。
Helm-Bibtex :這只是完成:
(helm-bibtex-helmify-action bibtex-completion-<action > helm-bibtex-<action > )Ivy-Bibtex :這簡直就是完成:
(ivy-bibtex-ivify-action bibtex-completion-<action > ivy-bibtex-<action > )第三個也是最後一步是通過將其添加到“動作”菜單中,使helm-bibtex-<action>或ivy-bibtex-<action> 。請參閱更改可用操作。
Helm-Bibtex :默認情況下, helm-bibtex使用整個框架顯示參考書目。可以通過將可變的helm-bibtex-full-frame設置為nil來更改,在這種情況下,使用Helm的標準(通常是垂直拆分,在下部窗口中顯示Helm搜索)。
Ivy-Bibtex :Ivy-Bibtex始終在MiniBuffer中顯示參考書目。 ivy-height的變量控制所有IVY命令中的MiniBuffer窗口的行數。
Bibtex-Completion通過有關該出版物的一些基本信息填充了新筆記。對於所有出版物的一個註釋,新條目看起來像以下示例:
Gigerenzer,G。(1998):我們需要統計思維,而不是統計儀式 :特性: :custom_id:Gigerenzer1998 :結尾:
新部分的標題由作者姓名,年份和出版物的標題組成。屬性Custom_ID指定條目的bibtex鍵(稱為Custom_ID ,與org-ref兼容)。
對於每個出版物的一個文件,一個新筆記文件包含以下格式的標題:
#+標題:註釋:Gigerenzer,G。(1998):我們需要統計思維,而不是統計儀式
如果需要其他格式,則可以使用自定義變量bibtex-completion-notes-template-one-file和bibtex-completion-notes-template-multiple-files更改新音符的模板。
默認情況下,bibtex-completion假定註釋文件為org模式格式。但是,也可以使用任何其他格式。對於僅一個註釋文件,就足以設置bibtex-completion-notes-path以指向所需的文件。對於多個註釋文件,可以使用自定義變量bibtex-completion-notes-extension指定文件的類型。例如,如果Markdown是所需的文件類型:
( setq bibtex-completion-notes-path " /path/to/notes " )
( setq bibtex-completion-notes-extension " .md " )如果文件類型設置為ORG模式以外的其他內容,則還需要調整新的Note文件的模板。有關詳細信息,請參見上面的部分。
當磁盤上更改.bib文件時,Bibtex-Completion會自動重新加載參考書目。但是,Bibtex-Completion不會觀看PDF和筆記。因此,當添加新的PDF或註釋時,必須手動重新加載參考書目以正確顯示PDF和註釋符號(通過前綴參數,例如Cu Mx helm-bibtex )。不幸的是,為PDF和音符實施自動重新加載並不是完全直接的,因為Bibtex的完成在如何處理PDF和筆記方面非常靈活。但是對於簡單的設置,有一個簡單的解決方案:只需觀看bibtex-completion-library-path和bibtex-completion-notes-path目錄,然後在更改時重新加載參考書目。 PDF目錄的示例:
( setq tmalsburg-pdf-watch
( file-notify-add-watch bibtex-completion-library-path
'(change)
( lambda ( event ) (bibtex-completion-candidates))))使用Mx helm-bibtex或Mx ivy-bibtex啟動新搜索。搜索的默認字段是:作者,標題,年,bibtex鍵和輸入類型。可以使用正則表達式。示例搜索:
珍妮特·福多爾(Janet Fodor)出版的一切:
珍妮特·福多(Janet Fodor)
所有博士學位論文:
phdthesis
琳·弗雷澤(Lyn Frazier)的博士學位論文:
Phdthesis Frazier
有關眼睛跟踪的出版物。正則表達式用於匹配各種拼寫(“眼影”,“眼睛跟踪”,“眼球追踪”):
眼
2013年的會議演講:
2013年
2010年和2011年的出版物:
(2010 | 2011 )
David Caplan和Gloria Waters合著的文章:
文章Waters Caplan
搜索David Caplan的文章,這些文章不是由Gloria Waters共同撰寫的:
文章Caplan!Waters
使用helm-bibtex-with-local-bibliography或ivy-bibtex-with-local-bibliography啟動在當前緩衝區的“本地參考書目”中進行搜索,而不是由bibtex-completion-bibliography定義的“全球參考書目”。如果當前文件是Bibtex文件,則將使用該參考書目。如果當前文件是乳膠文件,則將使用reftex從標準的乳膠書目命令bibliography和addbibresource確定本地參考書目。如果文件是一個組織文件,則使用本地和/或全局組織參考書目(如使用新的#+BIBLIOGRAPHY:關鍵字和變量org-cite-global-bibliography )。如果找不到本地參考書目,將使用全球bibtex-completion-bibliography Bibliography )。
使用helm-bibtex-with-notes或ivy-bibtex-with-notes僅在具有註釋的條目之間搜索。與〜ORG-ROAM-BIBTEX.EL〜結合使用特別有用。
一個常見的用例是在文檔中寫下搜索詞(例如,在乳膠手稿中),您想在書目中搜索它。在這種情況下,只需啟動Helm-Bibtex或Ivy-Bibtex並輸入Mn即可。這將光標下的單詞作為搜索詞插入。 (這是一個掌舵 / IVY功能,可以在所有掌舵 / IVY命令中使用,而不僅僅是Helm-Bibtex / Ivy-Bibtex。)請注意,還可以使用Bibtex鍵進行搜索。因此,如果您的光標位於Bibtex鍵(例如,在乳膠命令中),您可以啟動Helm-Bibtex或Ivy-Bibtex,擊中Mn並查看與該Bibtex鍵關聯的條目。特殊情況:您想打開與光標下的Bibtex密鑰相關的PDF: Mx helm-bibtex Mn RET或Mx ivy-bibtex Mn RET 。當然,如果將helm-bibtex或ivy-bibtex綁定到方便的鑰匙(請參閱鑰匙結合),這當然要短。
可用動作是:
Helm-Bibtex :選擇一個條目,然後按<return>執行默認操作。另外,按TAB (製表符)查看所有可用操作的列表,執行其中一個並退出Helm-Bibtex。
Ivy-Bibtex :選擇一個條目,然後按<return>執行默認操作。另外,按Mo查看所有可用操作的列表,執行其中一個並退出Ivy-Bibtex。
Helm-Bibtex :啟動Helm-Bibtex,輸入搜索表達式,將光標移動到匹配條目,然後輸入C-<space> (Control + Space Bar)標記此條目,可選地更改您的搜索表達式,標記更多條目,最後按<return>或<tab>立即執行所有選定條目,並立即執行helm-bibtex。
Ivy-Bibtex :啟動Ivy-Bibtex,輸入搜索表達式,將光標移至匹配條目,然後輸入C-<space> (CONTROL + SPACE BAR)以標記此條目,可選地將您的搜索表達式標記,標記更多條目,最後按<return>在所有選定的條目上執行默認操作或Mo其他操作。按S-<space> (Shift + Space Bar)將標記的條目取消標記。
Helm-Bibtex :向您的同事( Cx m )啟動電子郵件並執行helm-bibtex 。搜索您的新出版物,並用C-<space>標記它們,然後按<f7>執行“將PDF附加到電子郵件”。然後, Mx helm-resume (仍在標記出版物),然後按<f6>執行“插入Bibtex條目”。可選地使用Mx helm-resume和<f4>插入更多可讀的參考文獻,以執行操作“插入參考”。發送電子郵件( Cc Cc )。完畢。這需要不到10秒。
Ivy-Bibtex :啟動給您的同事( Cx m )並執行ivy-bibtex電子郵件。搜索您的新出版物,並用C-<space>標記它們,然後按CMo a執行“將PDF附加到電子郵件”,同時保持常春藤打開。然後按Mo b執行操作“插入Bibtex輸入”,或使用Mo r插入更多人類可讀引用,以執行操作“插入參考”。發送電子郵件( Cc Cc )。完畢。這需要不到10秒。
當然,這假設您是您從Emacs發送電子郵件,例如MU4E。
Helm-Bibtex和Ivy-Bibtex具有功能強大的搜索功能,但是僅僅因為Bibtex文件中通常不表示相關信息,因此無法執行一些常見的搜索。例如,Bibtex-Completion不知道會議演講是談話還是海報,因為兩者都表示為inproceedings 。因此,如果您想編譯會議列表(例如,對於您的簡歷),那是不可能的 - 並非沒有其他工作。一種解決方案是“標記”出版物。標籤就像關鍵字一樣,除了它們不代表出版物的內容,而是元數據。例子:
@inproceedings { BibtexKey2015 ,
author = { Jane Doe and Monika Mustermann } ,
title = { This is the title } ,
crossref = { XYZ-conference-2015 } ,
keywords = { keyword1, keyword2 } ,
pages = { 10 } ,
tags = { poster } ,
}由於tags不是標準的bibtex字段,因此在搜索時默認情況下,Bibtex-Completion不會考慮它。因此,為了搜索標籤,我們必須告訴Bibtex-Completion, tags字段也很重要:
(setq bibtex-completion-additional-search-fields'(tags))
還有許多其他方法可以使用標籤。例如,它們可用於標記您計劃閱讀的文章,或正在進行的重要文章或手稿等文章,等等。
將引文命令插入乳膠文檔的操作提示引用命令,如果適用,則提示前後參數。引用命令的提示具有其自己的迷你庫歷史記錄,這意味著可以通過按下Ivy-Bibtex的Helm-Bibtex或Mp的<up>鍵來訪問以前的輸入。通過按下<down> ,也可以訪問Biblatex中定義的所有引用命令的列表(多層命令和Volcite等人具有不同的參數結構)。該提示還通過tab鍵支持自動完成。如果未輸入命令,則使用默認命令。默認命令是在自定義變量bibtex-completion-cite-default-command中定義的。默認情況下,Helm-Bibtex和Ivy-Bibtex提示了引用的預測和後註釋。可以通過將可變的bibtex-completion-cite-prompt-for-optional-arguments設置nil來關閉。
Bibtex-Completion緩存了參考書目,以防止啟動新的查詢時昂貴的讀者。但是,Bibtex-Completion沒有檢查新的PDF或註釋是否已添加,因為上次讀取,因此表明存在或不存在這些項目的符號可能是不正確的。可以使用前綴參數強制重新讀取。
Helm-bibtex :Do Cu Mx helm-bibtex或Cu ,然後是您使用的任何鍵綁定來調用Helm-Bibtex。
Ivy-Bibtex :DO Cu Mx ivy-bibtex或Cu然後是您使用的任何鍵綁定來調用Ivy-Bibtex。
Helm-Bibtex :啟動Helm-Bibtex並輸入搜索詞。然後在標題為“後備選項”的部分中選擇“ CrossRef”。 (您可以使用左右箭頭鍵在各節之間切換。)
Ivy-Bibtex :啟動Ivy-Bibtex並輸入搜索詞。然後按Mo f以查看後備選項列表,然後選擇“ CrossRef”。
這將使用biblio.el搜索CrossRef數據庫。在結果列表中,將光標放置在感興趣的輸入中,然後按c複製該條目的Bibtex,或者i將其插入。按q通過搜索結果關閉緩衝區。有關詳細信息,請參見Biblio.el的文檔。
有時,搜索詞不會在選擇的第一個後備源中產生所需的結果,您可能希望選擇使用同一搜索詞的另一個後備選項。為此,您可以使用helm-resume (或ivy-resume )回到帶有最後一個搜索術語的初始掌舵(IVY)菜單,允許您有效地選擇其他選項。
在下面,我提供對我或其他用戶有用的代碼。請注意,此代碼可能會做出不包含您的設置中的假設。執行該代碼並根據需要進行更改,請仔細閱讀代碼。
下面的代碼在您的bibtex-completion-notes-path中讀取所有註釋文件,並創建一個新的筆記文件,其中包含每個出版物的部分。該代碼假定Bibtex-Completion仍在配置為多個Note文件,並且您想將筆記存儲在file notes.org中,並在bibtex-completion-notes-path中。該代碼還為單個音符文件中的所有組織標題增加了一個級別(因為新註釋文件中的出版物使用了頂級標題)。如果筆記文件在書目中沒有相應的條目,則將忽略它。
( let ((note-files ( directory-files bibtex-completion-notes-path t " ^[^.]+ \ .org$ " ))
(bibtex-completion-notes-path (f-join bibtex-completion-notes-path " notes.org " )))
( cl-loop
for note-file in note-files
for key = (f-no-ext (f-filename note-file))
do ( condition-case nil
( progn
(bibtex-completion-edit-notes key)
( insert ( with-temp-buffer
( insert-file-contents note-file)
( replace-regexp " ^* " " ** " )
( buffer-string ))))
( error nil ))))假設您要創建一個僅包含文章中引用的條目的Bibtex文件,然後您可以使用以下代碼填充帶有條目的新的Bibtex文件:
( progn
( switch-to-buffer ( generate-new-buffer " my_new_bibliography.bib " ))
(--map ( insert (bibtex-completion-make-bibtex it)) (-distinct '( " Key1 " " Key2 " ))))如果乳膠用於撰寫文章,則可以使用GREP和SED來提取引用的鍵:
grep ' entry{ ' manuscript.bbl | sed ' s/^.*entry{([^}]*)}.*$/1/ ' 如果您想將所有PDF轉移到另一個目錄或類似目錄,這將很有用。
(flatten-tree
( mapcar
( lambda ( entry ) (bibtex-completion-find-pdf entry))
(bibtex-completion-candidates)))Helm-Bibtex和Ivy-Bibtex顯示在Bibtex文件中出現的順序顯示條目。這樣,在搜索時顯示在Bibtex文件底部添加的條目。當前不支持排序,但是如果要扭轉條目順序,則可以使用以下代碼:
( advice-add 'bibtex-completion-candidates
:filter-return 'reverse )ivy-bibtex作為org-cite-follow-processor如下所述,ORG引文上的默認org-open-at-point將帶您進入相應的參考書目條目。以下代碼將將此行為更改為通過輸入RET或單擊ORG引用時打開ivy-bibtex :
(org-cite-register-processor 'my-ivy-bibtex-org-cite-follow
:follow ( lambda ( _ _ ) (ivy-bibtex)))
( setq org-cite-follow-processor 'my-ivy-bibtex-org-cite-follow )通常,當Bibtex文件不正確時,就會發生。常見的問題是打開沒有匹配對應物的引號或括號。不幸的是,Helm吞下了這些情況下生成的錯誤消息,並顯示一個空的緩衝區。
診斷問題的一種方法是調用直接讀取Bibtex的功能,並查看其產生的錯誤消息:
(bibtex-completion-candidates)如果你看到
前向性:掃描錯誤:“不平衡括號”,181009,512282
這意味著在181009位置上有一個無與倫比的開頭括號。要找到此括號,請打開bibtex文件並做M-: (goto-char 181009) RET 。您還可以使用命令Mx bibtex-validate RET檢查是否有錯誤。解決任何問題,然後重試。