\index en \pagenote con opción splitindex (para índice múltiple)

\index en \pagenote con opción splitindex (para índice múltiple)

¿Cómo funciona \expandafter aquí? codeEs necesario completar lo siguiente . Supongo que algunos de ustedes podrían hacer esto con facilidad, con suerte.

La intención es: propagar la letra n(o cualquier otra, for Notesde pagenotedentro de index) con pagenotenumberfor \index[]{}dentro de \pagenote{}.

El codese deriva de \index nota al pie interior: ¿Cómo propagar correctamente el número de nota al pie con el paquete de índice?

\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}

Esta funcionalidad parece una función estándar para la indexación en la composición tipográfica de libros moderna, pero aún no se reconoce con LaTeX. Sería fantástico si alguien pudiera apoyar esto y presentar una solución.

Respuesta1

No estoy del todo seguro de lo que quieres. (Recuerdo vagamente las preguntas anteriores, pero no hay mucho que refresque mi memoria en esta).

Lo siguiente genera números de notas y páginas en los índices sin alterar el contenido del documententorno. Si ese es el comportamiento objetivo, no estoy seguro.

El problema inicial con su código es que ha definido \pagenoteindexque requiere 3 argumentos, pero solo le pasa 2. Supongo que quiere un argumento opcional aquí, porque le está pasando uno a \is, por lo que necesitamos 4 casos en lugar de 2. :

  1. estamos dentro de una nota de página y tenemos un argumento opcional;
  2. estamos dentro de una nota de página sin una;
  3. estamos afuera con uno;
  4. Estamos afuera sin uno.

expl3hace que la expansión sea (relativamente) sencilla. Es, al menos, mucho menos difícil de manejar que hacer malabarismos con cadenas de \expandafters que amenazan con retroceder al infinito. Definimos 2 funciones para los casos (1) y (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} }
}

Si usa este código, tenga en cuenta que esto esnola forma correcta de hacer esto. Como se explica a continuación, aquí estamos omitiendo los mecanismos estándar.

Luego le decimos a LaTeX que nos gustaría variantes que deberían recibir un argumento preexpandido en segundo o primer lugar:

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

Esto significa que LaTeX expandirá esos argumentos antes de pasarlos a nuestras funciones base, para que nosotros no tengamos que hacerlo. Entonces ahora podemos definir una versión de \ispara manejar nuestros 4 casos:

\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
}

Debido a que no entiendo el formato xindydeseado (a diferencia de makeindex) y no pude encontrar la documentación relevante (que supongo que existe en alguna parte), dejé de intentar descubrir cómo hacer que el número de página aparezca cuando \hyperindexformatse usa en el .idxen lugar de \hyperpage.

Entonces, en este punto usamos un enfoque de fuerza bruta e ignorancia, simplemente agregando el número de página directamente y evitando los mecanismos habituales:

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

También modificamos nuestra definición \pnpara utilizar el objetivo que agregamos en \is:

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

números en índices con un comportamiento aparentemente plausible

Código completo:

\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}

información relacionada