Como posso marcar todas as ocorrências de uma palavra-chave e fazer referência a todas as páginas que contêm a mesma tag?

Como posso marcar todas as ocorrências de uma palavra-chave e fazer referência a todas as páginas que contêm a mesma tag?

Estou escrevendo um plano de estudos com requisitos curriculares específicos. As atividades são marcadas com esses requisitos para demonstrar o alinhamento. Quero usar um sistema de rotulagem ou indexação para marcar as instâncias de alinhamento e, em seguida, referir-me a todas as páginas onde ocorre uma instância de alinhamento.

Existe um pacote que fará referência a todas as páginas que contêm o mesmo rótulo, como em um índice, mas me permitirá imprimir as páginas desse rótulo em um ponto arbitrário do documento?

Esta necessidade parece ter elementos de \label - \ref e de \index.

Não tenho um exemplo mínimo de trabalho, mas o que eu quero seria algo assim.

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

Responder1

Vejo que Nicola acabou de fazer uma versão de glossários, mas aqui está minha versão básica do makeindex.

insira a descrição da imagem aqui

Você quer apenas um estilo de índice que salve cada lista de páginas em uma definição, em vez de composição tipográfica, digamos foo.ist:

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

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

Então

pdflatex file
makeindex -s foo.ist file
pdflatex file

deve produzir a saída acima de um 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}

Responder2

Aqui está um exemplo que usaglossaries:

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

Processo de construção (assumindo que o arquivo é chamado myDoc.tex):

pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc

makeglossariesé um script Perl que chama makeindexcom todas as opções necessárias definidas.

Alternativamente, se você não tiver o Perl instalado, há um script Lua leve:

pdflatex myDoc
makeglossaries-lite myDoc
pdflatex myDoc

Qualquer processo de construção produz:

imagem do documento

O texto em vermelho indica um hiperlink. Após 1a descrição está o número da página onde a entrada foi referenciada.

Com o pacote de extensãoglossaries-extravocê pode suprimir a indexação automatizada individualmente com a noindexopção.

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

O processo de construção é o mesmo.

Você pode mudar o estilo. Por exemplo:

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

muitos estilos predefinidos para escolher.

Para referência futura, em algum momento haverá outra abordagem usandobib2glsem vez de makeglossaries/ makeglossaries-lite. Eu adicionei aqui caso alguém encontre essa pergunta posteriormente.

Crie um .bibarquivo chamado, 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.}
}

O documento myDoc.texagora é:

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

O processo de construção é:

pdflatex myDoc
bib2gls myDoc
pdflatex myDoc

Não há chamada para buscar e classificar makeindexsimultaneamente bib2glsas entradas do .bibarquivo e coletar os locais do .auxarquivo.

As diferenças aqui são o uso da recordopção e \GlsXtrLoadResources. O comando \makeglossariesnão é necessário e o glossário agora é impresso com \printunsrtglossaryem vez de \printglossary.

informação relacionada