Biblatex 3.3 名称格式

Biblatex 3.3 名称格式

我想创建一个自定义格式,用于在文本中引用作者姓名,我们称之为“newformat”。我能想到的一个选项是创建一个新的 bibmacro,其中的参数可以根据我的喜好进行更改,例如

\documentclass{article}

  \usepackage{filecontents}
  \usepackage[backend=biber]{biblatex}[2016/01/01] %the latest version of biblatex?
  % biber is version 2.4; the latest?

\begin{filecontents}{\jobname.bib}
@misc{Doe12,
  author = {Doe, John},
  year = {2012},
  title = {A macro for formatting names},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\nocite{*}

\newbibmacro{name:newformat}{\printnames{authors}}
\DeclareNameFormat{newformat}{%
  \usebibmacro{name:newformat}{\textbf{#1}}{\textbf{#3}}{#5}{#7}%
  \usebibmacro{name:andothers}%
}

\begin{document}

  \section*{Testing the format here}

  I am citing
  \citename{Doe12}[newformat]{author}

  \printbibliography % to make sure that the .bib file is properly formated.

\end{document}

这里我只是\textbf为了举例子而用,但是我最终想使用其他函数,比如大写或者回文!

但是,我收到了这个奇怪的错误信息:

! Illegal parameter number in definition of \blx@defformat@d.
<to be read again> 
                   3
l.20   \usebibmacro{name:last}{#1}{#3
                                     }{#5}{#7}%

这似乎表明第二个选项 {#3} 不是预期的。我有点不知所措;我检查了 biblatex 包,\usebibmacro{name:last} 必须给出 4 个参数,不是吗?请指教。

答案1

在 biblatex 3.3 中,的格式\DeclareNameFormat已发生改变。在其代码部分,它不再接受 8 个参数,而只接受一个参数。对于名称的各个部分,现在有宏,您可以通过使用 拆分主名称数据来获得这些宏\namepart

名称格式的更改还会影响命令(如\mkbibnamelast(now \mkbibnamefamily))和 bib-macros(如\name:first-last(now name:given-family))以及选项(如firstinits(now giveninits)。这意味着必须调整相当多的旧文档和样式。在使用涉及名称格式的旧示例时,应检查文档。

您的示例在新格式下可能如下所示

\documentclass{article}

  \usepackage{filecontents}
  \usepackage[backend=biber]{biblatex}[2016/01/01] %the latest version of biblatex?
  % biber is version 2.4; the latest?

\begin{filecontents}{\jobname.bib}
@misc{Doe12,
  author = {Doe, John},
  year = {2012},
  title = {A macro for formatting names},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\nocite{*}

\newbibmacro{name:newformat}{%
   \textbf{\namepartfamily}  % #1->\namepartfamily, #2->\namepartfamilyi
   \textbf{\namepartgiven}   % #3->\namepartgiven,  #4->\namepartgiveni
   [prefix: \namepartprefix] % #5->\namepartprefix, #6->\namepartprefixi
   [suffix: \namepartsuffix] % #7->\namepartsuffix, #8->\namepartsuffixi
   }

\DeclareNameFormat{newformat}{%
  \nameparts{#1}% split the name data, will not be necessary in future versions
  \usebibmacro{name:newformat}%
  \usebibmacro{name:andothers}%
}

\begin{document}

  \section*{Testing the format here}

  I am citing
  \citename{Doe12}[newformat]{author}

\end{document}

请注意:我没有尝试制作好看的格式。例如,我没有为空名称部分添加合适的测试。

该示例也不使用与标准定义相同的样式。biblatex 本身会将 bib 宏定义为具有 4 个参数的宏:

   \newbibmacro*{name:newformat}[4]{ \textbf{#1} \textbf{#2} ...}

然后使用参数调用宏\DeclareNameFormat

    \usebibmacro{name:newformat}{\namepartfamily}{\namepartgiven}{...}{...}

我认为我的版本更容易理解和扩展,但这只是个人品味的问题。

好处是名称系统现在可以扩展,并且可以在将来添加新的名称部分。

进一步阅读的链接:

https://github.com/plk/biblatex/issues/372

http://www.texdev.net/2016/03/13/biblatex-a-new-syntax-for-declarenameformat/

还请检查文档、发行说明(在 biblatex 的 doc 文件夹中)和示例(有关如何扩展名称系统的示例)。

答案2

在 biblatex 中加粗姓名、姓氏和日期。我试过了,有效

\AtBeginBibliography{%
    \renewcommand*\mkbibnamegiven[1]{\mkbibbold{#1}}
    \renewcommand*\mkbibnamefamily[1]{\mkbibbold{#1}}
    \renewcommand*\mkbibnameprefix[1]{\mkbibbold{#1}}
    \renewcommand*\mkbibnameaffix[1]{\mkbibbold{#1}}
    \DeclareFieldFormat{parens}{\mkbibbold{\mkbibparens{#1}}}
    \DeclareFieldFormat{date}{\mkbibbold{#1}}
    \DeclareFieldFormat{author}{\mkbibbold{#1}}
    }
    \DeclareNameAlias{sortname}{family-given}
    \DeclareNameAlias{default}{family-given}

相关内容