With etoolbox
you can patch the command natbib
uses to set all non-numeric citation labels: \NAT@citex
. The postnote is passed to \NAT@citex
as the second argument (#2
). For \citet
and its variants \ifNAT@swa
will expand <false>
, \ifNAT@par
expands <true>
and \NAT@date
is defined.
\documentclass{article}
\usepackage{natbib}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\NAT@citex}
{\ifNAT@swa\else\if*#2*\else\NAT@cmt#2\fi
\if\relax\NAT@date\relax\else\NAT@@close\fi\fi}
{\ifNAT@swa\else\if*#2*\else\ifNAT@par\else\NAT@cmt#2\fi\fi
\if\relax\NAT@date\relax\else\NAT@@close%
\if*#2*\else\ifNAT@par\NAT@cmt#2\fi\fi\fi\fi}{}{}
\makeatother
\begin{filecontents}{\jobname.bib}
@Book{companion,
author = {Goossens, Michel and Mittelbach, Frank and Samarin, Alexander},
title = {The LaTeX Companion},
edition = {1},
publisher = {Addison-Wesley},
location = {Reading, Mass.},
year = {1994}}
@Book{adams,
title = {The Restaurant at the End of the Universe},
author = {Douglas Adams},
series = {The Hitchhiker's Guide to the Galaxy},
publisher = {Pan Macmillan},
year = {1980}}
\end{filecontents}
\newcommand{\cmd}[1]{\textbackslash\texttt{#1}}
\begin{document}
\noindent
\cmd{citet}: \citet[e.g.][100]{adams}, \citet[pp. 1--10]{companion,adams} \\
\cmd{Citet}: \Citet[pp. 1--10]{adams}, \Citet[pp. 1--10]{companion} \\
\cmd{citet*}: \citet*[pp. 1--10]{companion,adams} \\
\cmd{Citet*}: \Citet*[p. 10]{companion} \\
\cmd{cite}: \cite[e.g.][100]{adams}, \cite{companion} \\
\cmd{citep}: \citep[e.g.][p. 20]{adams}, \citep[1--10]{companion,adams} \\
\cmd{citetext}, \cmd{citealp}:
\citetext{see \citealp{companion}, or even better \citealp{adams}} \\
\cmd{citeauthor}: \citeauthor{adams}, \citeauthor{companion} \\
\cmd{citeyear}: \citeyear{adams}, \citeyear{companion} \\
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
Best Answer
You haven't specified which bibliography style you use. Assuming it's a style that can generate both numeric-style and authoryear-style citation call-outs -- some bibliography styles can generate only the latter type... -- you should load the
natbib
package with the optionnumbers
. Alternatively, issue the instructionafter loading the
natbib
package.