Bibtex:unsrt 和 crossref

Bibtex:unsrt 和 crossref

我正在写一篇论文,其书目样式为 unsrt(由编辑器强制)。我使用 texlive 2010 和 latexmk 进行编译。

我尝试使用 crossref 来处理 bib 文件中的 inproceedings 条目。它在其他文档(具有相同的 bib 条目但样式不同)上运行良好,但在这个文档上 bibtex 会报错:

Warning--empty booktitle in xxx
Warning--empty booktitle in yyy

诉讼程序在诉讼程序开始前按要求进行定义。

以下是 MWE:

\documentclass[a4paper,10pt]{article}

\begin{document}

See~\cite{Joe2011} for details.

\bibliographystyle{unsrt}
\bibliography{test_unsrt}

\end{document}

使用以下 bib 文件:

@INPROCEEDINGS{Joe2011,
 author = {Joe, J.},
 title = {On the use of crossref and unsrt},
 crossref = {stackexchange/tex/23122}
}

@PROCEEDINGS{stackexchange/tex/23122,
  title = {Proceedings of question 23122},
  year = {2011},
}

只需将 title 字段更改为 booktitle 即可。

问题是,论文集条目应该有一个标题字段(而不是书名)。例如,JabRef 只建议使用标题字段。我尝试过的大多数样式都使用标题字段。目前我的问题已经解决,但也许熟悉 bibtex 的人可以解决这个问题。

提前致谢。

答案1

这是 BibTeX 数据库格式的一个众所周知的设计缺陷:

  • inproceedings参赛作品必须提供两个都title字段 – 定义相应以及booktitle赋予了诉讼书。

  • 当您crossref在 BibTex 中引用另一个条目时,所有尚未设置的字段都将从引用的条目中获取。因此,引用从到inproceedingsproceedings导入所有字段,但title,该字段已用于论文标题。之后,BibTeX 投诉 是否booktitle(仍然)缺失。

  • proceedings但是,条目需要字段给出其标题(与其他书籍一样)title。如果您直接引用会议记录书(如\cite{stackexchange/tex/23122}),则会采用该标题,或者样式会自动执行该操作(以缩短您的inproceedings条目)。

因此,一般(但不太好看)的建议(例如,维基百科)能够proceedings单独使用条目以及crossrefinproceedings条目编辑的条目是说明标题两次:一次作为title,一次作为booktitle

编辑:

解决这个问题的一个不太难看的方法是将传统的 BibTex 转换为比布拉特克斯比伯后端,正如lockstep在答案中所解释的那样。

答案2

这是使用比布拉特克斯/比伯组合。引用 biblatex 手册第 2.4.1 节:

字段crossref是建立两个关联条目之间的父/子关系的便捷方式。不幸的是,BibTeX 使用对称字段映射,这大大降低了 crossref 字段的实用性。[...] 由于 BibTeX 无法将 title父字段映射到booktitle子字段,因此需要提供两次书名。然后样式需要忽略booktitle父级,因为它只需要解决 BibTeX 的这个基本限制。[...]

有了 Biber,BibTeX 交叉引用字段的局限性就成为过去了。Biber 具有高度可定制的交叉引用机制和灵活的数据继承规则。不再需要复制父条目中的某些字段 [...]。[...]title父条目的字段将被复制到booktitle子条目的字段[...]。

答案3

我认为,最简单的解决方案是增加 bib 文件中的第二个条目:

@PROCEEDINGS{stackexchange/tex/23122,
  title = {Proceedings of question 23122},
  booktitle = {Proceedings of question 23122},
  year = {2011},
}  

也就是说,您需要做的就是创建一个书名条目(并使它与书名相同)。然后 BiBtex 就可以正常工作了。

相关内容