我正在尝试让书目驱动程序正常工作。我使用了上一篇文章中的代码,并做了一些小改动:需要帮助配置 biblatex-dw 的条目类型驱动程序。不同的条目类型有不同的引用样式 sa
我的版本在下面的 MWE 中。
我想要完成的任务是抑制其中一个 bib 条目(例如,我box
在 MWE 中调用的那个条目),而上一个问题没有涉及这个任务。抑制工作正常,但结果是我在参考书目中得到了两个或更多相似的行。有没有办法获取唯一条目的列表,同时仍然抑制该box
字段?
梅威瑟:
\documentclass{article}
\usepackage[
style=authortitle-dw,
firstfull=true,
datamodel=archives,
]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@archive{test1,
subcategory = {Foo},
category = {StateArchive},
box = {130},
}
@archive{test2,
subcategory = {Foo},
category = {StateArchive},
box = {131},
}
\end{filecontents*}
\begin{filecontents*}{archives.dbx}
\ProvidesFile{archives.dbx}[2014/04/02 supplement archive]
\RequireBiber[3]
\DeclareDatamodelEntrytypes{archive}
\DeclareDatamodelEntryfields[archive]{category,subcategory,archive,box}
\DeclareDatamodelConstraints[archive]{
\constraint[type=mandatory]{
\constraintfield{archive}
\constraintfield{category}
\constraintfield{box}
}
}
\DeclareDatamodelFields[type=field,datatype=literal]{category}
\DeclareDatamodelEntryfields[archive]{category}
\DeclareDatamodelFields[type=field,datatype=literal]{subcategory}
\DeclareDatamodelEntryfields[archive]{subcategory}
\DeclareDatamodelFields[type=field,datatype=literal]{archive}
\DeclareDatamodelEntryfields[archive]{archive}
\DeclareDatamodelFields[type=field,datatype=literal]{box}
\DeclareDatamodelEntryfields[archive]{box}
\endinput
\end{filecontents*}
\DeclareBibliographyDriver{archive}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{archive}%
\setunit{\addspace}%
\printfield{category}%
\setunit{\addspace}%
\printfield{subcategory}%
\setunit{\addspace}%
\printfield{box}%
\newunit\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
\renewbibmacro*{cite:normal}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\ifentrytype{archive}
{\usedriver
{\DeclareNameAlias{sortname}{default}}
{\thefield{entrytype}}}
{\ifthenelse{\ifciteidem\AND\NOT\boolean{cbx:noidem}%
\AND\NOT\iffirstonpage}
{\usebibmacro{cite:idem}%
\usebibmacro{cite:title}%
\usebibmacro{cite:save}}
{\ifnameundef{labelname}
{}
{\usebibmacro{cite:name}}%
\usebibmacro{cite:title}}%
\ifbool{cbx:omiteditor}
{}
{\ifnameundef{labelname}
{\newunit
\usebibmacro{cite:byeditor}}
{}}%
\usebibmacro{cite:save}}}}%
{\ifbool{cbx:shorthandibid}%
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}%
{\usebibmacro{cite:ibid}}
{\usebibmacro{cite:shorthand}}}%
{\usebibmacro{cite:shorthand}}}}
\DeclareBibliographyCategory{archive1}
\DeclareBibliographyCategory{archnew}
\AtDataInput[archive]{
\iffieldequalstr{archive}{Archive 1}
{\addtocategory{archive1}{\thefield{entrykey}}}
{}
\iffieldequalstr{archive}{ArchNew}
{\addtocategory{archnew}{\thefield{entrykey}}}
{}
}
\DeclareSortingScheme{archive}{
\sort{
\field{archive}
}
\sort{
\field{category}
}
\sort{
\field{subcategory}
}
\sort{
\field{box}
}
}
\addbibresource{\jobname.bib}
\begin{document}
more\footcite{test1}
more\footcite{test2}
\clearpage
\DeclareFieldFormat[archive]{box}{}
\printbibliography
\end{document}
当前输出(仅限参考书目,因为这是我遇到的问题):
所以,我只想要一行,而不是两条相似的行。
编辑:明确地说,我需要在脚注中显示框字段。
答案1
这只是一个答案,因为我还没有足够的声誉来发表评论。
我怀疑是否有一种简单的方法可以自动实现您想要实现的目标,因为您引用的那些不同条目在 biblatex 中只是被视为:碰巧具有相同内容的不同条目。
您可以做的是手动隐藏所有引用同一档案中的来源的条目,但使用该skipbib
选项,例如:
@archive{test1,
subcategory = {Foo},
category = {StateArchive},
box = {130}
}
@archive{test2,
subcategory = {Foo},
category = {StateArchive},
box = {131},
options = {skipbib=true}
}
@archive{test3,
subcategory = {Foo},
category = {StateArchive},
box = {132},
options = {skipbib=true}
}
如果您引用的档案源数量有限,这种方法效果会很好,但如果没有,可能会非常痛苦。