
我使用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}
您會注意到斯特勞森兩次出現。在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) 或其他內容)。