使用 biblatex 生成的用于对作者索引进行排序的字符串

使用 biblatex 生成的用于对作者索引进行排序的字符串

biblatex我有一个使用和生成的被引作者索引imakeidx。如果已定义,我如何按-filesortkey中的字段对该索引进行排序bib

对于索引标题,有一个indexsorttitle字段(biblatex 手册第 26 页),但是对于作者没有对应的字段。

我的想法是通过 来使用命令sortstring@printed name中的语法,但我不知道如何实现。也许可以像在宏中插入一样?\indexbibmacro\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}

平均能量指数

相关内容