如何按时间倒序对 BibTeX 参考文献进行排序?

如何按时间倒序对 BibTeX 参考文献进行排序?

我正在尝试以相反的时间顺序显示我的出版物列表。我可以使用\bibliographystyle{unsrt}一种解决方法,只需手动对条目进行排序,但我自然更希望 BibTeX 能帮我做到这一点。

我可以采用哪些工具或方法按时间倒序对参考书目进行排序?

答案1

你可以试试https://github.com/plessl/latex-goodies/tree/master/bibstyles/plainyr-rev

我自己还没有测试过。祝你好运。

答案2

这是一个使用的解决方案biblatex

\documentclass{article}

\usepackage[sorting=ydnt]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{a01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{b03,
  author = {Buthor, B.},
  year = {2003},
  title = {Bravo},
}
@misc{c02,
  author = {Cuthor, C.},
  year = {2002},
  title = {Charlie},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography

\end{document}

在此处输入图片描述

有关详细信息,请参阅文档的第 3.1.2.1 和 3.5 节biblatex

答案3

书目风格平原如果你不想(或不能)使用 biblatex,这是一个很好的起点。这种风格类似于清楚的,但按年份对参考文献进行排序。要按时间顺序倒序排列,请复制plainyr.bst到另一个文件(例如plainrevyr.bst)。编辑新文件,并按照上一个答案中的说明,ITERATE用替换每个出现的 。REVERSE

plainyr.bst是最好的起点,因为它是唯一使用日期作为主要排序字段的默认样式,如http://www.ee.ic.ac.uk/hp/staff/dmb/perl/b4w_using.html#Sort

ITERATE如果您尝试以任何其他格式替换,REVERSE您将更改排序顺序,但不会更改主要排序字段。例如,以 ieeetr 开头会生成参考书目大多按时间倒序排列...并且大多数都不足以满足您的简历要求!

答案4

我使用宏文件完成了此操作makebst.tex,它会带您浏览问答选项列表,其中之一是排序顺序。

然后,我将宏生成的新 .bst 中的相关代码块复制到我实际想要使用的样式文件中。复制的代码如下:

FUNCTION {negate.year}
{ year empty$
    { "99999" }
    { year #1 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$
      year #2 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
      year #3 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
      year #4 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
    }
    if$
}

我现在添加了基于月份的排序(这有点丑陋,因为月份的三个字母的缩写需要解析为#):

FUNCTION {sort.format.month}
{ 't :=
  t #1 #3 substring$ "l" change.case$ "jan" =
    { "01"  }
    { t #1 #3 substring$ "l" change.case$ "feb" =
      { "02"  }
      { t #1 #3 substring$ "l" change.case$ "mar" =
        { "03"  }
        { t #1 #3 substring$ "l" change.case$ "apr" =
          { "04"  }
          { t #1 #3 substring$ "l" change.case$ "may" =
            { "05"  }
            { t #1 #3 substring$ "l" change.case$ "jun" =
              { "06"  }
              { t #1 #3 substring$ "l" change.case$ "jul" =
                { "07"  }
                { t #1 #3 substring$ "l" change.case$ "aug" =
                  { "08"  }
                  { t #1 #3 substring$ "l" change.case$ "sep" =
                    { "09"  }
                    { t #1 #3 substring$ "l" change.case$ "oct" =
                      { "10"  }
                      { t #1 #3 substring$ "l" change.case$ "nov" =
                        { "11"  }
                        { t #1 #3 substring$ "l" change.case$ "dec" =
                          { "12"  }
                          { "00"  } % No match
                        if$
                        }
                      if$
                      }
                    if$
                    }
                  if$
                  }
                if$
                }
              if$
              }
            if$
            }
          if$
          }
        if$
        }
      if$
      }
    if$
    }
  if$
}

FUNCTION {negate.month}
{ month empty$
    { "999" }
    { 
      month sort.format.month #1 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$
      month sort.format.month #2 #1 substring$ chr.to.int$ #105 swap$ - int.to.chr$ *
    }
    if$
}

bib.sort.order替换为:

FUNCTION {bib.sort.order}
{ sort.label
  "    "
  *
  negate.month field.or.null sortify
  swap$
  *
  negate.year field.or.null sortify
  swap$
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

编辑:现在按年份和月份排序。我现在也真正理解了所有代码的作用,这是一个进步。

相关内容