我希望有多个书目(参考文献列表),如下所述 Airminded · LaTeX 中的多个参考书目(TeX 常见问题 -- 问题标签“multbib”)。
不过,我想使用一个 .tex 文件,其中包含嵌入的参考书目数据库,如下所示LaTeX/书目管理:#1 嵌入式系统...
现在,我想使用letter
documentclass,需要为其定义参考书目(回复:使用字母时环境 thebibliography 未定义)
所以我最终得到了这个例子(下面的代码,只用编译pdflatex
,没有bibtex
(在这种情况下我想避免这种情况)):
... 显然,有些东西起作用了(multibib
识别主要和次要引用,为它们分配数字“1”作为开始)——但是我没有得到两个单独的主要和次要参考列表;在这种情况下这可能吗?(不必与multibib
,但我想避免单独的.bib
文件和bibtex
调用)
编辑:我还想使用单独的引用键(即呈现为[a1]
和[b1]
;尚不确定是否multibib
可以这样做;编辑:不可以,多书目.pdf说“您还可以编辑由 BibTEX 创建的 .bbl 文件并向标签添加“a”、“b”……,但您的更改将被后续的 BibTEX 运行覆盖。“并建议\cite[a]{key}
)——这怎么可能呢?
代码如下:
\documentclass{letter}
% Environment thebibliography undefined when using letter: http://www.latex-community.org/forum/viewtopic.php?f=4&t=3359
\makeatletter
\setlength \labelsep {.5em}
\newcommand\newblock{\hskip
.11em\@plus.33em\@minus.07em} \let\@openbib@code\@empty
\newcommand\refname{References}
\newcommand\section{\@startsection
{section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
\newenvironment{thebibliography}[1]
{\section*{\refname}%
\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
\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}}%
\endlist}
\makeatother
\usepackage{multibib}
\newcites{pri}{Primary sources}
\newcites{sec}{Secondary sources}
\begin{document}
\begin{letter}{Addressee}
Blah, blah - content...
Primary cite: \citepri{lamport94} ...
Secondary cite: \citesec{lamport94} ...
\begin{thebibliography}{9}
\bibitem{lamport94}
Leslie Lamport,
\emph{\LaTeX: A Document Preparation System}.
Addison Wesley, Massachusetts,
2nd Edition,
1994.
\bibitem{lamport95}
Leslie Lamport,
\emph{\LaTeX: A Document Preparation System}.
Addison Wesley, Massachusetts,
2nd Edition,
1995.
\end{thebibliography}
\end{letter}
\end{document}
答案1
在您keyword
使用 的过滤方法下biblatex
,可以通过重新定义格式对字段进行表面调整labelnumber
(例如添加后缀a
或b
并重置二次条目计数)labelnumber
。以下是示例。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[colorlinks=true,citecolor=red]{hyperref}
\usepackage[defernumbers=true]{biblatex}
\newcounter{bbx:primcount}
\setcounter{bbx:primcount}{0}
% Count number of primary entries; expand labelnumberwidth
% to accommodate suffixes (NB: this might need tweaking when there
% are relatively many more secondary entries)
\makeatletter
\AtDataInput{%
\ifkeyword{secondary}
{}
{\addtocounter{bbx:primcount}{1}%
\blx@setlabwidth{\labelnumberwidth}{%
\csuse{abx@ffd@*@labelnumberwidth}{\thefield{labelnumber}a}}}}
\makeatother
% Print labelnumbers with suffixes, adjust secondary labelnumber
\DeclareFieldFormat{labelnumber}{%
\ifkeyword{secondary}
{{\number\numexpr#1-\value{bbx:primcount}}b}
{#1a}}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text \cites[10--15]{aristotle:anima}{aristotle:physics}.
Filler text \cite[23--25]{nussbaum}. Filler text \cite{hyman}.
\printbibheading
\printbibliography[keyword=primary,heading=subbibliography,title={Primary Sources (a)}]
\printbibliography[keyword=secondary,heading=subbibliography,title={Secondary Sources (b)}]
\end{document}
此解决方案假定所有条目都分配有关键字primary
或之一,但如果将过滤器替换为 ,secondary
则可以将没有后一个关键字的条目视为主要条目。keyword=primary
notkeyword=secondary
相同的问题,但是使用前缀,labelnumber
使用该选项相对容易prefixnumbers
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[colorlinks=true,citecolor=red]{hyperref}
\usepackage[defernumbers=true]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text \cites[10--15]{aristotle:anima}{aristotle:physics}.
Filler text \cite[23--25]{nussbaum}. Filler text \cite{hyman}.
\printbibheading
\printbibliography[keyword=primary,heading=subbibliography,title={Primary Sources},prefixnumbers={A}]
\printbibliography[keyword=secondary,heading=subbibliography,title={Secondary Sources},prefixnumbers={B}]
\end{document}
答案2
嗯..来自回复:Biblatex 包和多个参考书目, 我明白了 ”Biblatex 为多种书目提供原生支持。“,在这种情况下multibib
是不需要的,并且您仍然可以拥有一个内联文件。
因此,只需使用biblatex
(使用示例2905#2922),我设法或多或少地得到了我想要的东西(所有内容都在一个文件中,没有 bibtex 调用,分割参考书目):
...代码如下:
\documentclass{letter}
\usepackage{biblatex} % tlmgr install biblatex etoolbox logreq
\usepackage{filecontents} % tlmgr install filecontents
\usepackage{hyperref}
\hypersetup{colorlinks=true, linkcolor=blue, citecolor=blue, filecolor=blue, urlcolor=blue}
% unicode characters
% note \usepackage[utf8x]{inputenx} breaks biblatex
% with "Package biblatex Error: Incompatible package 'ucs'"
\usepackage[utf8]{inputenx} %
% letter doesn't have \section,\subsection, so:
\def\section*#1{#1}
\def\subsection*#1{#1}
\begin{filecontents}{\jobname.bib}
@article{Bli74,
keywords = {primary},
author = {Blinder, Alan S.},
year = {1974},
title = {The economics of brushing teeth},
journaltitle = {Journal of Political Economy},
volume = {82},
number = {4},
pages = {887--891},
}
@article{audactor2005pflanzen,
keywords = {secondary},
title = {Wie Pflanzen hören... die Geheimnisse der Sonobotanik},
author = {Prof. Dr. Hortensia Audactor},
journal = {Draft: \url{http://www.inventionen.de/vortrag_audactor.html}},
year = {2005}
}
\end{filecontents}
\bibliography{\jobname}
% \usepackage{multibib} % incompatible
\begin{document}
\begin{letter}{Addressee}
Blah, blah - content...
Primary cite: \cite[\nopp a]{Bli74},
Secondary cite: \cite[\nopp b]{audactor2005pflanzen}
\ \\
\hrule
\printbibheading
\hrule
\printbibliography[keyword=primary,heading=subbibliography,%
title={Primary Sources (a)}]
\printbibliography[keyword=secondary,heading=subbibliography,%
title={Secondary Sources (b)}]
\end{letter}
\end{document}
编辑:注意使用关键词来分割参考书目;Biblatex 软件包 pdf也注意到一些其他方法。