\index in \pagenote mit Splitindex-Option (für mehrere Indizes)

\index in \pagenote mit Splitindex-Option (für mehrere Indizes)

Wie funktioniert \expandafter hier? Folgendes codemuss ausgefüllt werden. Ich gehe davon aus, dass einige von euch das hoffentlich problemlos hinbekommen.

nDie Absicht ist: den Buchstaben (oder ein beliebiges anderes Für Notesvon pagenotein das index) mit dem pagenotenumberFür \index[]{}innerhalb zu verbreiten \pagenote{}.

Das codeist abgeleitet von \index innerhalb der Fußnote: Wie wird die Fußnotennummer mit dem Indexpaket korrekt weitergegeben?

\documentclass{report}

\usepackage{index}
\usepackage[texindy,splitindex]{imakeidx}
\usepackage[hidelinks]{hyperref}
\usepackage[page]{pagenote}

\newcommand\pn[2]{\hyperpage{#2}n#1}

\makeatletter
\let\if@nopnote\iffalse % just for the example
\newcommand{\is}[2]{%
    \if@nopnote
    \index[#1]{#2}%
    \else
    \expandafter\pagenoteindex\expandafter{\tempnumber}{#2}%
    \fi
}
\renewcommand{\notenuminnotes}[1]{%
    \edef\tempnumber{#1}%
    {\normalfont #1.} }
\makeatother
\newcommand{\pagenoteindex}[3]{\index[#1]{#3|pn{#2}}}

\makeindex[program=texindy,name=Names,title=Names]
\makeindex[program=texindy,name=Something,title=Something]
\makepagenote

\begin{document}
    
First index.\index[Something]{First index} 
    
Sentence.\pagenote{First pagenote without index.}
    
\clearpage
    
Emph index.\index[Something]{Emph index@\emph{Emph index}} 
    
pagenote and index.\pagenote{Second pagenote with index.\is[Something]{Index inside second pagenote}}
    
\clearpage
    
Third pagenote.\pagenote{\emph{Emph index word}.\is[Something]{Emph index@\emph{Emph index}}}
    
Namenindex\index[Names]{Namenindex}
    
\printnotes
    
\printindex[Something]
\printindex[Names]
\end{document}

Diese Funktion scheint eine Standardfunktion für die Indizierung im modernen Buchsatz zu sein, wird aber von LaTeX noch nicht erkannt. Es wäre großartig, wenn jemand dies unterstützen und eine Lösung präsentieren könnte.

Antwort1

Ich bin mir nicht ganz sicher, was Sie wollen. (Ich erinnere mich vage an frühere Fragen, aber diese hier enthält nicht viel, was mein Gedächtnis auffrischen könnte.)

Das Folgende generiert Notizen und Seitenzahlen in den Indizes, ohne den Inhalt der documentUmgebung zu ändern. Ob das das Zielverhalten ist, weiß ich nicht.

Das anfängliche Problem mit Ihrem Code besteht darin, dass Sie 3 erforderliche Argumente definiert haben \pagenoteindex, aber nur 2 übergeben. Ich vermute, Sie möchten hier ein optionales Argument, da Sie eines an übergeben \is, sodass wir 4 Fälle statt 2 benötigen:

  1. wir befinden uns in einer Seitennotiz und haben ein optionales Argument;
  2. wir befinden uns in einer Seitennotiz ohne eine solche;
  3. wir sind mit einem draußen;
  4. wir sind ohne draußen.

expl3macht die Erweiterung (relativ) unkompliziert. Es ist zumindest viel weniger umständlich als das Jonglieren mit \expandafters-Ketten, die ins Unendliche zu regredieren drohen. Wir definieren zwei Funktionen für die Fälle (1) und (2):

\cs_new_protected:Nn \thomkrates_pagenoteindex:nnnn
{
  \index [#1] { #3 | pn {#2}{#4} }
}
\cs_new_protected:Nn \thomkrates_pagenoteindex:nnn
{
  \index  { #2 | pn {#1}{#3} }
}

Wenn Sie diesen Code verwenden, beachten Sie bitte, dass diesnichtder richtige Weg, dies zu tun. Wie unten erläutert, umgehen wir hier die Standardmechanismen.

Dann teilen wir LaTeX mit, dass wir Varianten möchten, die an zweiter oder erster Stelle ein vordefiniertes Argument erhalten sollen:

\cs_generate_variant:Nn \thomkrates_pagenoteindex:nnnn { nene }
\cs_generate_variant:Nn \thomkrates_pagenoteindex:nnn { ene }

Das bedeutet, dass LaTeX diese Argumente erweitert, bevor sie an unsere Basisfunktionen übergeben werden, sodass wir das nicht tun müssen. Jetzt können wir also eine Version von definieren, \isum unsere 4 Fälle zu behandeln:

\NewDocumentCommand {\is} { om }{%
  \if@nopnote
    \IfValueTF { #1 } {
      \index[#1]{#2}
    }{
      \index{#2}
    }
  \else
    \hypertarget{pn:\tempnumber}{}%
    \IfValueTF { #1 } {
      \thomkrates_pagenoteindex:nene { #1 } { \tempnumber } { #2 } { \temppgnumber }
    }{
      \thomkrates_pagenoteindex:ene { \tempnumber } { #2 } { \temppgnumber }
    }
  \fi
}

xindyDa ich das Format will (im Gegensatz zu ) nicht verstehe makeindexund die entsprechende Dokumentation nicht finden konnte (die vermutlich irgendwo existiert), habe ich es aufgegeben, herauszufinden, wie ich die Seitenzahl anzeigen lassen kann, wenn \hyperindexformatim .idxstatt verwendet wird \hyperpage.

Daher verwenden wir an dieser Stelle einen Ansatz, der auf roher Gewalt und Ignoranz beruht, indem wir die Seitenzahl einfach direkt hinzufügen und die üblichen Mechanismen umgehen:

\renewcommand{\notenuminnotes}[1]{%
  \edef\tempnumber{#1}%
  \edef\temppgnumber{\thepage}%
  {\normalfont #1.} }

Wir ändern unsere Definition auch \pn, um das hinzugefügte Ziel zu nutzen \is:

\newcommand\pn[2]{\hyperpage{#2}\hyperlink{pn:#1}{n#1}}

Zahlen in Indizes mit plausibel erscheinendem Verhalten

Vollständiger Code:

\documentclass{report}
% ateb: https://tex.stackexchange.com/a/705581/ addaswyd o gwestiwn Thomkrates: https://tex.stackexchange.com/q/705565/
\usepackage{index}
\usepackage[texindy,splitindex]{imakeidx}
\usepackage[hidelinks]{hyperref}
\usepackage[page]{pagenote}

\newcommand\pn[2]{\hyperpage{#2}\hyperlink{pn:#1}{n#1}}

\makeatletter
\let\if@nopnote\iffalse % just for the example
\renewcommand{\notenuminnotes}[1]{%
  \edef\tempnumber{#1}%
  \edef\temppgnumber{\thepage}%
  {\normalfont #1.} }
\ExplSyntaxOn
\NewDocumentCommand {\is} { om }{%
  \if@nopnote
    \IfValueTF { #1 } {
      \index[#1]{#2}
    }{
      \index{#2}
    }
  \else
    \hypertarget{pn:\tempnumber}{}%
    \IfValueTF { #1 } {
      \thomkrates_pagenoteindex:nene { #1 } { \tempnumber } { #2 } { \temppgnumber }
    }{
      \thomkrates_pagenoteindex:ene { \tempnumber } { #2 } { \temppgnumber }
    }
  \fi
}
\cs_new_protected:Nn \thomkrates_pagenoteindex:nnnn
{
  \index [#1] { #3 | pn {#2}{#4} }
}
\cs_generate_variant:Nn \thomkrates_pagenoteindex:nnnn { nene }
\cs_new_protected:Nn \thomkrates_pagenoteindex:nnn
{
  \index  { #2 | pn {#1}{#3} }
}
\cs_generate_variant:Nn \thomkrates_pagenoteindex:nnn { ene }
\ExplSyntaxOff
\makeatother

\makeindex[program=texindy,name=Names,title=Names]
\makeindex[program=texindy,name=Something,title=Something]
\makepagenote

\begin{document}
First index.\index[Something]{First index} 
    
Sentence.\pagenote{First pagenote without index.}
    
\clearpage
    
Emph index.\index[Something]{Emph index@\emph{Emph index}} 
    
pagenote and index.\pagenote{Second pagenote with index.\is[Something]{Index inside second pagenote}}
    
\clearpage
    
Third pagenote.\pagenote{\emph{Emph index word}.\is[Something]{Emph index@\emph{Emph index}}}
    
Namenindex\index[Names]{Namenindex}
    
\printnotes
    
\printindex[Something]
\printindex[Names]
  
\end{document}

verwandte Informationen