Biblatex:区分参考文献类别的引用风格(我的出版物与他人的出版物)

Biblatex:区分参考文献类别的引用风格(我的出版物与他人的出版物)

我正在这个模板使用 Biblatex/biber 管理我的参考文献和引用。为了更好地表明我合著的参考文献,我希望它们使用与引用他人作品略有不同的引用样式。例如,生成的文本应如下所示:

在我之前的工作 [My1] 和 [My14] 中,我研究了因素 A 和 B 的影响。因素 C 最近由 Others 等人 [1] 和 Someone and Else [3] 进行了评估。

所以基本上,我的引用应该有一个自定义前缀,这里是“我的”,并且与其他引用(有另一个前缀,这里没有“”)分开编号。

所有参考文献都应打印在文档末尾的参考书目中。为了便于概览,可以分别列出两个不同的类别,即首先列出我的出版物及其关键词[My1]-[My23],然后列出其他人的出版物及其关键词[1]-[211]

能不能以某种方式轻松实现?我想我得以某种方式使用参考书目类别;但我不知道具体怎么做。

答案1

我想这里最方便用户的解决方案是biblatex可以自动判断哪些作品是你的,哪些不是。这可以使用以下代码来实现按作者过滤书目?。(如果您不介意手动将条目添加到类别中,事情当然会更简单一些。)

然后,只需为您的作品重新编号,并要求refcontext重置其他作品的编号即可。因为我们有拆分的数字书目,所以您可以继续。labelprefixbiblatexdefernumbers

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=numeric, defernumbers]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\makeatletter
\def\fnblx@bibfile@name{\jobname -fnblx.bib}
\newwrite\fnblx@bibfile
\immediate\openout\fnblx@bibfile=\fnblx@bibfile@name

\immediate\write\fnblx@bibfile{%
  @comment{Auto-generated file}\blx@nl}

\newcounter{fnblx@name}
\setcounter{fnblx@name}{0}

\newcommand*{\fnblx@writenametobib}[1]{%
  \stepcounter{fnblx@name}%
  \edef\fnblx@tmp@nocite{%
    \noexpand\AfterPreamble{%
      \noexpand\setbox0\noexpand\vbox{%
        \noexpand\fnblx@getmethehash{fnblx@name@\the\value{fnblx@name}}}}%
  }%
  \fnblx@tmp@nocite
  \immediate\write\fnblx@bibfile{%
    @misc{fnblx@name@\the\value{fnblx@name}, author = {\unexpanded{#1}}, %
          options = {dataonly=true},}%
  }%
}

\AtEndDocument{%
  \closeout\fnblx@bibfile}

\addbibresource{\fnblx@bibfile@name}

\newcommand*{\fnblx@namehashes}{}
\DeclareNameFormat{fnblx@hashextract}{%
  \xifinlist{\thefield{hash}}{\fnblx@namehashes}
    {}
    {\listxadd{\fnblx@namehashes}{\thefield{hash}}}}

\DeclareCiteCommand{\fnblx@getmethehash}
  {}
  {\printnames[fnblx@hashextract][1-999]{author}}
  {}
  {}

\newtoggle{fnblx@tempa}
\DeclareIndexNameFormat{fnblx@checkfilternames}{%
  \xifinlist{\thefield{hash}}{\fnblx@namehashes}
    {\global\toggletrue{fnblx@tempa}}
    {}}

\newcommand*{\addbfilternames}{\forcsvlist\fnblx@writenametobib}
\newcommand*{\resetfilternames}{\def\fnblx@namehashes{}}

\defbibcheck{filternames}{%
  \global\togglefalse{fnblx@tempa}
  \indexnames[fnblx@checkfilternames][1-999]{labelname}%
  \iftoggle{fnblx@tempa}
    {}
    {\skipentry}}
    
\defbibcheck{notfilternames}{%
  \global\togglefalse{fnblx@tempa}
  \indexnames[fnblx@checkfilternames][1-999]{labelname}%
  \iftoggle{fnblx@tempa}
    {\skipentry}
    {}}
\makeatother

\addbfilternames{Emma Sigfridsson}

\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{worman}
dolor \autocite{geer}
sit \autocite{knuth:ct:a,knuth:ct:b}

\begin{refcontext}[labelprefix=My]
\printbibliography[check=filternames, title={Works by Emma Sigfridsson}]
\end{refcontext}
\printbibliography[resetnumbers, check=notfilternames, title={Works not by Emma Sigfridsson}]
\end{document}

Lorem [My1] ipsum [4] 忧伤 [1] 坐 [2, 3]


为了进行比较,下面是带有类别的同一篇文档,您必须手动指定哪些条目属于您

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=numeric, defernumbers]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\DeclareBibliographyCategory{mywork}
\addtocategory{mywork}{sigfridsson}

\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{worman}
dolor \autocite{geer}
sit \autocite{knuth:ct:a,knuth:ct:b}

\begin{refcontext}[labelprefix=My]
\printbibliography[category=mywork, title={Works by Emma Sigfridsson}]
\end{refcontext}
\printbibliography[resetnumbers, notcategory=mywork, title={Works not by Emma Sigfridsson}]
\end{document}

相关内容