对于使用 BibLaTeX 包的科学论文,我被要求将引用编号格式化如下:
- 引用参考文献时,在文末右上角用上标数字和半角右括号“)”表示:“此方法1)在过去被研究过”;
- 在书目中打印参考文献时,使用数字和半角括号:“(1)作者等”。
给定一种任意风格,我该如何实现这一点?
以下是 MWE:
\documentclass{article}
\usepackage[style=numeric, sorting=none]{biblatex}
\addbibresource{\jobname.bib}
\begin{filecontents}{\jobname.bib}
@book{key,
author = {Author, A.},
year = {2001},
title = {Title},
publisher = {Publisher},
}
\end{filecontents}
\begin{document}
This method was investigated\cite{key} in the past.
\printbibliography
\end{document}
答案1
引用参考
答案取决于我们使用什么引用命令。
BibLaTeX 提供了上标引用的命令\supercite
,我们可以重新定义(从这个答案):
\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
{\iffieldundef{prenote}
{}
{\BibliographyWarning{Ignoring prenote argument}}%
\iffieldundef{postnote}
{}
{\BibliographyWarning{Ignoring postnote argument}}}
{\usebibmacro{citeindex}%
\usebibmacro{cite})}
{\supercitedelim}
{}
可以替换其他引用命令(例如\parencite
)。
\textcite
更加复杂,我们必须重新定义这个宏(从这个答案):
\makeatletter
\renewbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\usebibmacro{cite}}
{%
\ifbool{cbx:parens}
{\bibclosebracket\global\boolfalse{cbx:parens}}
{}%
\iffirstcitekey
{}
{\textcitedelim}%
\ifnameundef{labelname}
{\printfield[citetitle]{labeltitle}}
{\printnames{labelname}}%
\addspace
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\mkbibsuperscript{\usebibmacro{cite})}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}}}
\makeatother
可以通过在连续的引用之间添加空格来改进此解决方案:
\renewcommand{\supercitedelim}{, }
但是,此解决方案使用了由参考书目样式本身定义的 BibLaTeX 宏(例如\usebibmacro{cite}
),该宏numeric
在此处。如果不进行调整,它可能无法与其他样式一起使用。
印刷参考
灵感来自这个答案。我们简单改变一下字段格式:
\DeclareFieldFormat{labelnumberwidth}{(#1)}
将 MWE 的结果替换\cite
为\supercite
: