我想创建一个自定义格式,用于在文本中引用作者姓名,我们称之为“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}