如何使 biblabel 依赖于 cite 命令?

如何使 biblabel 依赖于 cite 命令?

问题很简单。我正在使用 biblatex 和 biber。我想要三件东西:

  1. 如果我使用一个新命令\citer,在括号之间产生所引用文本的编号(例如,参见参考文献<1>.),那么在参考书目中,该文本的编号就用括号括起来(例如<1>. E. Schröder,Ueber die iterirte Funktionen,...)
  2. 如果我使用一个命令\cite*,该命令生成不带括号的引用文本编号(例如,参见参考文献 1.),那么在参考书目中,该文本的编号不带任何括号(例如 1. E. Schröder,Ueber die iterirte Funktionen,...)
  3. 如果我使用一个命令\citet,生成用方括号括起来的引用文本的编号(例如,参见参考文献 [1].),那么在参考书目中,该文本的编号也会用方括号括起来(例如 [1]. E. Schröder,Ueber die iterirte Funktionen,etc)。

是否可以?

答案1

我仍然不知道如果使用多个命令引用一个作品会发生什么,但你可以采取以下解决方案

\documentclass{scrartcl}
\usepackage[english]{babel}
\usepackage{csquotes}
\usepackage[style=numeric,backend=biber]{biblatex}

\DeclareBibliographyCategory{bra}
\DeclareBibliographyCategory{brackets}
\DeclareBibliographyCategory{none}

\makeatletter
\newrobustcmd{\mkbibbra}[1]{%
  \begingroup
  \blx@blxinit
  \blx@setsfcodes
  \ensuremath{\langle}#1\ensuremath{\rangle}%
  \endgroup}
\newrobustcmd{\mkbibbraspace}[1]{%
  \begingroup
  \blx@blxinit
  \blx@setsfcodes
  \ensuremath{\langle}#1\makebox[0pt][l]{\ensuremath{\rangle}}%
  \endgroup}
\newrobustcmd{\mkbibbracketsspace}[1]{%
  \begingroup
  \blx@blxinit
  \blx@setsfcodes
  \blx@bibopenbracket#1\makebox[0pt][l]{\blx@bibclosebracket}%
  \endgroup}
\makeatother

\DeclareCiteCommand{\citer}[\mkbibbra]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}%
   \addtocategory{bra}{\thefield{entrykey}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\cite}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}%
   \addtocategory{none}{\thefield{entrykey}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citet}[\mkbibbrackets]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}%
   \addtocategory{brackets}{\thefield{entrykey}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareFieldFormat{labelnumberwidth}{%
  \ifcategory{bra}
    {\mkbibbraspace{#1}}
    {\ifcategory{brackets}
       {\mkbibbracketsspace{#1}}
       {\ifcategory{none}
          {#1}
          {#1}}}}

\addbibresource{biblatex-examples.bib}
\begin{document}
\citer{sigfridsson} \cite*{worman} \citet{geer}
\printbibliography
\end{document}

相关内容