如何改变排序顺序以将在线 URL 引用放在参考书目的末尾?

如何改变排序顺序以将在线 URL 引用放在参考书目的末尾?

我希望通过将 @misc 条目移到末尾(学术会议出版物之后)来减少参考书目中 @misc 条目的权重。我喜欢 abbrvnat 呈现参考书目项目的方式。我还使用 natbib 来获取数字引用和压缩。

默认情况下,它按作者姓名对引用进行排序(这很好),当没有作者姓名时,它似乎使用其他内容(标题?)作为参考书目中的排序字段。

将所有 @misc 引用发送到文档末尾并保持其相对顺序的最简单方法是什么?

示例文档:

\documentclass[11pt]{article}
\usepackage[hyphens]{url}
\usepackage[numbers,sort&compress]{natbib}

\begin{document}

Articles: \cite{bogus, greenwade93}

Website: \cite{example}

\bibliographystyle{abbrvnat}
\bibliography{biblio}

\end{document}

\bibliographystyle{myabbrvnat}
\bibliography{biblio}

参考书目示例:

@misc{example,
  title = {{Example.org Home Page}},
  howpublished = {\url{http://example.org/}},
  note = {Accessed: June 2017.}
}

@article{bogus,
  aurhor =  {Bogus Redwade},
  title = {A Bogus Article},
  year = {1993},
}

@article{greenwade93,
  author  = {George D. Greenwade},
  title   = {The {C}omprehensive {T}ex {A}rchive {N}etwork ({CTAN})},
  year    = {1993},
  journal = {TUGBoat},
  volume  = {14},
  number  = {3},
  pages   = {342--351}
}

在这个例子中,我希望网站移至列表末尾。如果有多个网站,则应保持它们的相对顺序。

截屏

答案1

假设您愿意修改参考书目文件,您可以使用众所周知的\noopsort解决方法(请参阅https://tex.stackexchange.com/search?q=noopsort) 将 misc 条目排在其余条目之后。由于排序是按作者进行的,因此您还应将 misc 条目的 title 字段更改为 author。对于此解决方案,您无需更改 -file .bst

例子:

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

@misc{example,
  author = {{\noopsort{zzz-example}}{Example.org Home Page}},
  howpublished = {\url{http://example.org/}},
  note = {Accessed: June 2017.}
}

结果:

在此处输入图片描述

或者,使用biblatex也可以在不更改参考书目文件的情况下使用它,方法是根据类型打印单独的参考部分。改编自https://tex.stackexchange.com/a/6966

\printbibliography[nottype=misc,title={References}]
\vspace{-6mm}
\printbibliography[heading=none,type=misc]

这里的小问题是,即使没有标题,第二个参考书目部分仍然会引入一些需要删除的额外空间(例如使用负数vspace)。

答案2

我找到了一种方法,但它需要编辑 BST 文件。这感觉有点过头了。不过,bst 文件似乎确实负责排序。

我首先尝试改变我认为的条目的关键,例如改变,@misc{foo,...}但这@misc{z-foo,...}根本没有效果,所以我深入挖掘。

步骤 1. 编辑 bst 文件

  1. 将 abbrvnat.bst 复制到项目目录中($ cp /usr/share/texlive/texmf-dist/bibtex/bst/natbib/abbrvnat.bst ./myabbrtnat.bst
  2. 在文件顶部,请注意上面写着:“具有相同作者和年份的作品进一步按引用键排序,以保持自然顺序” Abbrvnat 首先按作者排序。这可能意味着它使用元组进行排序:(author(s), year, key)

  3. 编辑复制的文件:

    1. ENTRY部分中,在 之后key,添加一个名为 的新字段,sortkey占据其自己的行。
    2. 有一个 author.sort 函数。我修改了它来处理 'sortkey' 字段以覆盖 author 字段:

(某些引用类型不使用作者排序(例如按编辑者排序),因此可能需要根据您的参考书目在其他地方复制)

FUNCTION {author.sort}
{ sortkey empty$
    { author empty$
      { key empty$
          { "to sort, need author or key in " cite$ * warning$
          ""
          }
          { key sortify }
    if$
      }
      { author sort.format.names }
      if$
    }
    { sortkey sortify }
  if$
}

步骤 2. 使用修改后的 BST

  1. 在主 latex 文件中:更改为\bibliographystyle{myabbrvnat}

  2. 对于每个需要改变顺序的书目项目,添加一个sortkey具有新值的字段,该字段用于确定其顺序。如果我想最后发送它,我会在条目名称前面加上“zz-”

原文中:

...
Website: F~\cite{example-f}, E~\cite{example-e}, A~\cite{example-a}
...

和书目:

@misc{example-a,
  sortkey = {axample}, % will go before others - starts with 'a'
  title = {{Axample.org Home Page}},
  howpublished = {\url{http://example.org/}},
}

@misc{example-e,
  sortkey = {zzz-example},     % send to the back. prefix with 'zzz-'
  title = {{Example.org Home Page}},
  howpublished = {\url{http://example.org/}},
}

@misc{example-f,
  sortkey = {zzz-fxample},     % send to the back. prefix with 'zzz-'
  title = {{Fxample.org Home Page}},
  howpublished = {\url{http://example.org/}},
}

生成:

结果

相关内容