我正在寻找一种方法来改变作者(或编辑者)姓名在 Biblatex 生成的索引中的排序方式。
在法语中,我们使用重音字母,例如é
或è
,这些字母应与主字母一起排序,在本例中为e
。每当名称包含这样的重音字母时,它就会无序排序,因此我们需要使用 来索引条目:no accents@with accents
。我知道如何让 Biblatex 在索引中使用@
,但不知道如何向其输入正确的字符串。
我如何确保 Biblatex 可以:
- 将这些特殊字符转换为等效的基本拉丁字母,然后把名称打印到索引中(使用 Biber 或任何字符串处理包)
- 使用特殊名称字段,例如
indexauthor
,其中包含仅使用基本拉丁字符的名称列表 - 调整索引以便它正确地对所有特殊字符进行排序而无需使用
@
(我的基类正在使用回忆录,因此makeidx
是首选引擎) - 或其他任何可行的方法
解决方案来自这个答案部分起作用,如以下示例所示:
\documentclass{article}
\usepackage[french]{babel}
\usepackage[indexing=true]{biblatex}
\usepackage{makeidx}
\makeindex
\begin{filecontents}{\jobname.bib}
@article{testcite,
author = {Éliot, William and Doé, John},
title = {Test Title},
year = {2018},
usera = {Eliot, William and Doe, John}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\renewbibmacro*{citeindex}{%
{\indexnames{labelname}}{}}
\renewbibmacro*{index:name}[5]{%
\usebibmacro{index:entry}{#1}
{\iffieldundef{usera}{}{\thefield{usera}\actualoperator}\mkbibindexname{#2}{#3}{#4}{#5}}}
\makeindex
\begin{document}
\printindex
\cite{testcite}
\end{document}
名字被正确地编入索引,作为字母E
,但第二个名字也被编入索引,因为我们对索引作者姓名(在本例中为)使用的是文字字段,而不是名称字段usera
。
是否可以使用名称字段来代替并确保两个名称都得到正确索引?我意识到由于字段的工作方式,这可能是不可能的。
在这种情况下,我该如何即时转换特殊字符?或者调整索引过程本身,以便正确对重音字母进行排序?
答案1
你需要一个可以正确处理 UTF8 的索引工具,这样就根本不需要手动操作排序了。这其实不是问题biblatex
,而是索引工具的问题。
您可以xindy
一起使用imakeidx
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[indexing=true,style=authoryear]{biblatex}
\usepackage[xindy, noautomatic]{imakeidx}
\def\xindylangopt{-M texindy -L french -C utf8}
\makeindex[options=\xindylangopt]
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{testcite,
author = {Éliot, William and Doé, John},
title = {Test Title},
year = {2018},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\printindex
\index{hallo}
\cite{testcite}
\printbibliography
\end{document}
编译为
pdflatex document
biber document
pdflatex document
texindy -M texindy -L french -C utf8 document.idx
pdflatex document
pdflatex document
给出