BibLaTeX:当达到 mincrossref-threshold 时,仅继承具有 crossref 的特定字段

BibLaTeX:当达到 mincrossref-threshold 时,仅继承具有 crossref 的特定字段

我正在使用 Biblatex 制作参考书目。一些 Inbook 条目有一个指向书籍条目的 crossref-field。

我想要实现的目标是:

如果仅引用其中一个子(书籍)条目 => 从父(书籍)条目继承所有可用字段。

如果引用了多个子(书中)条目 => 打印父(书籍)条目;仅将某些字段(例如书籍作者和标题)继承到子(书中)条目。

我曾尝试通过 修改继承设置\DeclareDataInheritance。我所做的是添加一个\ifentryseen测试,但这在继承设置中是不允许的。现在,我已将相同的测试添加到书目驱动程序中。但\nocite似乎不会影响\ifentryseen测试。

有人知道我下一步可以尝试什么吗?

我稍微缩短了 inbook 参考书目驱动程序,使事情变得更容易。如果两个项目都被引用,则两个 inbook 条目都应输出“...,在:短标题”;如果只引用一个:“...,在:完整标题”。到目前为止,\ifentryseen始终扩展为 false。

梅威瑟:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=authortitle-ibid,backend=biber]{biblatex}
\bibliography{bib}
\usepackage{filecontents}

\begin{filecontents}{bib.bib}
@book{AGS,
author = {Adorno, Theodor W.},
title = {Gesammelte Schriften},
editor = {Tiedemann, Rolf},
location = {Frankfurt},
year = {2003},
}

@inbook{DDA,
author = {Horkheimer, Max and Adorno, Theodor W.},
title = {Dialektik der Aufklärung},
crossref = {AGS},
volume = {3},
}

@inbook{ND,
author = {Adorno, Theodor W.},
title = {Negative Dialektik},
crossref = {AGS},
volume = {6},
}
\end{filecontents}


\DeclareBibliographyDriver{inbook}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\ifentryseen{\thefield{crossref}}%
{Shortreference}
{Complete Reference}
\usebibmacro{finentry}}


\begin{document}
\cite{DDA}
\cite{ND}
\printbibliography
\end{document}

答案1

正如 Github 上所讨论的,(https://github.com/plk/biblatex/issues/124) 在即将推出的 BibLaTeX 版本中将有一个新的测试:\ifentryinbib。用法与完全相同\ifentryseen,只是它检查特定条目是否在参考书目中。MWE 应修改如下:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=authortitle-ibid,backend=biber]{biblatex}
\bibliography{bib}
\usepackage{filecontents}

\begin{filecontents}{bib.bib}
@book{AGS,
author = {Adorno, Theodor W.},
title = {Gesammelte Schriften},
editor = {Tiedemann, Rolf},
location = {Frankfurt},
year = {2003},
}

@inbook{DDA,
author = {Horkheimer, Max and Adorno, Theodor W.},
title = {Dialektik der Aufklärung},
crossref = {AGS},
volume = {3},
}

@inbook{ND,
author = {Adorno, Theodor W.},
title = {Negative Dialektik},
crossref = {AGS},
volume = {6},
}
\end{filecontents}


\DeclareBibliographyDriver{inbook}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author/translator+others}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{in:}%
\ifentryinbib{\thefield{crossref}}%
{Shortreference}
{Complete Reference}
\usebibmacro{finentry}}


\begin{document}
\cite{DDA}
\cite{ND}
\printbibliography
\end{document}

现在,由于新的测试尚不存在,因此需要将其输入到序言中进行测试,或者\ifentryinbib在 BibLaTeX 2.7 发布之前使用:

\makeatletter
\let\ifentryinbib\blx@ifdata
\makeatother

使用 BibLaTeX 2.7 就没有必要了。

相关内容