我正在使用 BibTeX 和natbib
。我的样式文件按文章引用的顺序排列参考书目。但有时,我希望\cite
为了参考书目顺序而忽略 ,但在其他方面完全正常工作。
最小工作示例:
\documentclass{article}
\usepackage[square,numbers,sort]{natbib}
\begin{document}
\cite{c} % Want to cite, but ignore for purpose of bibliography order.
\cite{a}
\cite{b}
\cite{c}
\bibliographystyle{unsrt}
\bibliography{ex}
\end{document}
与 ex.bib 一起:
@article{a, author="a"}
@article{b, author="b"}
@article{c, author="c"}
结果是:
正如预期的那样。我想用新命令替换第一个引用,比如说,\ignorecite
顺序是a,b,c
,主文档中的顺序是3,1,2,3
答案1
您所要做的就是删除向文件写入引用的功能.aux
。这可以通过暂时设置来实现\@fileswfalse
:
\newcommand{\ignorecite}[1]{{\@fileswfalse\cite{#1}}}%
整个\cite
命令仍然完好无损,超链接和格式化功能照常运行。
\documentclass{article}
% Write bibliography items to file
\usepackage{filecontents}% http://ctan.org/pkg/filecontents
\begin{filecontents*}{ex.bib}
@article{a, author="a"}
@article{b, author="b"}
@article{c, author="c"}
\end{filecontents*}
\makeatletter
\newcommand{\ignorecite}[1]{{\@fileswfalse\cite{#1}}}%
\makeatother
\usepackage[square,numbers,sort]{natbib}% http://ctan.org/pkg/natbib
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\begin{document}
\ignorecite{c} % Want to cite, but ignore for purpose of bibliography order.
\cite{a}
\cite{b}
\cite{c}
\bibliographystyle{unsrt}
\bibliography{ex}
\end{document}
答案2
与沃纳的回答类似,这个Frank Mittelbach 提出了一个接受引用调用本身的命令:
\makeatletter
\def\ignorecitefornumbering#1{%
\begingroup
\@fileswfalse
#1% % do \cite comand
\endgroup
}
\makeatother