在 biblatex 中缩写解决作者名字的缩写

在 biblatex 中缩写解决作者名字的缩写

我喜欢解析.bib文件中缩写的名字。例如,如果一本书的作者是,我将解析文件中的Paul G. J. Smith缩写。Paul G[eorge] J[ohn] Smith.bib

然而,有些期刊特别希望作者姓名的印刷方式与所引著作中的一致。因此,Smith 的条目应与Smith, Paul G. J.印刷书目中的一致。

我需要做什么才能告诉它用点替换以 开头和以 结尾的biblatex序列?请建议一个命令,我可以将其放在我的文件序言中。我的序言中有一长串的调整,如果可能的话,我希望将它们全部保留在那里。[]..texbiblatex

一位 MWE 表示:

\documentclass{article}
\usepackage{csquotes}
\usepackage[
        bibstyle = authoryear,
        citestyle = authoryear-comp,
        sorting = nyt,
        language = american,
        abbreviate = false,
        backend = biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{smith2006,
    AUTHOR = "Paul G[eorge] J[ohn] Smith",
    TITLE = "My life with the Beatles",
    YEAR = "2006"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent
Text \parencite{smith2006}.
\printbibliography
\end{document}

在此处输入图片描述

答案1

执行此类操作的内置方法是使用 biblatex\DeclareSourcemap宏。要使用此宏,您必须使用biber。此方法是首选方法,因为它可以语义访问 biblatex 本机对象。尝试将其添加到上述示例的序言中:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=author, 
            match=\regexp{\[[^]]+\]},
            replace=.]
    }
  }
}

您还可以用它做很多其他事情,请参阅当前 biblatex 手册的第 4.5.2 节。这完全独立于样式,它在 biblatex 看到它之前就改变了 .bib 中的数据流。

答案2

我不确定这是否是正确的方法,但它似乎有效(部分代码来自Marco Daniel 的回答\DeclareNameFormat),特别是在和的使用上\DeclareNameAlias。也许 的专家biblatex可以改进它。

使用以下方法l3regex可以删除括号部分:

\documentclass{article}
\usepackage{csquotes}
\usepackage[
        bibstyle = authoryear,
        citestyle = authoryear-comp,
        sorting = nyt,
        language = american,
        abbreviate = false,
        backend = biber]{biblatex}

\DeclareNameAlias{sortname}{last-first} % for styles where names are sorted last-first
\DeclareNameFormat{last-first}{%
  \usebibmacro{name:last-first}{#1}{\removebrackets{#3}}{#5}{#7}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{sortname}{first-last} % for styles where names are sorted first-last
\DeclareNameFormat{first-last}{%
  \usebibmacro{name:first-last}{#1}{\removebrackets{#3}}{#5}{#7}%
  \usebibmacro{name:andothers}}

\usepackage{xparse,l3regex}
\ExplSyntaxOn
\NewDocumentCommand{\removebrackets}{m}
 {
  \sverre_remove_brackets:n { #1 }
 }
\cs_new_protected:Npn \sverre_remove_brackets:n #1
 {
  \tl_set:Nn \l__sverre_input_tl { #1 }
  \regex_replace_all:nnN { \[.*?\] } { \. } \l__sverre_input_tl
  \tl_use:N \l__sverre_input_tl
 }
\tl_new:N \l__sverre_input_tl
\ExplSyntaxOff


\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{smith2006,
    AUTHOR = "Paul G[eorge] J[ohn] Smith",
    TITLE = "My life with the Beatles",
    YEAR = "2006"}
@BOOK{smith2006x,
    AUTHOR = "Paul G[eorge] J[ohn] Smith and Knuth, Donald E[rving]",
    TITLE = "My life with the Beatles",
    YEAR = "2006"}
@BOOK{smith2006y,
    AUTHOR = "Paul G[eorge] J[ohn] Smith and X, Y and A, B and C, D and E, F and G, H",
    TITLE = "My life with the Beatles",
    YEAR = "2006"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent
Text \parencite{smith2006}.

\parencite{smith2006x}
\parencite{smith2006y}
\printbibliography
\end{document}

在此处输入图片描述

相关内容