biblatex の索引で名前が重複して出現する

biblatex の索引で名前が重複して出現する

私はbiblatexwithindexingオプションを使用します。さらに、テキスト内には、通常の\index{}コマンドを使用して索引を作成する名前がいくつかあります。参考文献とテキストに同じ著者がいるので、索引には同じ名前が 2 つ出現します。最初の名前はテキストから、2 番目の名前は参考文献から来ています。たとえば、次のようになります。

ホーマー、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が2回登場していることに気づくでしょう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}

ここに、エントリが 1 つあるインデックスがあります。

ここに画像の説明を入力してください

もしかしたら回避策もあるかもしれませんbiblatexが、私にはわかりません。

答え2

あなたが見ている結果は、egreg によって正しく診断されています。しかし、もっと簡単な回避策があるかもしれません。これは、\indexname私が誤って推測したように、実際には ではなく、接頭辞「van」「von」「de la」などの処理によるものです。

biblatexが「接頭辞を使用する」(つまり、Ludwig van Beethoven を常に大文字の Van Beethoven, Ludwig と印刷する)場合、インデックスに「印刷」エントリと「並べ替え」エントリの両方を @ で区切って配置します。これにより、makeindex 選別「ヴァン・ベートーヴェン、ルートヴィヒ」を使用していますが、印刷「Van Beethoven, Ludwig」。後者は\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 が著者名を索引に追加する前にさまざまな方法で著者名を変換する傾向があることです。質問で言及されている @ の問題は、その 1 つにすぎません。たとえば、アクセントなどの特殊文字で厄介な問題がありました。名前「Châtelet, Émilie du」を索引付けするために、biblatex は実際に\indexentryは を呼び出すCh\IeC {\^a}telet, \IeC {\'E}milie duため、手動で を呼び出すと\index{Châtelet, Émilie du}重複したエントリが作成されます。そのため、手動で索引にエントリを追加したいときはいつでも、ファイルを確認して.idxbiblatex が何をしたかを確認し、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 の内部に依存して、とまったく同じ索引コマンドを発行します\cite{strawson:1966}が、それ以外は何も行いません (特に、Strawson (1966) などは印刷されません)。

関連情報