Двойное появление имен в индексе с помощью biblatex

Двойное появление имен в индексе с помощью biblatex

Я использую опцию biblatexwith indexing; более того, внутри текста у меня есть некоторые имена для индексации, с обычной \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.idxI read

\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«использует префиксы» (что означает, что он всегда будет печатать Людвига ван Бетховена как Ван Бетховен, Людвиг, с заглавной буквы), то он помещает в индекс как «печать», так и «сортировку», разделенные @. Это делается для того, чтобы иметьmakeindex Сортироватьиспользуя "ван Бетховен, Людвиг", ноРаспечатать"Van Beethoven, Ludwig". Последнее требует добавления команды 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, а затем копировать его, как предлагали Барбара Битон и Пол Стэнли. Это работало, но, помимо того, что было довольно неразборчиво, я чувствовал, что это не очень надежно для моего (большого) документа, так как любое изменение во внутренних компонентах 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) или что-то в этом роде).

Связанный контент