biblatex 索引中名稱出現兩次

biblatex 索引中名稱出現兩次

我使用biblatexwithindexing選項;此外,在文本中我有一些名稱可以使用通常的\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}

您會注意到斯特勞森兩次出現。在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 種類使用“範·貝多芬,路德維希”,但是列印「馮‧貝多芬,路德維希」。後者需要\MakeCapital {van}在檔案中加入一個LaTeX指令( ),如果裸露地包含在索引條目中會導致排序困難。

簡單的解決方案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) 或其他內容)。

相關內容