在法语的合法引文中,在句子中提到作者时,应该使用“X 教授”或“Y 院长”。使用biblatex
和 Biber,这意味着\citeauthor{key}
应该在每个作者前面加上正确的学术头衔(如果有)。
这个想法是建立一个单独的数据库(无论何种形式),指定作者姓名和要添加的标题,并在调用biblatex
时查看数据库\citeauthor
。理想情况下,可以使用 latex 命令(例如)将名称添加到数据库中。\addauthor{X}{Professor}
我对为“教授”和“院长”分别设置宏不感兴趣。
因此,我想知道是否可以实现这样的系统(即,考虑到这\citeauthor
不是最广泛使用的命令,它是否合理简单和有效),以及如何实现它。
编辑
按照 Daniel E. Shub 关于使用该nameaddon
字段的想法,我找到了一个似乎可以正常工作的 Biber 解决方案,尽管它需要两个\citeauthor
命令来实现大写。
在biber.conf
文件中,我写了以下内容(使用实际姓氏而不是 X、Y、Z):
<map>
<map_step map_field_source="AUTHOR" map_match="X|Y" map_final="1"/>
<map_step map_field_set="NAMEADDON" map_field_value="le professeur"/>
</map>
<map>
<map_step map_field_source="AUTHOR" map_match="Z" map_final="1"/>
<map_step map_field_set="NAMEADDON" map_field_value="le doyen"/>
</map>
我\citeauthor
按照 Daniel 的描述修改了宏,并\CiteAuthor
应用了\MakeCapital
格式(用于句子开头引用)的变体。
虽然我不确定这是否是最美观的方法......而且,正如前面提到的,它只适用于单一作者引用。
答案1
可以通过选项添加学术区别作为名称前缀来处理多作者作品biber
sourcemap
。此文件将字段biber.conf
中的数据映射到。区别通过一系列映射步骤添加到。author
namea
namea
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex">
<map map_overwrite="1">
<map_step map_field_source="AUTHOR" map_final="1"/>
<map_step map_field_set="NAMEA" map_origfieldval="1"/>
<map_step map_field_source="NAMEA"
map_match="Knuth"
map_replace="le professeur honoraire Knuth"/>
<map_step map_field_source="NAMEA"
map_match="Sigfridsson"
map_replace="le docteur Sigfridsson"/>
<map_step map_field_source="NAMEA"
map_match="(Ryde|von Brandt|Bertram|Wentworth)"
map_replace="le professeur $1"/>
<map_step map_field_source="NAMEA"
map_match="Erich Hoffmann"
map_replace="le professeur Hoffmann, Erich"/>
</map>
</maps>
</sourcemap>
</config>
请注意,任何符合文件<firstname lastname>
中格式的作者姓名都bib
需要进行规范化,<prefix lastname, firstname>
以便正确解析前缀。上面最后一个映射步骤给出了一个示例。
打印区别的 变体\citeauthor
可以用几种不同的方式定义。在下面的文档中,此命令只是\citeauthor
,但我们在本地附加了钩子,其中包含重置为和切换为 的\AtEveryCitekey
代码。labelname
namea
useprefix
true
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,maxcitenames=2]{biblatex}
\makeatletter
\newrobustcmd*{\citedistinctauthor}{%
\AtNextCite{%
\appto\blx@hook@citekey{%
\savename{namea}{\cbx@namea}%
\restorename{labelname}{\cbx@namea}%
\toggletrue{blx@useprefix}}}%
\citeauthor}
\makeatother
\newrobustcmd*{\Citedistinctauthor}{\bibsentence\citedistinctauthor}
\addbibresource{biblatex-examples.bib}
\begin{document}
\subsection*{\ttfamily\textbackslash citedistinctauthor}
\Citedistinctauthor{sigfridsson,bertram} show that...
Moreover \citedistinctauthor{knuth:ct,brandt,aristotle:poetics} show that...
\subsection*{\ttfamily\textbackslash citeauthor}
\Citeauthor{sigfridsson,bertram} show that...
Moreover \citeauthor{knuth:ct,brandt,aristotle:poetics} show that...
\printbibliography
\end{document}
答案2
如果您只处理单一作者的作品,那么此额外信息的合理位置可能是字段nameaddon
。虽然此字段的描述是打印在作者姓名后面的信息,但它不用于任何标准书目样式。然后您需要修改\citeauthor
才能使用此信息。
像这样:
\documentclass{article}
\usepackage[backend = biber]{biblatex}
\begin{filecontents}{\jobname.bib}
@Book{knuth,
author = "Donald E. Knuth",
title = "The {\TeX}book",
publisher = "Addison-Wesley",
year = "1986",
nameaddon = "Professor",
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareCiteCommand{\citeauthor}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printfield{nameaddon}\addspace{}\printnames{labelname}}
{\multicitedelim}
{\usebibmacro{postnote}}
\begin{document}
The \TeX book is written by \citeauthor{knuth}.
\printbibliography
\end{document}