
Eu uso biblatex
com indexing
opção; além disso, dentro do texto tenho alguns nomes para indexar, com o \index{}
comando usual. Como tenho os mesmos autores na bibliografia e no texto, no Índice encontro duas ocorrências de mesmo nome, a primeira vinda do texto, a segunda da bibliografia, por exemplo:
Homero, 27, 45, 79
Homero, 107
Mas é errado e confuso. Como posso unificar as ocorrências de nomes?
Um exemplo mínimo:
\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}
onde você notará a dupla ocorrência de Strawson. Em example.idx
eu li
\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}
Responder1
Por motivos que realmente não entendo, a indexação feita por biblatex
emite um comando do formulário
\index{Strawson, Peter@Strawson, Peter}
como você pode ver examinando o .idx
arquivo
\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}
Você pode contornar esse comportamento definindo
\newcommand{\nindex}[1]{\index{#1@#1}}
e usando \nindex{Strawson, Peter}
no texto. Após a alteração, aqui está o .idx
arquivo que recebo:
\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}
e aqui está o índice, com uma única entrada:
Talvez haja uma solução alternativa também biblatex
, mas não sei.
Responder2
O resultado que você está vendo foi diagnosticado corretamente por egreg. Mas pode haver uma solução alternativa mais simples. Na verdade, não se trata de \indexname
, como especulei erroneamente, mas do tratamento dos prefixos "van" "von" "de la" etc.
Se biblatex
estiver "usando prefixos" (o que significa que sempre imprimirá Ludwig van Beethoven como Van Beethoven, Ludwig, com maiúscula), então ele coloca uma entrada de "impressão" e uma de "classificação" no índice, separadas por @. Ele faz isso para que possa termakeindex
organizarusando "van Beethoven, Ludwig", masimprimir"Van Beethoven, Ludwig". Este último requer a adição de um comando LaTeX ( \MakeCapital {van}
) no arquivo, o que causaria dificuldades de classificação se fosse incluído abertamente na entrada do índice.
Solução Simples
Você pode evitar isso definindo a opção useprefixes=false
ao carregar arquivos biblatex
. Isso pode resolver o seu problema, a menos que você precise de "useprefixes", ou seja, você tem entradas como "van Beethoven" que deseja imprimir "Van Beethoven" e classificadas em V. Na maioria dos casos nas convenções de classificação em inglês, pelo menos esta será uma boa solução e provavelmente o que você deseja.
Solução não tão simples
Alternativamente, se você quiser manter a opção "useprefixes", o código a seguir tenta garantir que a nomenclatura adicional ( van Beethoven, Ludwig@\MakeCapital{van} Beethoven Ludwig
)apenasé usado quando o nome na verdadetemum prefixo e, portanto, resolve o problema no seu caso (mas você precisaria usar a abordagem do egreg se estivesse lidando com um nome que tivesse um prefixo, ou seja, você teria que garantir que suas entradas de índice para nomes com um prefixo assumissem o formato dado anteriormente).
\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
Responder3
Eu uso outra solução: definir comandos de citação falsos que não imprimem nada, mas adicionam o autor da referência “citada” ao índice.
O problema, como já foi apontado, é que o biblatex é capaz de transformar os nomes dos autores de várias maneiras antes de adicioná-los ao índice; o problema @ mencionado na pergunta é apenas um deles. Por exemplo, tive um problema chato com caracteres especiais, como acentos: para indexar o nome “Châtelet, Émilie du”, o biblatex na verdade chamaria \indexentry
, Ch\IeC {\^a}telet, \IeC {\'E}milie du
e uma chamada manual para \index{Châtelet, Émilie du}
criaria, portanto, uma entrada duplicada. Então, sempre que eu queria adicionar uma entrada ao índice manualmente, eu tinha que verificar o .idx
arquivo para ver o que o biblatex havia feito e depois copiá-lo, como sugeriram Barbara Beeton e Paul Stanley. Funcionou, mas além de ser bastante ilegível, achei que não era muito robusto para o meu (grande) documento, pois qualquer alteração nos componentes internos do biblatex ou nas minhas opções (em relação aos prefixos, por exemplo) poderia quebrar todas as minhas entradas manuais.
Agora, se eu definir:
\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}}
{}
{}
então posso ligar \idxauthor{strawson:1966}
para adicionar uma entrada de índice manual para Strawson, que depende dos componentes internos do biblatex para emitir exatamente o mesmo comando de indexação que a, \cite{strawson:1966}
mas não faz mais nada (e em particular não imprime Strawson (1966) ou qualquer outra coisa).