我使用biblatex
withindexing
选项;此外,在文本中我有一些要索引的名称,使用通常的\index{}
命令。由于我在参考书目和文本中有相同的作者,因此在索引中我发现了两个相同名称的出现,第一个来自文本,第二个来自参考书目,例如:
荷马,27,45,79
荷马,107
但这是错误的,而且令人困惑。我该如何统一名称的出现?
一个简单的例子:
\documentclass{article}
\usepackage{fontspec}
\usepackage[style=philosophy-verbose,scauthors=true,classical=true,%
volumeformat=romansc,indexing]{biblatex}
\usepackage{filecontents}
\usepackage{imakeidx}
\indexsetup{othercode=\footnotesize}
\makeindex[intoc=true]
\begin{filecontents*}{\jobname.bib}
@book{strawson:1966,
author = {Peter Strawson},
title = {The Bounds of Sense},
publisher = {Routledge},
location = {London},
year = {1966},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson told
\newpage
De nobis ipsis silemus
De nobis ipsis silemus: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson told
\printbibliography
\printindex
\end{document}
你会注意到 Strawson 出现了两次。example.idx
我读到
\indexentry{Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
答案1
由于我不太明白的原因,索引发出biblatex
以下形式的命令
\index{Strawson, Peter@Strawson, Peter}
.idx
通过检查文件你可以看到
\indexentry{Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
您可以通过定义来解决此行为
\newcommand{\nindex}[1]{\index{#1@#1}}
\nindex{Strawson, Peter}
并在文本中使用。更改后,.idx
我得到的文件如下:
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter@Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
这是索引,只有一个条目:
也许还有其他解决方法biblatex
,但我不知道。
答案2
您看到的结果已被 egreg 正确诊断。但可能有一个更简单的解决方法。实际上,这不是\indexname
我错误猜测的,而是由于前缀“van”、“von”、“de la”等的处理。
如果biblatex
“使用前缀”(这意味着它将始终将 Ludwig van Beethoven 打印为 Van Beethoven, Ludwig,大写),则它会将“打印”和“排序”条目放入索引中,并用 @ 分隔。这样做是为了能够makeindex
种类使用“范贝多芬,路德维希”,但是打印“范·贝多芬,路德维希”。后者需要在文件中添加 LaTeX 命令 ( \MakeCapital {van}
),如果将其裸露在索引条目中,将导致排序困难。
简单的解决方案useprefixes=false
您可以通过在加载时 设置选项来避免这种biblatex
情况。这也许可以解决您的问题,除非您需要“useprefixes”,即您有“van Beethoven”之类的条目,而您想打印“Van Beethoven”并按 V 排序。在大多数情况下,在英语的排序惯例中,这至少是一个很好的解决方案,而且可能就是您想要的。
不那么简单的解决方案
或者,如果您想保留“useprefixes”选项,以下代码将尝试确保附加命名(van Beethoven, Ludwig@\MakeCapital{van} Beethoven Ludwig
)仅有的当名称实际上被使用时有前缀,因此解决了您的问题(但是,如果处理带有前缀的名称,则需要使用 egreg 的方法,即,您必须确保带有前缀的名称的索引条目采用上面给出的形式)。
\makeatletter
\renewcommand*{\mkbibindexname}[4]{%
\ifuseprefix
{\ifblank{#3}% no PREFIX
{\@firstofone #1% remove spurious braces
\ifblank{#4}{}{ #4}%
\ifblank{#2#3}{}{,}%
\ifblank{#2}{}{ #2}}%
{#3 % PREFIX
\@firstofone #1%removespuriousbraces
\ifblank{#4}{}{ #4}%
\ifblank{#2}{}{, #2}%
\actualoperator
\ifblank{#3}{}{\MakeCapital{#3} %
#1%
\ifblank{#4}{}{ #4}%
\ifblank{#2}{}{, #2}}}}
{\@firstofone #1% NOT "using prefix" remove spurious braces
\ifblank{#4}{}{ #4}%
\ifblank{#2#3}{}{,}%
\ifblank{#2}{}{ #2}%
\ifblank{#3}{}{ #3}}}
\makeatother
答案3
我使用另一种解决方案:定义不打印任何内容的假引用命令,但将“引用”参考文献的作者添加到索引中。
正如已经指出的,问题在于 biblatex 容易在将作者姓名添加到索引之前以各种方式转换作者姓名;问题中提到的 @ 问题只是其中之一。例如,我在处理特殊字符(如重音符)时遇到了一个烦人的问题:要索引名称“Châtelet, Émilie du”,biblatex 实际上会调用\indexentry
,因此Ch\IeC {\^a}telet, \IeC {\'E}milie du
手动调用\index{Châtelet, Émilie du}
会创建重复的条目。因此,每当我想手动将条目添加到索引时,我都必须检查文件.idx
以查看 biblatex 做了什么,然后复制它,正如 barbara beeton 和 Paul Stanley 所建议的那样。它起作用了,但除了难以辨认之外,我觉得它对我的(大)文档来说不是很强大,因为 biblatex 内部或我的选项(比如关于前缀)的任何更改都可能破坏我所有的手动条目。
现在,如果我定义:
\newbibmacro*{idxauthor}{%
\ifciteindex
{\indexnames{author}}
{}}
\DeclareCiteCommand{\idxauthor}
{}%
{\usebibmacro{idxauthor}}
{}
{}
\newbibmacro*{idxeditor}{%
\ifciteindex
{\indexnames{editor}}
{}}
\DeclareCiteCommand{\idxeditor}
{}%
{\usebibmacro{idxeditor}}
{}
{}
\newbibmacro*{idxtransl}{%
\ifciteindex
{\indexnames{translator}}
{}}
\DeclareCiteCommand{\idxtransl}
{}%
{\usebibmacro{idxtransl}}
{}
{}
然后我可以调用\idxauthor{strawson:1966}
来为 Strawson 添加一个手动索引条目,它依赖于 biblatex 内部来发出与 a 完全相同的索引命令,\cite{strawson:1966}
但不执行其他任何操作(特别是不会打印 Strawson (1966) 或其他内容)。