biblatex를 사용하는 Index에서 이름이 두 번 발생합니다.

biblatex를 사용하는 Index에서 이름이 두 번 발생합니다.

나는 옵션 biblatex과 함께 사용합니다. 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.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 종류"van Beethoven, Ludwig"를 사용하지만,인쇄"반 베토벤, 루트비히". 후자는 파일에 LaTeX 명령( )을 추가해야 하는데 \MakeCapital {van}, 색인 항목에 그대로 포함되어 있으면 정렬이 어려워집니다.

간단한 솔루션useprefixes=false를 로드할 때 옵션을 설정하면 이를 방지할 수 있습니다 biblatex. "접두사 사용"이 필요하지 않은 한 문제가 해결될 수 있습니다. 즉, "Van Beethoven"을 인쇄하고 V 아래에 정렬하려는 "van Beethoven"과 같은 항목이 있습니다. 대부분의 경우 영어 정렬 규칙에서는 적어도 이것이 좋은 해결책이 될 것입니다. , 그리고 아마도 당신이 원하는 것.

그리 간단한 해결책은 아니다 또는 "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}중복 항목이 생성됩니다. 그래서 수동으로 색인에 항목을 추가하고 싶을 때마다 파일을 체크인하여 .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}}
  {}
  {}

그런 다음 Strawson에 대한 수동 색인 항목을 추가하도록 호출할 수 있습니다 \idxauthor{strawson:1966}. 이는 biblatex 내부에 의존하여 a와 정확히 동일한 색인 명령을 실행 \cite{strawson:1966}하지만 다른 작업은 수행하지 않습니다(특히 Strawson(1966) 등을 인쇄하지 않습니다).

관련 정보