假设我有一个文件 A.tex,它是主文档,并且有一个参考列表,比如说
[1] Reference 1
[2] Reference 2
[3] Reference 3
[4] Reference 4
还有 B.tex,它就像一封信,我希望能够在 B 中引用 A 中的一些参考文献,并保持与 A 中的顺序一致。例如,我想在 B 中引用 [2] 和 [4],并且还有参考文献列表
[2] Reference 2
[4] Reference 4
在 B 的末尾。这可能吗?如何实现?
答案1
这是一个使用的解决方案docmute
包裹。
这个想法是将其他文档导入保存框中,但实际上不对其进行排版。为了能够仅打印我们实际主文档中引用的那些条目,我们必须使用 refsegment。为了确保所有defernumbers
功能都能按预期工作,我们还始终打印其他文档中的参考书目,以确保编号正确。
\makeatletter
\defbibenvironment{plainimport}{}{}{}
\newsavebox{\importbox}
\newcommand{\importcites}[1]{%
\sbox\importbox{\vbox{%
\citetrackerfalse
\begin{refsegment}
\input{#1}
\let\blx@anchor\@empty
\printbibliography[env=plainimport,segment=\therefsegment]
\end{refsegment}}}}
\makeatother
然后我们有一个命令,它获取我们要从中导入引文的文档\importcites
的文件名。在主文件之后直接使用它。.tex
\begin{document}
在示例中,设置\jobname.tex
对应于您的文件 B,并且\jobname-ext.tex
是文件 A。技术机制需要驻留在文件 B 中,文件 A 仅在 中提及\importcites
。您必须使用(或)\printbibliography
调用文件 B才能正常工作。如果省略参数,您还将看到文件 A 的引用。segment=\therefsegment
segment=0
segment
平均能量损失
\documentclass[british]{scrartcl}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric,backend=biber,sorting=none,backref=true,defernumbers=true]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{docmute}
\usepackage{filecontents}
\begin{filecontents*}{\jobname-ext.tex}
\documentclass[british]{scrartcl}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric,backend=biber,sorting=none]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson} and \cite{geer} and \cite{worman} and \cite{cicero}
\end{document}
\end{filecontents*}
\makeatletter
\defbibenvironment{plainimport}{}{}{}
\newsavebox{\importbox}
\newcommand{\importcites}[1]{%
\sbox\importbox{\vbox{%
\citetrackerfalse
\begin{refsegment}
\input{#1}
\let\blx@anchor\@empty
\printbibliography[env=plainimport,segment=\therefsegment]
\end{refsegment}}}}
\makeatother
\begin{document}
\importcites{\jobname-ext}
\cite{geer} and \cite{cicero}
\printbibliography[segment=\therefsegment]
\end{document}