传统的引用格式可以通过以下命令设置
\documentclass[12pt,openright]{book}
\usepackage[backend = bibtex8, defernumbers = true, sorting=none, style = numeric]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{bib1.bib}
@ARTICLE{dunbar2006distributed,
author = {Dunbar, William B and Dunbar, William B and Murray, Richard M},
title = {Distributed receding horizon control for multi-vehicle formation
stabilization},
journal = {Automatica},
year = {2006},
volume = {42},
pages = {549--558},
number = {4},
publisher = {Elsevier},
}
\end{filecontents}
\addbibresource{bib1.bib}
\renewbibmacro*{name:last-first}[4]{%
\setcounter{liststop}{10}% % 列出所有的作者
\ifuseprefix
{\usebibmacro{name:delim}{#3#1}%
\usebibmacro{name:hook}{#3#1}%
\ifblank{#3}{}{%
\ifcapital
{\mkbibnameprefix{\MakeCapital{#3}}\isdot}
{\mkbibnameprefix{#3}\isdot}%
\ifpunctmark{'}{}{\bibnamedelimc}}%
\mkbibnamelast{#1}\isdot
\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%
\ifblank{#2}{}{\addcomma\bibnamedelimd\mkbibnamefirst{#2}\isdot}}
{\usebibmacro{name:delim}{#1}%
\usebibmacro{name:hook}{#1}%
\mkbibnamelast{#1}\isdot
\ifblank{#4}{}{\bibnamedelimd\mkbibnameaffix{#4}\isdot}%
% \ifblank{#2#3}{}{\addcomma}%
\ifblank{#2}{}{\bibnamedelimd\mkbibnamefirst{#2}\isdot}%
\ifblank{#3}{}{\bibnamedelimd\mkbibnameprefix{#3}\isdot}
}}
\DeclareNameFormat{default}{%
\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}%
\usebibmacro{name:andothers}%
}
\renewrobustcmd*{\bibinitperiod}{}
\renewrobustcmd*{\bibinithyphendelim}{}
\begin{document}
some text \cite{dunbar2006distributed}.
\printbibliography
\end{document}
我如何修改命令以将作者之间的 '.,' 更改为 ',' 并消除姓氏和名字之间的 '.'?谢谢!
答案1
如果你使用 Biber 后端,事情应该很简单
\renewrobustcmd*{\bibinitperiod}{}
\renewrobustcmd*{\bibinitdelim}{\addnbspace}
正如 jon 在评论中指出的那样,或者可以在删除作者姓名首字母后的句号,但保留空格。
如果您实在无法忍受使用 Biber 并且想要坚持使用 BibTeX(类似)后端,那么您就必须进行破解biblatex.bst
。
这种方法真的不推荐。我已警告你。
在系统上找到biblatex.bst
并复制一份,然后将其移动到工作目录(即文档所在的目录)。打开文件并转到FUNCTION {output:write:name:first}
(ll. 1136-1151),在
ctrl.terseinits
{ "{f{}}" format.name$ }
{ "{f.}" format.name$
duplicate$ tempstrga "." * =
{ duplicate$ text.length$ #1 - text.prefix$ }
'skip$
if$
}
if$
阻止更改{ "{f{}}" format.name$ }
,{ "{f{~}}" format.name$ }
以便读取
ctrl.terseinits
{ "{f{~}}" format.name$ }
{ "{f.}" format.name$
duplicate$ tempstrga "." * =
{ duplicate$ text.length$ #1 - text.prefix$ }
'skip$
if$
}
if$
然后使用terseinits=true, firstinits=true
应该做你想做的事