如何使用 \citeauthor 在作者姓名前添加学术头衔?

如何使用 \citeauthor 在作者姓名前添加学术头衔?

在法语的合法引文中,在句子中提到作者时,应该使用“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中的数据映射到。区别通过一系列映射步骤添加到。authornameanamea

<?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代码。labelnamenameauseprefixtrue

\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}

相关内容