biblatex
我有一个使用后端创建的包含参考书目的文档biber
。即,在这个文档的某处,有一行
\printbibliography
打印参考书目(说什么)。
现在我需要创建一份额外的附信,其中重复了参考书目。这是一份不同的文档(如果重要的话,放在不同的目录中),我想知道是否有办法在biblatex
编写附信时再次在附信末尾打印参考书目。(当然,这需要始终先编写原始文档,但我可以做到。)
有任何想法吗?
(我可以直接复制带有参考书目的页面,pdfpages
但这样很不好看,因为页码会有错误,而且如果原始文件中的页码发生变化,我总是必须调整页面范围。)
答案1
没有界面可以导入另一份文档的精确参考书目。但在某些情况下可以使用变通方法。
所有引文和参考书目信息都保存在.bbl
文件中。该文件由 Biber 根据文件biblatex
中的请求编写.bcf
。因此,您可以尝试导入.bbl
另一份文档的文件以获取其参考书目。只要两份文档中的设置都很简单,这种方法就可行:您不能有多个参考文献,导入文档不能引用原始文档中未引用的来源等。
假设您有一份包含引文和参考书目的文档maindoc.tex
,该文档已经过 LaTeX、Biber、LaTeX、LaTeX 的完整编译序列,然后您可以从maindoc
(它位于maindoc.bbl
,因此文件必须存在)导入另一个文档(coverletter.tex
)中的参考书目,方法是
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\makeatletter
\newcommand*{\importbibfrom}[1]{%
\def\blx@bblfile{%
\blx@secinit
\begingroup
\blx@bblstart
\InputIfFileExists{#1.bbl}
{\blx@info@noline{... file '#1.bbl' found}%
\global\toggletrue{blx@bbldone}%
\blx@generate@bbl@mdfivesum@found{#1.bbl}}
{\blx@info@noline{... file '#1.bbl' not found}%
\typeout{No file #1.bbl.}%
\blx@generate@bbl@mdfivesum@notfound}%
\blx@bblend
\endgroup
% global sorting as this is called at BeginDocument
\csnumgdef{blx@labelnumber@\the\c@refsection}{0}}}
\let\blx@rerun@biber\relax
\makeatother
\importbibfrom{maindoc}
\begin{document}
\cite{sigfridsson}
\printbibliography
\end{document}
您只需要用 LaTeX 编译导入文档coverletter
(至少两次),不要在该文件上运行 Biber。
您可以引用参考书目中的所有条目并获得与完全相同的参考书目maindoc.tex
。
假设maindoc.tex
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,vizedom:related}
\printbibliography
\end{document}
coverletter.tex
上面的收益
编辑:看如何将 refsection 和 xcite 一起使用?以获得有关如何使用不同refsection
s 的指导以及帮助defernumbers
。