如何在 *RefTeX Select* 中包含每个项目的日期?

如何在 *RefTeX Select* 中包含每个项目的日期?

使用 RefTeXC-c [调用时reftex-citation,首先会询问引用格式(使用什么引用宏,例如\cite\footcite),然后要求使用正则表达式来搜索参考书目数据库,输入后会显示搜索结果(在名为 *RefTeX Select* 的缓冲区中),并让您选择一个参考书目项目放入引用宏中。包含搜索结果的列表如下图所示:

*RefTeX Select* 的屏幕截图

请注意,列表包含每个项目的关键字以及作者和标题等信息,但项目的年份或日期不是显示。是否可以配置 RefTeX,以便在 *RefTeX Select* 中列出每个项目的日期?

我提出这个要求的原因是,在列表中包含日期可能更容易区分相似的条目(所含的屏幕截图可能无法证明这一点)。

我在 GNU Emacs 23.3.1 中使用 RefTeX 4.31。在我的设置中,变量reftex-bib-year-face的值为font-lock-comment-face

答案1

Reftex 的设计使它在引用列表中不显示日期字段,只显示年份字段。没有选项可以调整以更正此问题。但是,您可以通过直接修改负责代码来修复此问题。

这是一个相当长的函数,只需要很小的改动。我修改了显示的“year”值,以便它同时包含年份和日期。我假设只会有一个或另一个,所以你应该看到你想要的。将其添加到你的 .emacs 并查看它是如何工作的:

(eval-after-load "reftex-cite" 
  '(defun reftex-format-bib-entry (entry)
     ;; Format a BibTeX ENTRY so that it is nice to look at
     (let*
         ((auth-list (reftex-get-bib-names "author" entry))
          (authors (mapconcat 'identity auth-list ", "))

          ;; modified code here:
          (year      (concat (reftex-get-bib-field "year" entry)
                             (reftex-get-bib-field "date" entry)))
          ;; end modified code

          (title     (reftex-get-bib-field "title" entry))
          (type      (reftex-get-bib-field "&type" entry))
          (key       (reftex-get-bib-field "&key"  entry))
          (extra
           (cond
            ((equal type "article")
             (concat (reftex-get-bib-field "journal" entry) " "
                     (reftex-get-bib-field "volume" entry) ", "
                     (reftex-get-bib-field "pages" entry)))
            ((equal type "book")
             (concat "book (" (reftex-get-bib-field "publisher" entry) ")"))
            ((equal type "phdthesis")
             (concat "PhD: " (reftex-get-bib-field "school" entry)))
            ((equal type "mastersthesis")
             (concat "Master: " (reftex-get-bib-field "school" entry)))
            ((equal type "inbook")
             (concat "Chap: " (reftex-get-bib-field "chapter" entry)
                     ", pp. " (reftex-get-bib-field "pages"   entry)))
            ((or (equal type "conference")
                 (equal type "incollection")
                 (equal type "inproceedings"))
             (reftex-get-bib-field "booktitle" entry "in: %s"))
            (t ""))))
       (setq authors (reftex-truncate authors 30 t t))
       (when (reftex-use-fonts)
         (put-text-property 0 (length key)     'face
                            (reftex-verified-face reftex-label-face
                                                  'font-lock-constant-face
                                                  'font-lock-reference-face)
                            key)
         (put-text-property 0 (length authors) 'face reftex-bib-author-face
                            authors)
         (put-text-property 0 (length year)    'face reftex-bib-year-face
                            year)
         (put-text-property 0 (length title)   'face reftex-bib-title-face
                            title)
         (put-text-property 0 (length extra)   'face reftex-bib-extra-face
                            extra))
       (concat key "\n     " authors " " year " " extra "\n     " title "\n\n"))))

答案2

在我的 RefTeX 版本中(作为 TeX Live 2011 的一部分安装),您希望看到的行为会自动启用。我查看了一些 RefTeX 配置选项,您可以尝试的一项是 ,reftex-sort-bibtex-matches可以按年份进行设置。这是我默认启用的选项。

相关内容