我有一个.bbl
包含大量条目的文件(我没有.bib
生成它的相关文件)。是否可以告诉 LaTeX 仅包含.bbl
文本中引用的文件中引用的参考/引文,而不是所有内容(如果您“输入”文件就会发生这种情况.bbl
)?
MWE 如下:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}
\title{Your Paper}
\author{You}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
Your abstract.
\end{abstract}
\input{test.bbl}
\end{document}
答案1
如果你的.bbl
文件格式正确,那就是
你只有
\bibitem{<tag>}
条目中没有空行
每个条目(包括最后一个)后面都有一个空行
那么您可以使用一个技巧,涉及使用\citation
通常定义为不执行任何操作的操作。
文件spokus-old.bbl
\begin{thebibliography}{1}
\bibitem{Barker1998}
Chris Barker.
\newblock Partitives, double genitives and anti-uniqueness.
\newblock \emph{Natural Language \& Linguistic Theory}, 16:\penalty0 679--717,
1998.
\bibitem{Berwick1985}
Robert~C. Berwick.
\newblock \emph{Acquisition of syntactic knowledge}.
\newblock MIT Press, Cambridge, MA, 1985.
\bibitem{Carlson1977}
Gregory~N. Carlson.
\newblock \emph{Reference to Kinds in {E}nglish}.
\newblock PhD thesis, University of Massachusetts, Amherst, 1977.
\bibitem{Carlson1995}
Gregory~N. Carlson and Francis~Jeffrey Pelletier, editors.
\newblock \emph{The Generic Book}.
\newblock Chicago University Press, Chicago, 1995.
\end{thebibliography}
文件spokus.tex
\documentclass{article}
\makeatletter
\let\original@bibitem\bibitem
\def\bibitem#1#2\par{%
\@ifundefined{cited@#1}{}{\original@bibitem{#1}#2\par}%
}
\renewcommand\citation[1]{\global\@namedef{cited@#1}{}}
\makeatother
\begin{document}
\cite{Barker1998}
\cite{Carlson1977}
\input{spokus-old.bbl}
\end{document}
输出
解释
每个\cite
命令都会在辅助文件中写入一条注释,格式如下
\citation{<tag>}
这种注释通常只用于 BibTeX,因此它被定义为吞噬其参数。我们可以重新定义它来标记标签为已使用,这就是
\renewcommand\citation[1]{\global\@namedef{cited@#1}{}}
重新定义该\bibitem
命令以吸收整个条目,然后查看是否\cited@<tag>
定义;如果是,则输出该条目,否则不执行任何操作。