我正在写一篇论文,其书目样式为 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 中引用另一个条目时,所有尚未设置的字段都将从引用的条目中获取。因此,引用从到inproceedings
将proceedings
导入所有字段,但title
,该字段已用于论文标题。之后,BibTeX 投诉 是否booktitle
(仍然)缺失。proceedings
但是,条目需要字段给出其标题(与其他书籍一样)title
。如果您直接引用会议记录书(如\cite{stackexchange/tex/23122}
),则会采用该标题,或者样式会自动执行该操作(以缩短您的inproceedings
条目)。
因此,一般(但不太好看)的建议(例如,维基百科)能够proceedings
单独使用条目以及crossref
由inproceedings
条目编辑的条目是说明标题两次:一次作为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 就可以正常工作了。