按出版年份对同一作者的出版物进行排序

按出版年份对同一作者的出版物进行排序

我有一份文档,其中两篇论文具有相同的第一作者和相同的年份。在我当前的 bitex 样式文件中,论文按照年份和作者列出并编号,这通常很好,但在这个特定情况下,我希望根据它们的出现而不是第二作者列出两篇论文:

例子:

当前列表:

hqkjshdqksd qhsdqh by Peterson et al. (**2013b**), hdqkjshdkqjsdhsqd (Peterson et al. **2013a**).

参考:

Peterson, A. & **Meier**, B. **2013a** Second listed reference

Peterson, A. & **Umber**, B. **2013b** First listed reference

应该:

hqkjshdqksd qhsdqh by Peterson et al. (**2013a**), hdqkjshdkqjsdhsqd (Peterson et al. **2013b**).

参考:

Peterson, A. & **Umber**, B. **2013a** First listed reference

Peterson, A. & **Meier**, B. **2013b** Second listed reference

不确定如何实现这一点。由于文件是唯一的问题,所以尝试破解文件,但没有成功。认为它与、或预排序函数bibtex之一有关(见下文)。提前谢谢!!sort.format.nalesauthor.sortcalc.label

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}"
      format.name$ 't :=
      nameptr #1 >
        {
          nameptr #7
          #1 + =
          numnames #7
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          "   "  *
          namesleft #1 = t "others" = and
            { "zzzzz" * }
            { t sortify * }
          if$
        }
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}
FUNCTION {calc.label}
{ calc.short.authors
  short.list
  "("
  *
  year duplicate$ empty$
  short.list key field.or.null = or
     { pop$ "" }
     'skip$
  if$
  *
  'label :=
}

FUNCTION {presort}
{ calc.label
  label sortify
  "    "
  *
  type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.sort
        'author.sort
      if$
    }
  if$
  #1 entry.max$ substring$
  'sort.label :=
  sort.label
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}

梅威瑟:

\documentclass[english]{article} 
\usepackage[authoryear]{natbib} 
\usepackage{babel} 
\begin{document} 
hqkjshdqksd qhsdqh by \citet{Peterson2013}, 
hdqkjshdkqjsdhsqd \citep{Peterson2013a}. 
\bibliographystyle{icesjms} 
\bibliography{order_citations} 
\end{document}

围兜文件:

@ARTICLE{Peterson2013a, 
  author = {Peterson, A and Meier, B. and Kensington, U}, 
  title = {Second listed reference}, 
  year = {2013}, 
  owner = {robert}, 
  timestamp = {2013.07.17} 
} 
@ARTICLE{Peterson2013, 
  author = {Peterson, A and Umber, B. and Kensington, U}, 
  title = {First listed reference}, 
  year = {2013}, 
  owner = {robert}, 
  timestamp = {2013.07.17} 
}

答案1

非常感谢 Mico!\noopsort完成了工作!

在.bib 文件中仅做了以下更改:

@PREAMBLE{ {\providecommand{\noopsort}[1]{}} 

@ARTICLE{Peterson2013b,
  author = {Peterson, A. and {\noopsort{b}}Meier, B. and Kensington, U},
  title = {Second listed reference},
  year = {2013},
  owner = {robert},
  timestamp = {2013.07.17}
}

@ARTICLE{Peterson2013a,
  author = {Peterson, A. and {\noopsort{a}}Umber, B. and Kensington, U},
  title = {First listed reference},
  year = {2013},
  owner = {robert},
  timestamp = {2013.07.17}
}

相关内容