我有一篇很长的文档,末尾有一个(单个)参考书目。出于某种原因,我在中间的某个地方引用了 3 个来源,我需要当场排版它们的参考书目条目。我该怎么做?
我正在使用bibtex
,但没有biblatex
。 (目前。)
我还要提到,这些恰好是某个中的唯一引用\chapter*
,因此基于章节参考书目的解决方案是相关的,尽管这并不是我想要的。
答案1
如果引用的来源也出现在最终的参考书目中,则此方法有效;只有在生成完整的参考书目后,它们才会出现,因为我们阅读的是同一个.bbl
文件。
该命令\partialcites
将最宽的标签作为第一个参数(恐怕自动计算它会相当困难),并将您需要的引用键作为第二个参数。
\documentclass{article}
\usepackage{xstring}
\makeatletter
\newcommand{\partialcites}[2]{%
\begingroup
\let\etalchar\@undefined
\def\thebibliography##1{%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\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}}%
}
\let\endthebibliography\endlist
\def\bibitem[##1]##2##3\par{\IfSubStr{,#2,}{,##2,}{\item[\cite{##2}]##3}{}}%
\@input{\jobname.bbl}%
\endgroup}
\makeatother
\begin{document}
\partialcites{AFKS00}{key1,key2}
\nocite{*}
\bibliographystyle{alpha}
\bibliography{mybib}
\end{document}
限制: 的参数\partialcites
在逗号周围不能有空格。子字符串的问题其实很容易解决。
答案2
您应该使用bibentry.sty
,它的设计就是为了完成您想要做的事情。
答案3
egreg 的早期解决方案,包含 egreg 的一些调整/想法/建议:
- 支持“alpha”风格(可能还有很多其他与plain不同的风格)。
- 允许在主要参考书目之后使用该命令。
- 一个有点丑陋的黑客支持引用键彼此作为子字符串。
\documentclass{article}
\usepackage{xstring}
\makeatletter
\newcommand{\partialcites}[1]{%
\begingroup
\let\etalchar\@undefined
\def\thebibliography##1{\begin{itemize}}%
\def\endthebibliography{\end{itemize}}%
% for plain style
%\def\bibitem##1##2\par{\IfSubStr{#1}{##1}{\item[\cite{##1}]##2}{}}%
\def\bibitem[##1]##2##3\par{\IfSubStr{,#1,}{,##2,}{\item[\cite{##2}]##3}{}}%
\@input{\jobname.bbl}%
\endgroup}
\makeatother
\begin{document}
\partialcites{AB,CD}
Now for a real cite. \cite{AB}. \cite{CD}.
%\nocite{*}
%\bibliographystyle{plain}
\bibliographystyle{alpha}
\bibliography{mybib}
\end{document}