¿Cómo puedo etiquetar todas las apariciones de una palabra clave y luego hacer referencia a todas las páginas que contienen la misma etiqueta?

¿Cómo puedo etiquetar todas las apariciones de una palabra clave y luego hacer referencia a todas las páginas que contienen la misma etiqueta?

Estoy redactando un programa de estudios con requisitos curriculares específicos. Las actividades están etiquetadas con estos requisitos para demostrar la alineación. Quiero usar un sistema de etiquetado o indexación para etiquetar las instancias de alineación y luego hacer referencia a todas las páginas donde se produce una instancia de alineación.

¿Existe un paquete que haga referencia a todas las páginas que contienen la misma etiqueta, como en un índice, pero que me permita imprimir las páginas de esa etiqueta en un punto arbitrario del documento?

Esta necesidad parece tener elementos de \label - \ref y de \index.

No tengo un ejemplo de trabajo mínimo, pero lo que quiero se vería así.

\documentclass{article}
\begin{document}
\begin{description}
\item[CR1] This is a description of a requirement. \\ See page <LIST OF PAGES LABELED WITH CR1>
\item[CR2] This is a description of another requirement. \\ See page <LIST OF PAGES LABELED WITH CR2>
\end{description}

\section{Section 1}
This is an activity aligned with CR1. (\label{CR1} or \index{CR1})

This is an activity aligned with CR2. (\label{CR2} or \index{CR2})
\section{Section 2}
This is another activity aligned with CR1. (\label{CR1} or \index{CR1})

\end{document}

Respuesta1

Veo que Nicola acaba de hacer una versión de glosario, pero aquí está mi versión básica de makeindex.

ingrese la descripción de la imagen aquí

Solo desea un estilo de índice que guarde cada lista de páginas en una definición en lugar de escribirla, por ejemplo foo.ist:

preamble
"\n\\makeatletter{"
postamble
"}\n\\makeatother\n"

item_0 "}\n\\@namedef{"
delim_0 "}{"

Entonces

pdflatex file
makeindex -s foo.ist file
pdflatex file

debería producir el resultado anterior a partir de un documento como

\documentclass{article}
\usepackage{makeidx}
\makeindex
\def\listfor#1{\csname #1\endcsname}
\begin{document}

\printindex

\begin{description}
\item[CR1] This is a description of a requirement. \\ See pages \listfor{CR1}
\item[CR2] This is a description of another requirement. \\ See pages \listfor{CR2}
\end{description}

\section{Section 1}
This is an activity aligned with CR1\index{CR1}.

aa
\clearpage

This is an activity aligned with CR2\index{CR2}.
\section{Section 2}
This is another activity aligned with CR1\index{CR1}.

\section{Section 3}
This is an activity aligned with CR1\index{CR1}.


aa
\clearpage

This is an activity aligned with CR2\index{CR2}.
\section{Section 4}
This is another activity aligned with CR1\index{CR1}.


aa
\clearpage

aa
\clearpage

This is an activity aligned with CR2\index{CR2}.
\section{Section 4}
This is another activity aligned with CR1\index{CR1}.

\end{document}

Respuesta2

He aquí un ejemplo que utilizaglossaries:

\documentclass{article}

\usepackage[colorlinks]{hyperref}% optional but if needed must come 
                                 % before glossaries.sty
\usepackage[nopostdot]{glossaries}

\makeglossaries

% syntax: \newglossaryentry{label}{options}
\newglossaryentry{CR1}{name={CR1},
 description={This is a description of a requirement.}}

% Or
% syntax: \longnewglossaryentry{label}{options}{description}

\longnewglossaryentry{CR2}{name={CR2}}%
{This is a description of another requirement.

With a paragraph break.
}

\begin{document}
\printglossary[title={Requirements}]

\section{Section 1}
This is an activity aligned with CR1.\glsadd{CR1}% index only

This is an activity aligned with \gls{CR2}.% index and show name

\section{Section 2}

This is an activity aligned with \gls{CR1}.% index and show name

\end{document}

Proceso de compilación (suponiendo que el archivo se llame myDoc.tex):

pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc

makeglossarieses un script Perl que llama makeindexcon todos los modificadores necesarios configurados.

Alternativamente, si no tienes Perl instalado, hay un script Lua ligero:

pdflatex myDoc
makeglossaries-lite myDoc
pdflatex myDoc

Cualquiera de los procesos de construcción produce:

imagen del documento

El texto rojo indica un hipervínculo. El1 de la descripción está el número de página donde se hizo referencia a la entrada.

Con el paquete de extensiónglossaries-extraPuede suprimir la indexación automatizada de forma individual con la noindexopción.

\documentclass{article}

\usepackage[colorlinks]{hyperref}% optional but if needed must come 
                                 % before glossaries.sty
\usepackage{glossaries-extra}

\makeglossaries

% syntax: \newglossaryentry{label}{options}
\newglossaryentry{CR1}{name={CR1},
 description={This is a description of a requirement.}}

% Or
% syntax: \longnewglossaryentry{label}{options}{description}

\longnewglossaryentry{CR2}{name={CR2}}%
{This is a description of another requirement.

With a paragraph break.
}

\begin{document}
\printglossary[title={Requirements}]

\section{Section 1}
This is an activity aligned with CR1.\glsadd{CR1}% index only

This is an activity aligned with \gls{CR2}.% index and show name

\newpage

\section{Section 2}

This is an activity aligned with \gls{CR1}.% index and show name

Some minor reference to \gls[noindex]{CR2} that doesn't need
indexing.

\end{document}

El proceso de construcción es el mismo.

Puedes cambiar el estilo. Por ejemplo:

\printglossary[title={Requirements},style=index]

Haymuchos estilos predefinidos para elegir.

Para referencia futura, en algún momento pronto habrá otro enfoque que utilicebib2glsen lugar de makeglossaries/ makeglossaries-lite. Lo agregué aquí en caso de que alguien encuentre esta pregunta más adelante.

Cree un .bibarchivo llamado, digamos requirements.bib:

@entry{CR1,
  name={CR1},
  description={This is a description of a requirement.}
}

@entry{CR2,
  name={CR2},
  description={This is a description of another requirement.

  With a paragraph break.}
}

El documento myDoc.texahora es:

\documentclass{article}

\usepackage[colorlinks]{hyperref}% optional but if needed must come 
                                 % before glossaries.sty
\usepackage[record]{glossaries-extra}

\GlsXtrLoadResources[src={requirements}]% data in requirements.bib

\begin{document}
\printunsrtglossary[title={Requirements}]

\section{Section 1}
This is an activity aligned with CR1.\glsadd{CR1}% index only

This is an activity aligned with \gls{CR2}.% index and show name

\newpage

\section{Section 2}

This is an activity aligned with \gls{CR1}.% index and show name

Some minor reference to \gls[noindex]{CR2} that doesn't need
indexing.

\end{document}

El proceso de construcción es:

pdflatex myDoc
bib2gls myDoc
pdflatex myDoc

No hay llamada a makeindexya que bib2glssimultáneamente busca y ordena las entradas del .bibarchivo y recopila las ubicaciones del .auxarchivo.

Las diferencias aquí son el uso de la recordopción y \GlsXtrLoadResources. El comando \makeglossariesno es necesario y el glosario ahora se imprime \printunsrtglossarycon \printglossary.

información relacionada