我使用 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}}