我编写了一份文档 (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
确实可以解决问题。
非常感谢。