我正在尝试将 BibTeX 与字母一起使用;我希望这不会太奇怪。不过,字母类不支持 BibTeX。我发现 使用字母时环境 thebibliography undefined。但是,所描述的解决方案并不完美。参考书目出现在其自己的页面上(在我的情况下只有两个条目),并且编号与普通样式不符,即 [2] 出现在信中的 [1] 之前。
这些问题能修复吗?或者,我有什么选择?我可以使用其他字母类别吗?前段时间我发帖到 comp.text.tex,那里的人对字母类别相当鄙视,并向我指出了各种他们认为更好的替代方案。这些替代方案中是否有内置的 BibTeX 支持?
编辑1:上述两个问题都是用户错误。
正如约瑟夫所指出的,错误的顺序是因为我使用了该
plain
风格。书目放在单独一页上是因为我把
\bibliographystyle
和\bibliography
条目放在了关闭letter
环境之后而不是
之前。再次,约瑟夫的例子帮助我理清了思路。
总而言之,原帖没有任何问题,尽管毫无疑问 Joseph 的版本有所改进,而且肯定更短。原版和 Joseph 的版本对我来说都很好用。我将 Joseph 帖子中的文本放在和之间,\makeatletter
然后\makeatother
将其放入单独的 sty 文件中,以便与我的信件一起使用。
编辑 2:添加\usepackage{natbib}
到序言会破坏编译。无论我把它放在“自制”bib sty 文件之前还是之后都没有区别。我明白了
ERROR: LaTeX Error: Environment thebibliography undefined.
答案1
按照课堂上的定义article
,我得到了很好的结果
\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}
我在这里使用了unsrt
样式,将plain
参考文献按字母顺序排列,而不是按引用顺序排列。我还修改了定义,删除了与章节相关的内容,因为这似乎与信件无关。(我还删除了与课程选项thebiliography
相关的代码,同样因为它似乎不相关。)openbib
article
问题的第二次编辑询问有关natbib
。对我来说,如果我natbib
在定义后加载thebiliography
并且如果我使\bibsection
“安全”,则此方法有效:
\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}
答案2
我遇到了同样的问题,我认为我找到了一个更优雅、更广泛的解决方案。
的开发者komascript.de提供一个scrartcl
与标准文章类基本相同的类,但允许集成字母。其妙处在于,您不仅可以打印参考书目,还可以使用文章类中可能遗漏的部分和其他工具。一个实际示例:
\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{scrartcl}
\usepackage{scrletter}
\usepackage[numbers]{natbib}
\usepackage{lipsum}
\begin{document}
\setkomavar{fromname}{Name of Sender}
\setkomavar{fromaddress}{Address of Sender}
\begin{letter}{Name of Recipient\\Address of Recipient}
\opening{Dear Recipient,}
\section{Interesting Stuff}
The first~\cite{First} citation.
\lipsum%
\section{Another Citation}
And the second~\cite{Second} citation.
\closing{Yours sincerely,}
\bibliographystyle{unsrtnat}
\bibliography{letter}
\end{letter}
\end{document}