我正在写一篇类似以下的论文,bibtex 在引用中创建引用:
\documentclass{article}
\begin{document}
cite1~\cite{abc:oopsla2005}
cite2~\cite{martinAl:oopsla2005}
\bibliographystyle{plain}
\bibliography{bib,crossref}
\end{document}
其中 bib.bib 包含:
@InProceedings{martinAl:oopsla2005,
author = {Michael Martin and Benjamin Livshits and Monica S. Lam},
title = {Finding application errors and security flaws using {PQL}: a program query language},
crossref = {oopsla2005},
pages = {365--383},
}
并且 crossref.bib 包含:
@proceedings{oopsla2005,
key = {OOPSLA 2005},
booktitle = {Proceedings of the 20th {ACM SIGPLAN} Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA 2005)},
title = {Proceedings of the 20th {ACM SIGPLAN} Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA 2005)},
year = 2005,
address = {San Diego, California, USA},
month = oct,
publisher = acm,
note = sigplan # {, 40(11)}
}
因此,当我创建 pdf 文件时,我得到:
[1] M. Martin, B. Livshits, MS Lam, 使用 PQL 查找应用程序错误和安全漏洞:一种程序查询语言,收录于:[3],第 365-383 页。ACM SIGPLAN 通知,40(11)。
[2] C. Allan,P. Avgustinov,AS Christensen,L. Hendren,S. Kuzins,O. Lhot ́ak,O. de Moor,D. Sereni,G. Sittampalam 和 J. Tibble,在 AspectJ 中添加带有自由变量的跟踪匹配,收录于:[3],第 345-364 页。ACM SIGPLAN 通知,40(11)。
其中 [3] 为:
[3] OOPSLA 2005,第 20 届 ACM SIGPLAN 面向对象编程系统、语言和应用会议(OOPSLA 2005)论文集,ACM Press,美国加利福尼亚州圣地亚哥,2005 年。ACM SIGPLAN 通知,40(11)。
我想扩展引文 1 和 2 以显示这些参考文献的完整内容。如果我可以显示完整参考文献,我希望 Latex/Bibtex 删除参考文献 3。
是否可以在 Latex 中设置一些参数来实现我的目标?(我无法使用行命令选项,因为我的 Latex 文件是在日志服务器中编译的)
换句话说,我只是想得到:
[1] M. Martin, B. Livshits, MS Lam, 使用 PQL:一种程序查询语言查找应用程序错误和安全漏洞,载于第 20 届 ACM SIGPLAN 面向对象编程系统、语言和应用程序会议(OOPSLA 2005)论文集,ACM Press,美国加利福尼亚州圣地亚哥,2005 年。ACM SIGPLAN 通知,40(11)。
[2] C. Allan,P. Avgustinov,AS Christensen,L. Hendren,S. Kuzins,O. Lhot ́ak,O. de Moor,D. Sereni,G. Sittampalam 和 J. Tibble,在 AspectJ 中添加带有自由变量的跟踪匹配,载于第 20 届 ACM SIGPLAN 面向对象编程系统、语言和应用程序会议(OOPSLA 2005)的论文集,ACM Press,美国加利福尼亚州圣地亚哥,2005 年。ACM SIGPLAN 通知,40(11)。
答案1
您的帖子缺少一些细节,例如 Allan 等人的文章条目。因此,我的回答无法完全复制您的要求。以下是一些观察:
要使用 BibTeX 的
crossref
功能,请使用label
一个条目的作为另一个条目的字段的值crossref
;不要使用名为的字段key
。您已经这样做了,但只是为了完整性:被交叉引用的条目在 bib 文件(或 bib 文件)中必须比包含对该条目的交叉引用的条目(或条目)更晚出现。
如果您只希望“主要”条目显示在参考书目中,而不显示包含部分交叉引用信息的条目,不
\cite
被交叉引用的条目。如果您想要缩写的名字,您应该使用参考书目样式,例如
abbrvnat
(如果您使用该natbib
包)或abbrv
;不要使用plain
(或plainnat
)。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{bib.bib}
@InProceedings{martinAl:oopsla2005,
crossref = {oopsla2005},
author = {Michael Martin and Benjamin Livshits and Monica S. Lam},
title = {Finding application errors and security flaws using {PQL}: a program query language},
pages = {365--383},
}
\end{filecontents*}
\begin{filecontents*}{crossref.bib}
@book{oopsla2005,
booktitle = {Proceedings of the 20th {ACM SIGPLAN} Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA 2005)},
title = {Proceedings of the 20th {ACM SIGPLAN} Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA 2005)},
year = 2005,
address = {San Diego, California},
month = oct,
publisher = acm,
note = sigplan # {, 40(11)} ,
}
\end{filecontents*}
\usepackage{natbib}
\begin{document}
%cite1~\cite{oopsla2005} %% no need to
\cite{martinAl:oopsla2005}
\bibliographystyle{abbrvnat}
\bibliography{bib,crossref}
\end{document}