具有本地链接和全局标签的多个书目。还有全局书目

具有本地链接和全局标签的多个书目。还有全局书目

我怎样才能为每个部分创建一个参考书目,其中只显示该部分中引用的参考文献?最后,我还想要一个全局参考书目,其中包含任何部分中引用的所有参考文献。

至于标签,我希望它们是全局的。因此,如果标签是数字,则 [1] 可以出现在多个部分中,但它始终对应于全局书目中的 [1]。如果标签是 [Author00],则同一标签将出现在多个位置,始终指向同一书目。

最后,标签上附加的超链接存在问题。它应该指向本地书目还是全球书目?目前,我更喜欢本地书目,但如果可以配置就更好了。

如果这很重要,我想用一个 bibtex 文件来做到这一点。我到处都看到过零碎的答案,但关于单击超链接时会发生什么的答案却不多。

答案1

每个部分对应一个新的参考部分,您会获得指向本地参考书目的“本地”标签。

每个部分都对应一个新的参考段,您将获得指向第一次打印相应参考书目条目的“全局”标签。

这两种情况都不会给您带来想要的结果。下面的文档演示了如何修改一些内部结构以获得带有参考段的所需链接。新的布尔标志anchorsegments在为真时针对本地书目,否则针对全局书目。

\documentclass{article}
\usepackage[refsegment=section]{biblatex}
\usepackage{hyperref}
\addbibresource{biblatex-examples.bib}

\newbool{anchorsegments}
\booltrue{anchorsegments}

\makeatletter

\AtBeginDocument{%
  \ifbool{anchorsegments}
    {\long\def\blx@bibhyperref[#1]#2{%
       \blx@sfsave\hyper@natlinkstart{\the\c@refsection @\the\c@refsegment @#1}%
       \blx@sfrest
       #2%
       \blx@sfsave\hyper@natlinkend\blx@sfrest}%
     \protected\long\def\blx@imc@bibhyperlink#1#2{%
       \blx@sfsave\hyper@natlinkstart{\the\c@refsection:\the\c@refsegment:#1}%
       \blx@sfrest
       #2%
       \blx@sfsave\hyper@natlinkend\blx@sfrest}%
     \protected\long\def\blx@imc@bibhypertarget#1#2{%
       \blx@sfsave\hyper@natanchorstart{\the\c@refsection:\the\c@refsegment:#1}%
       \blx@sfrest
       #2%
       \blx@sfsave\hyper@natanchorend\blx@sfrest}%
     \protected\def\blx@anchor{%
       \xifinlist
         {\the\c@refsection @\the\c@refsegment @\abx@field@entrykey}
         {\blx@anchors}
         {}
         {\listxadd
            {\blx@anchors}
            {\the\c@refsection @\the\c@refsegment @\abx@field@entrykey}%
          \hyper@natanchorstart{%
            \the\c@refsection @\the\c@refsegment @\abx@field@entrykey}%
          \hyper@natanchorend}}%
     \defbibheading{subbibliography}{\subsection*{Local references}}}
    {\defbibheading{subbibliography}{%
       \AtNextBibliography{\let\blx@anchor\relax}%
       \subsection*{Local references}}}}

\makeatother

\defbibheading{bibliography}{\section*{Global references}}

\begin{document}

\section{Title}
Filler \parencite{companion,markey,knuth:ct}.
\printbibliography[segment=1,heading=subbibliography]

\newpage
\section{Title}
Filler \parencite{markey,bertram,companion}.
\printbibliography[segment=2,heading=subbibliography]

\newpage
\printbibliography

\newpage\null

\end{document}

在这里,本地锚点是通过插入\the\c@refsegment链接标识符来获得的,因此它们特定于参考部分和段。全局锚点是通过避免每个本地书目中的锚点定义来实现的\AtNextBibliography{\let\blx@anchor\relax}

相关内容