[Tex/LaTex] Using BibTeX with letter class

bibtexletters

I'm trying to use BibTeX with a letter; I hope this is not too eccentric. The letter class doesn't have BibTeX support, though. I found Environment thebibliography undefined when using letter. However, the solution described does not work perfectly. The bibliography appears on its own page (in my case it is just two entries), and the numbering is out of order with the plain style ie. [2] appears before [1] in the letter.

Can these issues be fixed? Alternatively, what are my choices? Could I use another letter class? Some time ago I posted to comp.text.tex, and the people there were rather despising about the letter class, and pointed me to various alternatives which they said were better. Do any of these alternatives have built-in BibTeX support?

EDIT1: Both the problems mentioned above were user error.

  1. The wrong order, as pointed out by Joseph, was because I was using the plain
    style.

  2. The bibliography on a separate page was because I put the \bibliographystyle
    and \bibliography entries after closing the letter environment instead of
    before. Again, Joseph's example was helpful in setting me straight.

In summary, there is nothing wrong with the original post, though no doubt Joseph's version is an improvement, and is certainly shorter. Both the original version and Joseph's version work fine for me. I put the text in Joseph's post between \makeatletter and \makeatother into a separate sty file when using it with my letter.

EDIT2: Adding \usepackage{natbib} to the preamble breaks the compile. Whether I put it before or after the "homemade" bib sty file doesn't make a difference. I get

ERROR: LaTeX Error: Environment thebibliography undefined.

Best Answer

Taking the definition from the article class, I get good results with

\begin{filecontents}{letter.bib}
@article{First,
  author  = "Other, A. N.",
  title   = "Some things {I} did",
  journal = "J. Irreproducible Results",
  year    = "2011"
}

@article{Second,
  author  = "Aaa, S{\o}mebloke",
  title   = "Tigers",
  journal = "Ann. Improbable Res.",
  year    = "2011"
}
\end{filecontents}

\documentclass{letter}
\makeatletter
\newenvironment{thebibliography}[1]
     {\list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
\makeatother
\begin{document}
\begin{letter}{Some person}
\opening{Hello}

Some text \cite{First}, more text \cite{Second}.

\bibliographystyle{unsrt}
\bibliography{letter}

\end{letter}
\end{document}

I've used the unsrt style here, as plain would put the references in alphabetical rather than citation order. I've also modified the definition of thebiliography a little, removing the section-related stuff as this does not really seem relevant to a letter. (I also took out the code related to the openbib option for the article class, again as it does not seem relevant.)


The second edit to the question asks about natbib. For me, this works if I load natbib after defining thebiliography and if I make \bibsection 'safe':

\begin{filecontents}{letter.bib}
@article{First,
  author  = "Other, A. N.",
  title   = "Some things {I} did",
  journal = "J. Irreproducible Results",
  year    = "2011"
}

@article{Second,
  author  = "Aaa, S{\o}mebloke",
  title   = "Tigers",
  journal = "Ann. Improbable Res.",
  year    = "2011"
}
\end{filecontents}

\documentclass{letter}
\makeatletter
\newenvironment{thebibliography}[1]
     {\list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
\makeatother
\usepackage[numbers]{natbib}
\let\bibsection\relax
\begin{document}
\begin{letter}{Some person}
\opening{Hello}

Some text \cite{First}, more text \cite{Second}.

\bibliographystyle{unsrtnat}
\bibliography{letter}

\end{letter}
\end{document}
Related Question