I don’t know if this is the forum for fundamental design questions, but I have been wondering for some time about the evolution of \cite
commands. With natbib in authoryear format, \citep
is necessary to get a citation like [Jones 2010]. If you use plain \cite
you get Jones [2010]. With newer packages you have yet other variations like \parencite
.
What seems odd to me is making the default referencing format variable. Why does \cite
not give you what you normally want and if you want to make the author name exit the citation notation, you do that with a special notation that can work if you switch to numeric format? If you use a numeric format, \cite
gives you a plain citation, so if you were using an authoryear format and change it, something like “according to Jones [2010]” turns into “according to [42]”, which does not read well.
For example, how about this?
\cite{key}
– default style format ([Jones 2010], [42] etc.)\citename{key}
– author name(s) (e.g. Jones – with style-defined options like when to use et al.)\citeyear{key}
– year\citename[cite]{key}
– author name(s) plus whatever else you need to complete the citation – e.g., Jones [2010] or Jones [42].
The way it currently works is troubling because switching styles etc. should work without having to respell your citation markup. And the simplest notation can switch from right to wrong.
Best Answer
Design question and especially why questions are always a bit tricky to answer unless you are the developer or there is extensive documentation about the decision process during development. Without that kind of insider information the answer can often come down to: Because that's how it is.
At least in standard LaTeX and with BibTeX citations and the bibliography are intricately related, so this discussion will feature both.
LaTeX kernel
In the standard LaTeX classes the bibliography environment
thebibliography
is basically a slightly extended version of theenumerate
environment that uses\bibitem
instead of\item
.\cite
is more or less a\ref
to a label generated by\bibitem
(unlike the usual\ref
\cite
can accept several comma-separated keys and has an optional postnote argument, additionally all\cite
s are logged in the.aux
file, so the actual implementation is much more complex than\ref
, but the idea is the same).This setup is very natural for numeric citations of the simple form
as they are common in many STEM areas.
The optional argument of
\bibitem
can be used to override the automatically generated numeric label, which is convenient for alphabetic labels of the formalthough you will have to provide the labels manually.
BibTeX
Your average BibTeX style just automatically generates a
thebibliography
environment for use with LaTeX. As such it can help you with automatically calculating alphabetic labels for entries. But BibTeX has little business meddling with the implementation of\cite
andthebibliography
itself. That means that the output of citation largely stays untouched.In theory it would be possible to use the optional argument of
\bibitem
to pass complete author-year labels of the form 'Sigfridsson and Ryde 1998' through to LaTeX. Furthermore,thebibliography
could be redefined to drop the label in the bibliography and the square brackets could be removed so that\cite
could be used to obtainThis is what
apalike.bst
andapalike.sty
of standard BibTeX do. But that can be unsatisfying since LaTeX doesn't actually know the author and the year of a citation here, it just knows the entire label. It is therefore hard to make a style that printsat one point output something slightly different like
at another point.
There are packages like
cite
to modify the output of the\cite
command quite comfortably (cite
also does other nice things), but they can't really change the fundamental limitation that there is only one cite label and therefore really only one\cite
command.BibTeX-based extension packages
The limitations of the 'one label' approach made people come up with methods to smuggle some raw information about an entry back to LaTeX. Instead of just telling LaTeX that the label of the entry is 'Sigfridsson and Ryde 1998' the styles tell LaTeX that the author list of that entry is 'Sigfridsson and Ryde' and that the year is '1998'. This idea makes it possible to implement several different
\cite
like commands with different output.Packages that do this usually redefine
\cite
(and possiblythebibliography
) and rely on specific.bst
styles that use the provided interfaces to pass on author and year information.One very early package that does this is
newapa
from 1985 (at least according to the CTAN page, the source code mentions that version 2.0 is from July 1991), which defines the following commandschicago
from 1992 is based onnewapa
and follows a similar approach and definesThe
harvard
package defines (amongst other commands and variants of the below)\citeasnoun
for citations of the form\cite
for citations of the form\citeyear
\citename
Finally
natbib
defines amongst many other commands (such as\citeyear
and\citeauthor
) the main commands\citet
\citep
natbib
also explicitly deprecates\cite
Note that unlike the packages mentioned before
natbib
supports both author-year and numeric citations.natbib.dtx
contains very interesting comments about the history of\cite
,\citet
and\citep
, which I quote here in fullOriginally
natbib
did not have\citep
and\citet
and the behaviour of\cite
for author-year citations would change depending on the presence of the optional (page number/post note) argument. The introduction of\citet
and\citep
then meant that there was a consistent interface that would remain stable even if the style was changed from author-year to numeric, but the behaviour of\cite
was kept the same for backwards compatibility. As to why\cite
originally behaved the way it did I can't offer more than speculation: It is the obvious choice to try and redefine\cite
, because people know it. The numeric behaviour was very likely kept in line with standard LaTeX for compatibility reasons (and because it made sense). The author-year behaviour was probably born out of a desire not to introduce different commands for '(Nussbaum, 1978)' and 'Nussbaum (1978)'. If an optional argument is present the citation refers to a particular point in the source in which case the '(Nussbaum, 1978, p. 30)' form is often more appropriate than 'Nussbaum (1978, p. 30)'. If the argument is not present that is an easy marker to go for the lighter textual citation 'Nussbaum (1978)'.Another citation package that should be mentioned when we talk about the evolution of bibliography styles is
jurabib
, especially because I see it as the link between traditional BibTeX.bst
styles andbiblatex
. But it is fairly uninteresting when it comes to\cite
. The package defines\cite
to give citations without parentheses and\footcite
for citations in footnotes. Additionally, it has emulations fornatbib
's\citep
and\citet
. Its\citefield
command was probably a new feature.biblatex
biblatex
came in much later than the packages mentioned before and completely reimplements citation and bibliography handling.biblatex
also comes with yet another set of citation commands, amongst others\cite
\parencite
\textcite
It also defines
\autocite
(which I highly recommend) to make it easier to switch between citation styles.So just to recap: Standard LaTeX only has
\cite
and that\cite
really only does numeric and alphabetic citations. There are quite some extra packages that enhance LaTeX's citation and bibliography interface and each of those packages defines a slightly different set of commands that behave slightly different.Each of the package authors will have had their own reasons for doing the things the way they did, from their idea of convenience over aesthetic considerations, to practical constraints and backwards compatibility...
The answer to the question "Why does
\cite
not give you what you normally want?" is that it is not at all clear from the start what one would normally want. Some people may only want "[2]" when they cite, some may prefer "Sigfridsson and Ryde [2]".You may also be interested in Universal `\cite` commands or defining new cite commands. But the answer to your problem might just be to follow the explicit advice in the
natbib
documentation and stop using\cite
: Use\citet
or\citep
.