biblatex
我有一个使用和生成的被引作者索引imakeidx
。如果已定义,我如何按-filesortkey
中的字段对该索引进行排序bib
。
对于索引标题,有一个indexsorttitle
字段(biblatex 手册第 26 页),但是对于作者没有对应的字段。
我的想法是通过 来使用命令sortstring@printed name
中的语法,但我不知道如何实现。也许可以像在宏中插入一样?\index
bibmacro
\iffieldundef{sortkey}{}{\thefield{sortkey}@}
在下面的例子中,al-Xalil 应该在索引中排在 Brutus 之后。
\documentclass{book}
\usepackage{imakeidx}
\usepackage{filecontents}
\usepackage[indexing=cite]{biblatex}
\makeindex[title=Index of Authors, name=author]
\renewbibmacro*{citeindex}{%
{\indexnames{labelname}}{}}
\DeclareIndexNameFormat{default}{%
\usebibmacro{index:name}{\index[author]}
{#1}{#3}{#5}{#7}}
\begin{filecontents}{general.bib}
@misc{A01,
author = {Arabicname al-Xalil},
year = {2001},
sortkey = {xalil},
title = {Alpha}
}
@misc{B02,
author = {Alex Brutus},
year = {2002},
title = {Bravo}
}
\end{filecontents}
\addbibresource{general.bib}
\begin{document}
\cite{A01}
\cite{B02}
\printindex[author]
\end{document}
答案1
根据biblatex
文档该字段sortkey
未写入.bbl
文件,因此无法在文档中使用(第 27 页)。
我们必须使用另一个字段,因为我很懒,所以我使用了usera
下面的字段。当然,可以indexsortname
通过.dbx
文件创建新字段。
然后我们只需按照你自己建议的方式使用
\renewbibmacro*{index:name}[5]{%
\usebibmacro{index:entry}{#1}
{\iffieldundef{usera}{}{\thefield{usera}\actualoperator}\mkbibindexname{#2}{#3}{#4}{#5}}}
平均能量损失
\documentclass{article}
\usepackage{imakeidx}
\usepackage{filecontents}
\usepackage[indexing=cite]{biblatex}
\makeindex[title=Index of Authors, name=author]
\renewbibmacro*{citeindex}{%
{\indexnames{labelname}}{}}
\renewbibmacro*{index:name}[5]{%
\usebibmacro{index:entry}{#1}
{\iffieldundef{usera}{}{\thefield{usera}\actualoperator}\mkbibindexname{#2}{#3}{#4}{#5}}}
\DeclareIndexNameFormat{default}{%
\usebibmacro{index:name}{\index[author]}
{#1}{#3}{#5}{#7}}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Arabicname al-Xalil},
year = {2001},
usera = {xalil},
sortkey = {xalil},
title = {Alpha}
}
@misc{B02,
author = {Alex Brutus},
year = {2002},
title = {Bravo}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{A01}
\cite{B02}
\printindex[author]
\end{document}