Gibt es einen Befehl, der die Seitenzahlen eines Indexeintrags angibt?

Gibt es einen Befehl, der die Seitenzahlen eines Indexeintrags angibt?

Gibt es einen Befehl, zum Beispiel so etwas wie \pages{pangolins}---, der die Seitenzahlen (und Seitenbereiche) eines Indexeintrags „pangolins“ darstellt? Wenn nicht, gibt es eine elegante Möglichkeit, einen solchen Befehl zu codieren, mit oder ohne Verwendung vorhandener Indexpakete wie imakeidx?

Hier ist ein Minimalbeispiel für die Verwendung eines solchen Befehls:

\documentclass{book}

\usepackage{imakeidx}
\makeindex

\begin{document}

Here is a paragraph about pangolins\index{pangolins}.  Pangolins are the only mammals covered in scales.

Here is a paragraph about meerkats.  Meerkats are immune to the venom of scorpions and snakes.

Here is another paragraph about pangolins.  A single pangolin can consume 20,000 ants per day.  If you want to learn more about pangolins, see page \pages{pangolins}.

\end{document}

Antwort1

Dies unterstützt auch Seitenbereiche und mehrere Seiten (Seitenbereiche sollten jedoch nicht mit Einzelverweisen vermischt werden). Es verwendet Barbara Beetons Idee in den Kommentaren zur Frage.

\documentclass{book}
\usepackage{imakeidx}
\usepackage{xparse}

\usepackage{lipsum}

\ExplSyntaxOn
\NewDocumentCommand{\readindex}{O{\c_sys_jobname_str}}
 {
  \group_begin:
  \cs_set_eq:NN \indexentry \readindexentry
  \file_if_exist_input:n { #1.idx }
  \group_end:
 }

\NewDocumentCommand{\pages}{m}
 {
  \prop_item:Nn \g_readindex_prop { #1 }
 }

\NewDocumentCommand{\readindexentry}{>{\SplitArgument{1}{|}}m m}
 {
  \readindex_process:nnn #1 { #2 }
 }

\prop_new:N \g_readindex_prop

\cs_new_protected:Nn \readindex_process:nnn
 {
  \str_case:nnF { #2 }
   {
    { ( }{ \readindex_start:nn { #1 } { #3 } }
    { ) }{ \readindex_end:nn   { #1 } { #3 } }
   }
   { \readindex_standard:nn { #1 } { #3 } }
 }

\cs_new_protected:Nn \readindex_standard:nn
 {
  \prop_if_in:NnTF \g_readindex_prop { #1 }
   {
    \prop_gput:Nnx \g_readindex_prop { #1 }
     { \prop_item:Nn \g_readindex_prop { #1 } , ~ #2 }
   }
   {
    \prop_gput:Nnn \g_readindex_prop { #1 } { #2 }
   }
 }

\cs_new_protected:Nn \readindex_start:nn
 {
  \prop_gput:Nnn \g_readindex_prop { #1 } { #2 }
 }
\cs_new_protected:Nn \readindex_end:nn
 {
  \prop_gput:Nnx \g_readindex_prop { #1 }
   { \prop_item:Nn \g_readindex_prop { #1 } -- #2 }
 }

\ExplSyntaxOff

\readindex
\makeindex % must be ***after*** \readindex

\begin{document}

For elephants, see \pages{elephants}.

Here we also talk about unicorns\index{unicorns}, treated on \pages{unicorns}.

Here is a paragraph about pangolins\index{pangolins}.  
Pangolins are the only mammals covered in scales.

Here is a paragraph about meerkats.  Meerkats are immune to 
the venom of scorpions and snakes.

Here is another paragraph about pangolins.  A single pangolin 
can consume 20,000 ants per day.  If you want to learn more about 
pangolins, see page \pages{pangolins}.

Now we talk about elephants\index{elephants|(}
\lipsum[1-10]
End of elephant talk\index{elephants|)}.

Again a unicorn\index{unicorns}.

\end{document}

Bildbeschreibung hier eingeben

Man könnte automatisch „Seite“-„Seiten“-Präfixe hinzufügen, basierend auf dem in der Eigenschaftenliste gespeicherten Wert.

Es werden mehrere Indizes unterstützt, \readindexfür jeden sollte jedoch ein bestimmter Befehl verwendet werden: \readindex[<index name>], wobei der Name der Dateiname der entsprechenden .idxDatei ist.

Antwort2

Angesichts der eherpräziseVersprechen, die Sie machen (nur ein Indexeintrag pro Element, nur eine Seitenreferenz usw.), können Sie den \indexBefehl einfach so ändern, dass er automatisch auch ein Etikett mit demselben Namen erstellt. Dann verwenden Sie einfach den normalen \pagerefBefehl, um darauf zu verweisen.

\documentclass{article}
\usepackage{makeidx}

\makeatletter
\def\@wrindex#1{%
\protected@write\@indexfile{}%
{\string\indexentry{#1}{\thepage}}%
\protected@write\@auxout{}%
{\string\newlabel{#1}{{\@currentlabel}{\thepage}}}%
\endgroup
\@esphack}
\makeatother

\makeindex

\begin{document}


If \index{pangolins} are referred to here, we can wait a little while and then

\clearpage


Refer to the place (\pageref{pangolins}) where we previously referred to them!

\printindex

\end{document}

Antwort3

Und um die Antworten abzurunden: Beim Ausprobieren verschiedener Optionen bin ich auf eine vereinfachte Methode gestoßen, bei der bestimmte Wörter mit und gekennzeichnet \phantomsectionund \labeldann \pagerefbei Bedarf die Seitenzahl mit eingefügt wird:

\documentclass{book}

\newcommand{\ps}{\phantomsection}

\begin{document}

Here is a paragraph about {\ps}pangolins\label{pangolins}.

Here is another paragraph about pangolins.  If you want to learn more about pangolins, see page \pageref{pangolins}.

\end{document}

Dies schien in den Fällen, die ich ausprobiert habe, zu funktionieren, aber ich habe nur ein begrenztes Verständnis davon, was hinter den Kulissen in LaTeX vor sich geht; dieser Ansatz könnte auf eine Art und Weise fehlerhaft sein, die mir nicht bewusst war. (Kritik ist erwünscht.)

verwandte Informationen