如何将所有被引著作的作者纳入人物索引中?

如何将所有被引著作的作者纳入人物索引中?

我使用 splitidx 包来创建一个指定人员的特殊索引。

\usepackage[makeindex,protected]{splitidx}
\newindex[Index of people]{person}
\setindexpreamble[person]{...}

为了将人们索引为“姓氏,名字”,我创建了两个简单的宏:

\newcommand{\person}[2]{\sindex[person]{#2, #1}#2}% "Given Surname" in text
\newcommand{\Person}[2]{\sindex[person]{#2, #1}#1 #2}% "Surname" only in text

这至少对有名字和姓氏的人有效(不像“柏拉图”这样的人)。现在我还想在人物索引中包含引用作品的作者,并附上我引用他们的页码。我引用他们作品时的页码应该设置为不同的样式,以查看我是否提到了这个人或其作品之一。有没有人知道如何自动执行此操作?简单地重写 \cite 命令不会有帮助,因为它只获取引用键作为参数。我使用 biblatex 包进行引用,也许这会有所帮助。

答案1

使用 biblatex,您可以将其用于\DeclareIndexNameFormat此目的。如 biblatex.def 中所述,以下参数将传递给名称列表的索引指令:

  • #1 = 姓氏
  • #2 = 姓氏(首字母)
  • #3 = 名字
  • #4 = 名字(首字母)
  • #5 = 名称前缀,又名“von part”
  • #6 = 姓名前缀(首字母)
  • #7 = 名称词缀,又名“初级部分”
  • #8 = 姓名词缀(首字母)

biblatex 选项indexing=true可启用全局索引。使用indexing=cite和 ,indexing=bib您可以分别将索引限制为引文或参考书目。

这是一个最小的工作示例:

\documentclass[english]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{article,
  author = {Nachname, Vorname},
  title = {Titel des Zeitschriftenartikels},
  journal = {Zeitschrift},
  year = {2006},
  volume = {6},
  pages = {19--75}
}
@BOOK{book,
  author = {Buchautor, Hans-Wilhelm},
  title = {Irgendein Buch},
  address = {Buch am Wald},
  year = {2000}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[makeindex,protected]{splitidx}
\newindex[Index of people]{person}
\newcommand{\person}[2]{\sindex[person]{#2, #1}#2}
\newcommand{\Person}[2]{\sindex[person]{#2, #1}#1 #2}

\usepackage[
  style=authortitle,
    indexing=true
]{biblatex}
\bibliography{\jobname}

\DeclareIndexNameFormat{default}{%
  \usebibmacro{index:name}{\sindex[person]}{#1}{#3}{#5}{#7}}

\begin{document}
\person{Given}{Surname}
\clearpage
\cite{article}
\clearpage
\cite{book}
\clearpage
\Person{Given}{Surname}
\clearpage
\printbibliography
\printindex*
\end{document}

编辑
我忘记了引用作者姓名的页码的不同样式。为此,您首先需要一个命令来以不同的方式打印索引中的页面,例如

\newcommand*{\ii}[1]{\textit{#1}}

如果你使用 hyperref,这应该是

\newcommand*{\ii}[1]{\textit{\hyperpage{#1}}}

现在您必须将此信息提供给\DeclareIndexNameFormat命令。在普通索引条目中,这很简单:(\index{Name|ii}或者,使用 splitindex,。\sindex[person]{Name|ii}但是,DeclareIndexNameFormat这无法直接实现,因为 biblatex 会拆分 bib 文件中给出的名称并将其传递给给定的索引命令。因此,最简单的解决方案是定义一个新命令,然后可以使用\DeclareIndexNameFormat

\newcommand{\xindex}[1]{\sindex[person]{#1|ii}}
\DeclareIndexNameFormat{default}{%
  \usebibmacro{index:name}{\xindex}{#1}{#3}{#5}{#7}}

相关内容