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现在也使用ORG文件中的本地和全球定义的书目。这些是使用新的#+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-doibibtex-completion-insert-citationbibtex-completion-insert-referencebibtex-completion-insert-keybibtex-completion-insert-bibtexbibtex-completion-add-PDF-attachmentbibtex-completion-edit-notesbibtex-completion-show-entrybibtex-completion-add-pdf-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 )。
使用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/ ' This can be useful if you'd like to transfer all your PDFs to another directory or similar.
(flatten-tree
( mapcar
( lambda ( entry ) (bibtex-completion-find-pdf entry))
(bibtex-completion-candidates)))Helm-bibtex and ivy-bibtex display entries in the order in which they appear in the BibTeX file reversed. This way, entries that were added at the bottom of the BibTeX file show up at the top when searching. There is currently no support for sorting but if you want to reverse the order of entries you can use the code below:
( advice-add 'bibtex-completion-candidates
:filter-return 'reverse )ivy-bibtex as an org-cite-follow-processor As mentioned here, the default org-open-at-point on a org citation will take you to the corresponding bibliography entry. The following code will change this behavior to instead open ivy-bibtex when following an org citation by entering RET or clicking on it:
(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 )This usually happens when a BibTeX file isn't well-formed. Common problems are opening quotes or parentheses that don't have matching counterparts. Unfortunately, Helm swallows the error message that is generated in these cases and just shows an empty buffer.
One way to diagnose the problem is to call the function for reading BibTeX directly and to see what error message it produces:
(bibtex-completion-candidates)If you see
forward-sexp: Scan error: "Unbalanced parentheses", 181009, 512282
this means that there is an unmatched opening parenthesis at the position 181009. To find this parenthesis, open the BibTeX file and do M-: (goto-char 181009) RET . You can also use the command Mx bibtex-validate RET to check for errors. Fix any problems and try again.