这个问题导致了一个新的方案的出现:
xcite
我想引用其他文件中的引文。与xr package
标签的操作类似,但我想将其应用于参考书目。
如果我可以\cite{someone}
在主文件中执行此操作,并且它会创建数字 [4],那么我想在第二个文件中执行相同操作,并创建相同的数字 [4]。与标签的操作\cite{someone}
类似。xr
顺便说一句,我尝试main.bbl
从主文件添加文件。但是,这会将所有引用添加到第二个文件的末尾。我想避免这种情况。
有没有什么包可以实现这个功能?
答案1
将以下内容保存在您的工作目录中xc.sty
:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xc}
[2011/09/02 v0.1 eXternal Citations (DPC+EG)]
\def\externalcitedocument{\@ifnextchar[\XC@{\XC@[]}}
\def\XC@[#1]#2{{%
\makeatletter
\def\XC@prefix{#1}%
\XC@next#2.aux\relax\\}}
\def\XC@next#1\relax#2\\{%
\edef\XC@list{#2}%
\XC@loop{#1}}
\def\XC@aux{%
\ifx\XC@list\@empty\else\expandafter\XC@explist\fi}
\def\XC@explist{\expandafter\XC@next\XC@list\\}
\def\XC@loop#1{\openin\@inputcheck#1\relax
\ifeof\@inputcheck
\PackageWarning{xc}{^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
\expandafter\XC@aux
\else
\PackageInfo{xc}{IMPORTING LABELS FROM #1}%
\expandafter\XC@read\fi}
\def\XC@read{%
\read\@inputcheck to\XC@line
\expandafter\XC@test\XC@line...\XC@}
\long\def\XC@test#1#2#3#4\XC@{%
\ifx#1\bibcite
\bibcite{\XC@prefix#2}{#3}%
\else\ifx#1\@input
\edef\XC@list{\XC@list#2\relax}%
\fi\fi
\ifeof\@inputcheck\expandafter\XC@aux
\else\expandafter\XC@read\fi}
\endinput
%%
%% End of file `xc.sty'.
derived.tex
然后在你的文档中说,
\externalcitedocument{main}
(main.tex
你引用的文献在哪里?)现在
\cite{xyz}
将会derived.tex
做你想做的事。
界面与負責's:你也可以指定前缀
\externalcitedocument[A-]{main}
并\cite{A-xyz}
在 中使用derived.tex
。
该文件是通过一些非常简单的转换xc.sty
获得的:xr.sty
xr
->xc
XR
->XC
\externaldocument
->\externalcitedocument
\newlabel
->\bibcite
答案2
BibLaTeX/Biber
该软件包xcite
现在是xr
如果您使用 ,它就会按照您想要的方式工作bibtex
。如果您使用BibLaTeX
/ Biber
,则参考书目不会使用\bibitem
s 进行编译。
相反,您可以先编译主文档和派生文档,然后简单地复制main.bbl
并重命名它derived.bbl
。重新编译派生文档,跳过Biber
这次,您将获得与主文档中编号相同的参考文献。
这种手动方法的缺点是您总是需要记住复制主要参考书目文件,而它xr
会自动为您处理所有事情。