Include two dates in parenthetical citation without including two dates in references

citingnatbib

I am using Springer's svjour3.cls and spbasic.bst files. I modified the .bst file to conform to the citation style of the specific Springer journal in which I'm publishing (a variation on APA style). Here's an example of how that looks in the outputted PDF:

enter image description here

As you can see, I only want to include one date ("2004") after the author's name; the other date ("1988") is mentioned in parentheses.

To achieve this result, here's how the .bib entry looks:

@incollection{Lewis1988,
    author = {David Lewis}, 
    pages = {77--103},
    editor = {Peter Ludlow and Yujin Nagasawa and Daniel Stoljar},
    booktitle = {There's Something About Mary: Essays on Phenomenal Consciousness and Frank Jackson's Knowledge Argument},
    year = {2004}, 
    origdate = {1988},
    title = {What Experience Teaches},
    publisher = {Cambridge, MA: MIT Press},
    note = {(Reprinted from ``What experience teaches," 1988, \textit{Proceedings of the Russellian Society}, \textit{13}, pp. 29--57)}
}

However, if I cite this entry in my tex file with the command \citep[see, e.g.,][]{Lewis2004}, it only displays the more recent date:

enter image description here

I'd like it to look like this: "see, e.g., Lewis 1988/2004."

The only way I've found to achieve this result is to include the second date in the "year" field of the .bib entry:

year = {1988/2004}

But if I do that, it includes the year in the reference entry, and I don't want that:

enter image description here

How can I achieve the desired result? I suspect that there should be a solution involving the "origdate" element of the .bib entry. I've come across would be solutions involving the \DeclareFieldFormat command, but I can't get them to work in my TeX file, perhaps because I'm using natbib.

Any ideas?

Best Answer

With natbib you can define a citation alias for these sorts of cases. Since you're using a modified .bst file, in this example I've just used the apalike style, but the solution should work with your modified style too.

The one downside of the basic solution is that the parentheses are hardcoded into the citation, so if you use citepalias you will get (Lewis (1988/2004)) which is probably not what you want.

We can get around this by making the parentheses context sensitive with a conditional.

Since natbib doesn't provide corresponding alt commands for the alias citations, if we want an \citealpalias command we need to provide one, which is what you figured out. The way I set up the context sensitive parentheses was by setting the conditional on the \citetalias command. So if we create a new \citepalias command, it will use the "no parentheses" version of the alias.

\documentclass{article}
\begin{filecontents}{\jobname.bib}
@incollection{Lewis1988,
    author = {David Lewis}, 
    pages = {77--103},
    editor = {Peter Ludlow and Yujin Nagasawa and Daniel Stoljar},
    booktitle = {There's Something About Mary: Essays on Phenomenal Consciousness and Frank Jackson's Knowledge Argument},
    year = {2004}, 
    origdate = {1988},
    title = {What Experience Teaches},
    publisher = {Cambridge, MA: MIT Press},
    note = {(Reprinted from ``What experience teaches," 1988, \textit{Proceedings of the Russellian Society}, \textit{13}, pp. 29--57)}
}
\end{filecontents}
\usepackage{natbib}
\bibliographystyle{apalike}
\newif\ifcitep\citeptrue
\newcommand*\altlparen{\ifcitep\else(\fi}
\newcommand*\altrparen{\ifcitep\else)\fi\global\citeptrue}
\usepackage{etoolbox}
\pretocmd{\citetalias}{\citepfalse}{}{}
\makeatletter
\DeclareRobustCommand\citealpalias{\begingroup
   \NAT@swatrue\let\NAT@ctype\thr@@\NAT@parfalse\NAT@citetp}
\makeatother
\defcitealias{Lewis1988}{Lewis \altlparen 1988/2004\altrparen}

\begin{document}
\citetalias{Lewis1988}
\citepalias{Lewis1988}
\citealpalias{Lewis1988}
\bibliography{\jobname}
\end{document}

output of code

Related Question