\index em \pagenote com opção splitindex (para índice múltiplo)

\index em \pagenote com opção splitindex (para índice múltiplo)

Como \expandafter funciona aqui? O seguinte codeprecisa ser concluído. Presumo que alguns de vocês possam fazer isso com facilidade, espero.

A intenção é: propagar a letra n(ou qualquer outra, for Notesof pagenoteinto the index) com o pagenotenumberfor \index[]{}inside \pagenote{}.

O codeé derivado de \index dentro da nota de rodapé: Como propagar o número da nota de rodapé corretamente com o pacote index?

\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 funcionalidade parece ser uma função padrão para indexação na composição tipográfica de livros modernos, mas ainda não é reconhecida pelo LaTeX. Seria ótimo se alguém pudesse apoiar isso e apresentar uma solução.

Responder1

Não tenho certeza do que você deseja. (Lembro-me vagamente das perguntas anteriores, mas não há muito para refrescar minha memória nesta.)

O seguinte gera números de notas e páginas nos índices sem alterar o conteúdo do documentambiente. Se esse é o comportamento alvo, não tenho certeza.

O problema inicial com o seu código é que você definiu \pagenoteindexcomo exigir 3 argumentos, mas está passando apenas 2. Suponho que você queira um argumento opcional aqui, porque está passando um para \is, então precisamos de 4 casos em vez de 2 :

  1. estamos dentro de uma nota de página e temos um argumento opcional;
  2. estamos dentro de uma nota de página sem nota;
  3. estamos lá fora com um;
  4. estamos lá fora sem um.

expl3torna a expansão (relativamente) simples. É, pelo menos, muito menos complicado do que fazer malabarismos com cadeias de \expandafters que ameaçam regredir ao infinito. Definimos 2 funções para os casos (1) e (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} }
}

Se estiver usando este código, observe que este énãoa maneira correta de fazer isso. Conforme explicado abaixo, estamos ignorando os mecanismos padrão aqui.

Então dizemos ao LaTeX que gostaríamos de variantes que deveriam receber um argumento pré-expandido em segundo ou primeiro lugar:

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

Isso significa que o LaTeX irá expandir esses argumentos antes de passá-los para nossas funções base, então não precisamos fazer isso. Então agora podemos definir uma versão para \islidar com nossos 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
}

Como não entendo o formato xindydesejado (em oposição a makeindex) e não consegui encontrar a documentação relevante (que presumo que exista em algum lugar), desisti de tentar descobrir como fazer com que o número da página aparecesse quando \hyperindexformatfor usado em o .idxem vez de \hyperpage.

Então, neste ponto, usamos uma abordagem de força bruta e ignorância, simplesmente adicionando o número da página diretamente e ignorando os mecanismos usuais:

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

Também modificamos nossa definição \pnpara utilizar o alvo que adicionamos \is:

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

números em índices com comportamento de aparência plausível

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}

informação relacionada