在评论文章中,经常会发生这样的情况:图片取自另一个文档,而该文档在宏中被提及\caption
。\cite
如果这样的标题位于文本中第一次出现的相应图片之前\cite
,则 TeX 处理标题时会增加编号。由于读者不会先阅读标题,而是继续阅读正文,直到下一个段落或标题,因此文本中的编号会有间隙。
因此,我想引用参考书目中的条目而不创建它。简单的方法\ref
行不通。有什么想法吗?
更新:以下示例在文本中产生了所需的编号,但在标题中没有引用。当我使用注释版本时\caption
,编号就不是我想要的了。(测试时不要忘记重新运行 bibtex)。
\begin{filecontents}{./mybib.bib}
@misc{foo,
author={Foo},
title={Foo},
}
@misc{bar,
author={Bar},
title={Bar},
}
@misc{baz,
author={Baz},
title={Baz},
}
\end{filecontents}
\documentclass{article}
\usepackage[super]{natbib}
\bibliographystyle{unsrtnat}
\begin{document}
\begin{figure}
\caption{Taken from Foo\ref{foo}}
% \caption{Taken from Foo\cite{foo}}
\label{fig:foo}
\end{figure}
Bar\cite{bar} and baz\cite{baz} have done some fascinating research,
which is best summarized as shown in Figure~\ref{fig:foo} (originally
by Foo\cite{foo}).
\bibliography{./mybib}
\end{document}
答案1
natbib
这是一个使用选项加载时可以使用的解决方案super
;另一个使用标准 LaTeX 以及natbib
选项的解决方案numbers
位于底部。
\begin{filecontents}{./mybib.bib}
@misc{foo,
author={Foo author},
title={Foo title},
}
@misc{bar,
author={Bar},
title={Bar},
}
@misc{baz,
author={Baz},
title={Baz},
}
\end{filecontents}
\documentclass{article}
\usepackage[super]{natbib}
\bibliographystyle{unsrtnat}
% we patch the \bibcite macro to store the number of the
% citation
\usepackage{xpatch,xstring,etoolbox}
\makeatletter
\xapptocmd{\bibcite}{%
\StrLeft{#2}{1}[\knall]%
\StrRemoveBraces{\knall}[\peng]
\global\csedef{defcite@#1}{\peng}
}{}{}
% the \deferredcite macro calls up the number stored above, if available;
% it does not itself cause a citation to be created.
\newcommand{\deferredcite}[1]{%
\ifcsdef{defcite@#1}{\textsuperscript{\csuse{defcite@#1}}}{?}}
\makeatother
\begin{document}
\begin{figure}
\caption{Taken from Foo\deferredcite{foo}}
\label{fig:foo}
\end{figure}
Bar\cite{bar} and baz\cite{baz} have done some fascinating research,
which is best summarized as shown in Figure~\ref{fig:foo} (originally
by Foo\cite{foo}).
\bibliography{./mybib}
\end{document}
这是不带 的标准 LaTeX 的解决方案natbib
。输出是相同的,只是文内引用用括号而不是上标。
\documentclass{article}
\bibliographystyle{ieeetr} % to sort in order of appearance
\usepackage{etoolbox}
\makeatletter
\let\oldbibcite\bibcite
\renewcommand{\bibcite}[2]{%
\oldbibcite{#1}{#2}%
\global\csedef{defcite@#1}{#2}}
\newcommand{\deferredcite}[1]{~[\ifcsdef{defcite@#1}{\csuse{defcite@#1}}{?}]}
\makeatother
\begin{document}
\begin{figure}
\caption[Taken from Foo]{Taken from Foo\deferredcite{foo}}
\label{fig:foo}
\end{figure}
Bar~\cite{bar} and baz~\cite{baz} have done some fascinating research,
which is best summarized as shown in Figure~\ref{fig:foo} (originally
by Foo~\cite{foo}).
\bibliography{./mybib}
\end{document}