我使用natbib
上标编号引用如下:
\usepackage[super,comma,sort&compress]{natbib}
当我有案例时,它非常有用This is a reference~\cite{author1999}
。我的参考资料显示为上标。
不过,我偶尔会想写类似这样的内容:As shown by \citet{author1999}
我希望将引用写出来而不是上标。natbib
在超级模式下使用时会插入上标\citet
。
有没有办法在超级模式下也能在常规模式下natbib
使用\citet
?是否可以暂时将模式更改为不具有超级模式,然后再重新打开?
答案1
假设你想要一个非上标编号引用,您可以定义一个新命令\citenst
来模仿\citet
但在本地禁用该选项的设置superscript
。
\documentclass{article}
\usepackage[super,comma,sort&compress]{natbib}
\makeatletter
\newcommand*{\citenst}[2][]{%
\begingroup
\let\NAT@mbox=\mbox
\let\@cite\NAT@citenum
\let\NAT@space\NAT@spacechar
\let\NAT@super@kern\relax
\renewcommand\NAT@open{[}%
\renewcommand\NAT@close{]}%
\citet[#1]{#2}%
\endgroup
}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
\end{filecontents}
\begin{document}
This is a reference~\cite{A01}.
As shown by \citenst{A01}~\dots
As shown by \citet{A01}~\dots
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
答案2
通常,您不能将作者年份类型的引文与数字引文混合使用。但natbib
提供了\citeauthor
和\citeyear
命令,因此您可以构建一个简单的版本以满足您的用途:
\newcommand{\textcite}[1]{\citeauthor{#1}~\citeyear{#1}}
然后使用\textcite{<key>}
。如果你只需要作者,那么你可以\citeauthor
直接使用。
答案3
@lockstep 的回答很有帮助,但我遇到了一个稍微不同的问题,我的搜索把我带到了这里。
我在 RevTeX 中使用上标参考样式,但我想在运行的文本中使用参考编号,例如“更多详细信息请参阅参考文献 7”。
于是我把lockstep的代码修改如下:
%citenumns provides the reference number for a citation, not superscripted or bracketed
\makeatletter
\newcommand*{\citenumns}[2][]{%
\begingroup
\let\NAT@mbox=\mbox
\let\@cite\NAT@citenum
\let\NAT@space\NAT@spacechar
\let\NAT@super@kern\relax
\renewcommand\NAT@open{}%
\renewcommand\NAT@close{}%
\cite[#1]{#2}%
\endgroup
}
\makeatother
现在我们就可以...further details can be found in reference \citenumns{some_ref}
得到我想要的效果了。
(之所以添加到这里,是因为这是最相关的问题,我本来可以重复它)