Crie duas listas de materiais semi-independentes, que compartilham seu contador

Crie duas listas de materiais semi-independentes, que compartilham seu contador

Usei com sucesso \newlistof{listofA}{A}{List of As}e \newlistentry{mycounter}{A}{0}para criar uma lista de A, cujo conteúdo é adicionado usando \addcontentsline{A}{mycounter}{\protect\numberline{\themycounter}...}. Agora quero ter uma lista de B que compartilhe o contador mycounter. Eu tenho \newlistof{listofB}{B}{List of Bs}. \newlistentry{mycounter}{B}{0}falha com alguns Command ... already defined. Sem ele, usando \addcontentsline{B}{mycounter}{...}, ambosas listas ficam vazias. O que estou fazendo de errado?

Responder1

Com o xassoccntpacote é possível acoplar vários contadores, ou seja, se um dos contadores for escalonado, outros também serão escalonados.

Declare um grupo de contadores com algum nome 'arbitrário' e atribua a eles os contadores relevantes.

Usar o mesmo contador não é possível, pois \newlistofespera um contador inexistente, digamos, fooe gera vários comandos a partir do nome do contador.

\documentclass{article}

\usepackage{tocloft}
\usepackage{xassoccnt}

\usepackage{blindtext}


\newcommand{\listoffooname}{List of foo environments}
\newcommand{\listoffoobarname}{List of foobar environments}

\newlistof[section]{foo}{foo}{\listoffooname}
\newlistof[section]{foobar}{foobar}{\listoffoobarname}

\DeclareCoupledCountersGroup{foofoobar}
\DeclareCoupledCounters[name=foofoobar]{foo,foobar}


% Dummy usage of the counter and generating a 'ToC' entry
\newenvironment{foo}[1]{%
  \refstepcounter{foo}
  \par\noindent\textbf{Foo \thefoo. #1}
  \addcontentsline{foo}{foo}{\protect\numberline{\thefoo} #1}\par%
}{\hrule}

\newenvironment{foobar}[1]{%
  \refstepcounter{foobar}
  \par\noindent\textbf{Foobar \thefoobar. #1}
  \addcontentsline{foobar}{foobar}{\protect\numberline{\thefoobar} #1}\par%
}{\hrule}



\begin{document}
\listoffoo
\listoffoobar


\section{Where foo starts}

\begin{foo}{A nice foo}

\blindtext[2]
\end{foo}

\begin{foobar}{A nice foobar}

\blindtext[2]
\end{foobar}


\begin{foo}{A nice foo again}

\blindtext[2]
\end{foo}

\begin{foo}{A nice foo again}

\blindtext[2]
\end{foo}

\begin{foobar}{A nice foobar again}

\blindtext[2]
\end{foobar}




\section{Where foo ends}

\begin{foo}{Another nice foo too}

\blindtext[1]
\end{foo}

\begin{foobar}{Another nice foobar}

\blindtext[2]
\end{foobar}




\end{document}

insira a descrição da imagem aqui

informação relacionada