\index in \pagenote 帶有 splitindex 選項(對於多個索引)

\index in \pagenote 帶有 splitindex 選項(對於多個索引)

\expandafter 在這裡如何運作?code需要完成以下內容。我想你們中的一些人可能會輕鬆地做到這一點,希望如此。

目的是:將字母n(或任何其他字母,for Notesof傳播pagenote到 中index)與pagenotenumberfor\index[]{}\pagenote{}

code源自於 \index inside footnote:如何使用索引包正確傳播腳註編號?

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

此功能似乎是現代書籍排版中索引的標準功能,但尚未被 LaTeX 識別。如果有人可以支持這一點並提出解決方案,那就太好了。

答案1

不完全確定你想要什麼。 (我依稀記得之前的問題,但這個問題沒有太多可以刷新我的記憶。)

以下程式碼在索引中產生註解和頁碼,而不改變document環境的內容。我不確定這是否是目標行為。

您的程式碼的最初問題是您已定義\pagenoteindex需要 3 個參數,但只傳遞 2 個參數\is。 :

  1. 我們在頁面註釋中並且有一個可選參數;
  2. 我們在一頁註釋中,沒有註釋;
  3. 我們和一個人在外面;
  4. 我們在外面沒有人。

expl3讓擴充(相對)簡單。至少,它比玩弄\expandafter可能回歸無限大的 s 鏈要簡單得多。我們為情況 (1) 和 (2) 定義 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} }
}

如果使用此程式碼,請注意這是不是執行此操作的正確方法。如下所述,我們在這裡繞過了標準機制。

然後我們告訴 LaTeX 我們想要應該在第二或第一位置接收預先擴展參數的變體:

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

這意味著 LaTeX 將在將這些參數傳遞給我們的基底函數之前對其進行擴展,因此我們不必這樣做。現在我們可以定義一個版本來\is處理我們的 4 種情況:

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

因為我不明白xindy想要的格式(與 相對)並且找不到相關文件(我假設存在於某處),所以我放棄了嘗試弄清楚如何在使用makeindex時顯示頁碼不是。\hyperindexformat.idx\hyperpage

所以此時我們使用暴力和無知的方法,簡單地直接添加頁碼並繞過通常的機制:

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

我們也修改了定義\pn以利用我們新增的目標\is

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

指數中的數字具有看似合理的行為

完整程式碼:

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

相關內容