BibLaTeX:突出显示自引用

BibLaTeX:突出显示自引用

我正在寻找一种方法来使用 BibLaTeX(按字母顺序引用和参考书目样式)突出显示我自己以前出版物的引用,例如在文本和参考书目中使用双括号作为引用标记。它应该如下所示:

This is a paper published by myself [[MS15]] and that is a paper published
by someone else [AB14].

References:
[[MS15]]    Moser, S., ...., Title, Year.
[AB14]      Author X., ...., Title, Year.

我有一个使用 BibTex 的有效解决方案。因此,我将“alphadin.bst”复制到我的 LaTeX 项目文件夹,并为用于我自己的出版物的自定义 bibtex 类型添加了一些附加条目:

FUNCTION {output.mybibitem}
{ newline$
  "\bibitem[{[" write$
  label write$%
  "]}]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$%
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

[...]

FUNCTION {article}
{ output.bibitem
article.common
}

FUNCTION {myarticle}
{  output.mybibitem
article.common
}

这样我就可以将自定义条目添加到 Bibtex 文件(例如“myarticle”)。它们在引用标记和参考书目中都用双括号打印。

由于各种原因,我想切换到 BibLaTeX 和 Biber 作为后端。因此我的问题是:是否有类似的解决方案,甚至更好的方法来实现这一点?我不一定需要在参考书目文件中为“我的”出版物添加额外的类型。例如,也可以使用关键字和使用可用的标准类型。

我根本不喜欢拥有当前 BibTex 解决方案的本地修改版“alphadin.bst”。因此,如果我可以“修补”BibLaTeX 的行为,而不需要完全冗余的样式文件,那就太好了。

在此先非常感谢你们提供的任何有用的解决方案!

亲切的问候,

斯特芬

答案1

keyword从编程角度来看,使用s 非常容易。因此,您只需添加keyowrds={mywork}到条目中并使用标准条目类型即可。

@Article{Benji,
  author    = {Benji},
  keywords  = {mywork},
}

numeric您可以numeric-verb使用

\DeclareFieldFormat{labelnumberwidth}{\ifkeyword{mywork}{[\mkbibbrackets{#1}]}{\mkbibbrackets{#1}}}

\renewbibmacro*{cite}{%
  \printtext[bibhyperref]{%
    \ifkeyword{mywork}{[}{}%
    \printfield{prefixnumber}%
    \printfield{labelnumber}%
    \ifkeyword{mywork}{]}{}%
    \ifbool{bbx:subentry}
      {\printfield{entrysetcount}}
      {}}}

goLaTeX 上有一个非常类似的问题楼主使用的style=ieee这个方法很难正确使用。可以用xpatch

\makeatletter
\newtoggle{cbx@lastmywork}
\xpatchbibmacro{cite:comp:comp}
  {\savefield{labelnumber}{\cbx@lastnumber}}
  {\savefield{labelnumber}{\cbx@lastnumber}%
   \ifkeyword{mywork}{\toggletrue{cbx@lastmywork}}{\togglefalse{cbx@lastmywork}}}
  {}{}
\xpatchbibmacro{cite:dump}
  {\printtext{\cbx@lastnumber}}
  {\printtext[labelnumber]{\cbx@lastnumber}}
  {}{}
\DeclareFieldFormat{labelnumber}{%
  \ifboolexpr{test {\ifkeyword{mywork}} or togl {cbx@lastmywork}}
    {[#1]}
    {#1}}
\makeatother

因为numeric-comp我们可以放弃修补cite:dump

\makeatletter
\newtoggle{cbx@lastmywork}
\xpatchbibmacro{cite:comp:comp}
  {\savefield{labelnumber}{\cbx@lastnumber}}
  {\savefield{labelnumber}{\cbx@lastnumber}%
   \ifkeyword{mywork}{\toggletrue{cbx@lastmywork}}{\togglefalse{cbx@lastmywork}}}
  {}{}
\DeclareFieldFormat{labelnumber}{%
  \ifboolexpr{test {\ifkeyword{mywork}} or togl {cbx@lastmywork}}
    {[#1]}
    {#1}}
\makeatother

足够。

MWE 用于numeric

\documentclass{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Article{Einstein,
  author    = {Einstein},
}
@Article{Benji,
  author    = {Benji},
  keywords  = {mywork},
}
\end{filecontents}
\usepackage[style=numeric]{biblatex}
\addbibresource{\jobname.bib}

\DeclareFieldFormat{labelnumberwidth}{\ifkeyword{mywork}{[\mkbibbrackets{#1}]}{\mkbibbrackets{#1}}}

\renewbibmacro*{cite}{%
  \printtext[bibhyperref]{%
    \ifkeyword{mywork}{[}{}%
    \printfield{prefixnumber}%
    \printfield{labelnumber}%
    \ifkeyword{mywork}{]}{}%
    \ifbool{bbx:subentry}
      {\printfield{entrysetcount}}
      {}}}

\begin{document}
Fremdquelle \cite{Einstein}

Eigenquelle \cite{Benji} and \cite{Benji,Einstein} and \cite{Einstein,Benji}

\printbibliography
\end{document}

<code>style=numeric</code> 的示例输出

相关内容