将作者之间的 '.,' 改为 ',' 并删除姓氏和名字之间的 '.'

将作者之间的 '.,' 改为 ',' 并删除姓氏和名字之间的 '.'

传统的引用格式可以通过以下命令设置

\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应该做你想做的事

相关内容