自定义继承规则不适用于 biblatex

自定义继承规则不适用于 biblatex

我编写了一份文档 (XeLaTeX),其中引用了许多混合语言集合。biblatex我可以利用连字符字段在不同语言之间切换(尽管 -optionbabel不能完全与该polyglossia包配合使用,但那是另一回事)。

但是,根据出版指南,我需要两种信息:文章本身的语言以及合集的语言。因此,我为 添加了继承规则biblatex

\DeclareDataInheritance{collection}{incollection}{
   \inherit{hyphenation}{bookhyphenation}}%

这条规则被正确地转移到“biblatex 控制文件”(bcf)中:

<bcf:inherit>
  <bcf:type_pair source="collection" target="incollection"/>
  <bcf:field source="hyphenation" target="bookhyphenation"/>
</bcf:inherit>

然后我想用 查找不同的字段值\iffieldundef。为了展示问题,我尝试通过添加\newbibmacro和修改书目驱动程序来创建一个示例。

\newbibmacro*{printhyphenation}{%
   \iffieldundef{bookhyphenation}{No book hyphenation field}{Book hyphenation: \printfield{bookhyphenation}}%
   \addcomma\space
   \iffieldundef{hyphenation}{No hyphenation field}{Hyphenation: \printfield{hyphenation}}%
}

\DeclareBibliographyDriver{incollection}{%
   \usebibmacro{bibindex}%
   \usebibmacro{begentry}%
   \usebibmacro{author/translator+others}%
   \setunit{\labelnamepunct}\newblock%
   \usebibmacro{title}%
   \addcomma\space
   \usebibmacro{printhyphenation}
}

从生成的 PDF 中可以看出,书籍hyphenation字段始终为空,因此不可能出现复杂的 if 子句等。

有人知道如何解决我的问题吗?

\begin{filecontents}{\jobname.bib}
   @collection{A,
      title = {Title},
      editor = {Y, X},
      hyphenation = {english}
   }
   @incollection{B,
      crossref = {A},
      title = {Title},
      author = {B, A},
      hyphenation = {german}
   }
\end{filecontents}

\documentclass{scrbook}
\usepackage{polyglossia} %XeLaTeX document
\setdefaultlanguage{english}
\setotherlanguage[spelling=new,latesthyphen,babelshorthands]{german}

\usepackage[autostyle,babel]{csquotes}
\usepackage[style=authoryear-comp,babel=other,backend=biber]{biblatex}
% Add an inheritance rule
\DeclareDataInheritance{collection}{incollection}{
\inherit{hyphenation}{bookhyphenation}}%

\addbibresource{\jobname}

\newbibmacro*{printhyphenation}{%
   \iffieldundef{bookhyphenation}{No book hyphenation field}{Book hyphenation: \printfield{bookhyphenation}}%
   \addcomma\space
   \iffieldundef{hyphenation}{No hyphenation field}{Hyphenation: \printfield{hyphenation}}%
}

\DeclareBibliographyDriver{incollection}{%
   \usebibmacro{bibindex}%
   \usebibmacro{begentry}%
   \usebibmacro{author/translator+others}%
   \setunit{\labelnamepunct}\newblock%
   \usebibmacro{title}%
   \addcomma\space
   \usebibmacro{printhyphenation}
}    

\begin{document}
foo \cite{B} bar \cite{A}

\printbibliography
\end{document}

答案1

@Audrey @PLK 使用usera而不是bookhyphenation确实可以解决问题。

非常感谢。

相关内容