问题很简单。我正在使用 biblatex 和 biber。我想要三件东西:
- 如果我使用一个新命令
\citer
,在括号之间产生所引用文本的编号(例如,参见参考文献<1>.),那么在参考书目中,该文本的编号就用括号括起来(例如<1>. E. Schröder,Ueber die iterirte Funktionen,...) - 如果我使用一个命令
\cite*
,该命令生成不带括号的引用文本编号(例如,参见参考文献 1.),那么在参考书目中,该文本的编号不带任何括号(例如 1. E. Schröder,Ueber die iterirte Funktionen,...) - 如果我使用一个命令
\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}