定制 biblatex 缩写列表:为不同的作者提供单独的列表

定制 biblatex 缩写列表:为不同的作者提供单独的列表

是否可以使用 biblatex 的 \printshorthands 来实现以下两种效果?

  1. 我想要三个单独的缩写列表,分别针对作品被引用次数最多的三位作者。
  2. 我希望每个缩写仅给出作品的标题和日期。

@moewe 的回答非常接近我的需求。以下是基于该答案的 MWE:

\documentclass{book}

\usepackage{fontspec}

\usepackage{microtype}

\usepackage{polyglossia}
\setmainlanguage{english}

\date{}

\usepackage[style=philosophy-classic,natbib=true,backend=biber]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@Book{Frege1967,
  Title                    = {{K}leine {S}chriften},
  Address                  = {Hildesheim},
  Author                   = {Frege, Gottlob},
  Publisher                = {Georg Olms},
  Year                     = {1967},
  Shorthand                = {\emph{KS}}
}
@Article{Russell1905b,
  Title                    = {{O}n {D}enoting},
  Author                   = {Russell, Bertrand},
  Year                     = {1905},
  Number                   = {56},
  Pages                    = {479-493},
  Volume                   = {14},
  Journal                  = {Mind},
  Shorthand                = {\emph{OD}}
}
@Book{Bradley1893,
  Title                    = {{A}ppearance and {R}eality: a {M}etaphysical {E}ssay},
  Address                  = {London},
  Author                   = {Bradley, Francis Herbert},
  Publisher                = {Swan Sonnenshein},
  Year                     = {1893},
  Shorthand                = {\emph{AR}}
}
@Article{Korselt1903,
  Title                    = {{Ü}ber die {G}rundlagen der {G}eometrie},
  Author                   = {Korselt, Alwin},
  Journaltitle             = {Jahresbericht der Deutschen Mathematiker Vereinigung},
  Year                     = {1903},
  Pages                    = {402–7},
  Shorthand                = {\emph{UGG}}
}\end{filecontents}

\addbibresource{\jobname.bib}

\newcommand*{\generateauthorcategory}[3]{%
  \DeclareBibliographyCategory{by#1}%
  \DeclareIndexNameFormat{cat#1}{%
    \ifboolexpr{test {\ifdefstring{\namepartfamily}{#2}}
                and test {\ifdefstring{\namepartgiven}{#3}}}
      {\addtocategory{by#1}{\thefield{entrykey}}}
      {}}%
  \AtDataInput{\indexnames[cat#1][1-999]{author}}}

\generateauthorcategory{frege}{Frege}{Gottlob}
\generateauthorcategory{russell}{Russell}{Bertrand}

\DeclareBibliographyDriver{shorthand}{%
  \usebibmacro{title}%
  \newunit\newblock
  \printdate}

\begin{document}

\frontmatter

\title{A Book}

\maketitle

\tableofcontents{}

\chapter*{Abbreviations}

Full details of these works are in the Bibliography.

\printshorthands[title={Works of Gottlob Frege}, category=byfrege]

\printshorthands[title={Works of Bertrand Russell}, category=byrussell]

\section*{Other Primary Sources}

\mainmatter{}

\part{Part}

\chapter{Chap}

\citet{Frege1967}

\citet{Russell1905b}

\citet{Bradley1893}

\citet{Korselt1903}

\backmatter

\printbibliography[heading=bibintoc]

\end{document}

我遵循的风格要求缩写列表位于目录之前。我尝试通过新的 \chapter*{Abbreviations} 来改编 moewe 的答案。结果存在一些问题:

  1. 弗雷格著作和罗素著作的缩写均在新的一页上开始,在介绍性说明之后,说明完整的详细信息在主要书目中。
  2. 我还需要一份其他作者的单独列表,这里是 Bradley 和 Korselt 的条目。

答案1

可以过滤某些名称,例如使用我的解决方案向 \declaresourcemap 添加参数基于 Audrey 的解决方案biblatex:动态过滤参考文献中特定作者的出版物

\newcommand*{\generateauthorcategory}[3]{%
  \DeclareBibliographyCategory{by#1}%
  \DeclareIndexNameFormat{cat#1}{%
    \ifboolexpr{test {\ifdefstring{\namepartfamily}{#2}}
                and test {\ifdefstring{\namepartgiven}{#3}}}
      {\addtocategory{by#1}{\thefield{entrykey}}}
      {}}%
  \AtDataInput{\indexnames[cat#1][1-999]{author}}}

\generateauthorcategory{elk}{Elk}{Anne}
\generateauthorcategory{kant}{Kant}{Immanuel}

但也可以keywords手动或自动完成。请参阅biblatex:在参考书目中分离特定作者的出版物我们还可以使用哈希来过滤条目,如果作者的名字非常相似,这种方法会更准确,但一般的程序会比较麻烦使用 biblatex 突出显示参考书目中的作者,并允许使用参考书目样式对其进行格式化

当然,您仍然必须指定三位被引用次数最多的作者的姓名,因为它们不会自动确定。

\DeclareBibliographyDriver{shorthand}{%
  \usebibmacro{title}%
  \newunit\newblock
  \printdate}

您只会获得速记列表的标题和日期。

\documentclass{book}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{elk:bronto,
  author    = {Anne Elk},
  title     = {Theory of Brontosauruses},
  shorthand = {Bronto},
  date      = {1972},
  publisher = {Monthy and Co.},
  location  = {London},
}
@book{elk:diplo,
  author    = {Anne Elk},
  title     = {Theory of Diplodocuses},
  shorthand = {Diplo},
  date      = {1974},
  publisher = {Monthy and Co.},
  location  = {London},
}
@book{frege,
  author    = {Frege, Gottlob},
  title     = {Kleine Schriften},
  date      = {1967},
  shorthand = {\emph{KS}},
  location  = {Hildesheim},
  publisher = {Georg Olms},
}
\end{filecontents}

\addbibresource{biblatex-examples.bib}
\addbibresource{\jobname.bib}

\newcommand*{\generateauthorcategory}[3]{%
  \DeclareBibliographyCategory{by#1}%
  \DeclareIndexNameFormat{cat#1}{%
    \ifboolexpr{test {\ifdefstring{\namepartfamily}{#2}}
                and test {\ifdefstring{\namepartgiven}{#3}}}
      {\addtocategory{by#1}{\thefield{entrykey}}}
      {}}%
  \AtDataInput{\indexnames[cat#1][1-999]{author}}}

\generateauthorcategory{elk}{Elk}{Anne}
\generateauthorcategory{kant}{Kant}{Immanuel}

\DeclareBibliographyDriver{shorthand}{%
  \usebibmacro{title}%
  \newunit\newblock
  \printdate}

\begin{document}
\cite{kant:ku,kant:kpv,elk:diplo,elk:bronto,frege}

\chapter*{Shorthands}
Introductory notes on shorthands. Full details can be found in the bibliography.
\printshorthands[title={Shorthands by Kant}, heading=subbibliography, category=bykant]
\printshorthands[title={Shorthands by Elk}, heading=subbibliography, category=byelk]
\printshorthands[title={Shorthands by other authors}, heading=subbibliography, notcategory=byelk, notcategory=bykant]
\printbibliography
\end{document}

MWE 的速记章节

相关内容