我目前正在定义(法语)引用样式。有一件事我还没能做到,那就是在引用中用简短形式替换重复作者的名字。我想做的是:
- 简·史密斯 (Jane Smith),第一部作品,巴黎,1900 年。[该作者的首次引用]。
- J. Smith,其他作品,巴黎,1901 年(如果不是直接延续上一部作品的话)。
或者 :
- Ead.,其他作品,巴黎,1901 年 [如果直接跟随]。
有办法吗?我尝试过,\ifentryseen{author}
但至今没有成功。
[编辑] 这是我尝试做的方法(但出现错误! extra \else
):
\newbibmacro*{author-fullnote}{%
\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
{\ifthenelse{\iffieldequals{namehash}{\bbx@lasthash}\AND\NOT\iffirstonpage}
{\bibstring[\mkidem]{idem\thefield{gender}}}
{\ifthenelse{\ifentryseen{author}}{\printnames{labelname}}{
\printnames[upshape][1-10]{author}
\savefield{namehash}{\bbx@lasthash}}}}
{\global\undef\bbx@lasthash}}
答案1
以下是我最终使用样式中的代码完成此操作的方法Biblatex-dw
。我添加了cbx
:
% Option 'nameseen'
\newcommand*{\cbx@seennames}{}
\newrobustcmd*{\cbx@nameseen}[1]{%
\listxadd{\cbx@seennames}{\detokenize{#1}}}
\newrobustcmd*{\cbx@ifnameseen}[1]{%
\xifinlist{\detokenize{#1}}{\cbx@seennames}}
\AtBeginDocument{%
\DeclareNameFormat{citeauthor}{%
\cbx@ifnameseen{#1#3#5#7}
{\usebibmacro{name:first-last-upshape}{#1}{#4}{#5}{#7}%
}%
{\usebibmacro{name:first-last-upshape}{#1}{#3}{#5}{#7}%
\cbx@nameseen{#1#3#5#7}}%
\usebibmacro{name:andothers}}
}
first-last-upshape
注释中使用的格式在哪里,第一次使用全名,其他时间只使用首字母。然后,我在 中bbx
定义了两个宏,灵感来自该historische-zeitschrift
样式,应用于完整注释(et al. 仅在十个名字后)和简短注释(et al. 在三个名字后),每次都指定 idem/eadem/etc. 应用于以下两个参考文献中的同一作者:
\newbibmacro*{author-fullnote}{%
\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
{\ifthenelse
{\iffieldequals{namehash}{\cbx@lasthash}}%
{\bibstring{idem\thefield{gender}},}%
{\printnames[citeauthor][1-10]{author}%
\savefield{namehash}{\cbx@lasthash}
}}%
{\global\undef\cbx@lasthash}}
\newbibmacro*{author-shortnote}{%
\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}%
{\ifthenelse
{\iffieldequals{namehash}{\cbx@lasthash}}%
{\bibstring{idem\thefield{gender}},}%
{\printnames[citeauthor][1-3]{author}%
\savefield{namehash}{\cbx@lasthash}
}}%
{\global\undef\cbx@lasthash}}
它看起来是这样的:
在以下参考文献中:
进一步参考: