Yo uso los paquetes glossaries
y minitoc
. Los minitocs se generan para todos los glosarios impresos en la tabla de contenido, por ejemplo, con la toc
opción para el paquete de glosarios. Cuando se imprimen los glosarios antes de los capítulos, se imprimen los minitocs de los glosarios aún no impresos en lugar de los de los capítulos, compensando efectivamente los minitocs con respecto a los capítulos.
Manualmente, esto se puede solucionar compensando el mtc
contador de los minitocs, por ejemplo \addtocounter{mtc}{2}
si hay 2 glosarios (acrónimos + glosario real, por ejemplo).
Estoy intentando hacer ese cambio automáticamente para incrustarlo en un paquete. Lo primero es obtener la cantidad de glosarios. El paquete de glosarios define la macro \@glo@types
como una lista separada por comas de los nombres de los glosarios definidos. Así, puedo imprimir el número de glosarios con:
\expandafter\listLength\expandafter{\@glo@types}
donde\listLength
macro, inspirada en esterespuestay confiando en etoolbox, es:
\makeatletter
\newcounter{listlength@cnt}
\newcommand*{\listlength@add}[1]{\stepcounter{listlength@cnt}}
\newcommand*{\listLength}[1]{%
\setcounter{listlength@cnt}{0}%
\forcsvlist{\listlength@add}{#1}%
\thelistlength@cnt%
}
\makeatother
Sin embargo, cuando intento utilizar el valor en el addtocounter
comando, ya no funciona. Para el mismo ejemplo:
\expandafter\listLength\expandafter{\@glo@types}
impresiones 2\addtocounter{mtc}{\expandafter\listLength\expandafter{\@glo@types}}
genera un error de "Número faltante". Intenté con diferentes combinaciones de\expandafter
antes/en ese comando, pero como habrás notado, tengo problemas con el proceso de expansión.
Entonces, ¿cómo puedo compensar un contador con un valor derivado de la expansión?
Aquí hay un MWE:
\documentclass{report}
\usepackage[nohints]{minitoc}
\usepackage{etoolbox}
\usepackage[acronym,xindy,toc]{glossaries}
\makeglossaries
\begin{filecontents}{glossary.tex}
\newacronym{nraa}{NRAA}{Not Really An Acronym}
\newglossaryentry{stuff}{
name={stuff},
description={a test}%
}
\end{filecontents}
\loadglsentries{glossary}
% macro to count args of csv-list
\makeatletter
\newcounter{listlength@cnt}
\newcommand*{\listlength@add}[1]{\stepcounter{listlength@cnt}}
\newcommand*{\listLength}[1]{%
\setcounter{listlength@cnt}{0}%
\forcsvlist{\listlength@add}{#1}% % from etoolbox
\thelistlength@cnt%
}
\makeatother
\begin{document}
\dominitoc % Generating mini-toc
\tableofcontents
\glsaddall % adding all glossary entries for the test
\printglossary[type=\acronymtype]
\printglossary[type=main]
\addtocounter{mtc}{2} % manual offset
\newpage
\makeatletter
number of glossaries:
\expandafter{\expandafter\listLength\expandafter{\@glo@types} % prints 2
%\addtocounter{mtc}{\expandafter\listLength\expandafter{\@glo@types}}
% results in error, missing number
\makeatother
\chapter{chap1}
chapter's toc is:
\minitoc
Content is:
\section{s1}
\subsection{s11}
\end{document}
Respuesta1
Tu \listLength
comando no funciona por pura expansión; deberías decir
\newcommand*{\listLength}[1]{%
\setcounter{listlength@cnt}{0}%
\forcsvlist{\listlength@add}{#1}%
}
como la definición de \listLength
y luego
\listLength{\@glo@types}%
\addtocounter{mtc}{\value{listlength@cnt}}%
en el código.
Hay una manera mucho más ingeniosa con expl3
:
\documentclass{report}
\usepackage[nohints]{minitoc}
\usepackage{xparse}
\usepackage[acronym,xindy,toc]{glossaries}
\makeglossaries
\begin{filecontents}{glossary.tex}
\newacronym{nraa}{NRAA}{Not Really An Acronym}
\newglossaryentry{stuff}{
name={stuff},
description={a test}%
}
\end{filecontents}
\loadglsentries{glossary}
% macro to count args of csv-list
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\listLength}{m}
{
\clist_count:n { #1 }
}
\ExplSyntaxOff
\begin{document}
\dominitoc % Generating mini-toc
\tableofcontents
\glsaddall % adding all glossary entries for the test
\printglossary[type=\acronymtype]
\printglossary[type=main]
\addtocounter{mtc}{2}% manual offset
\newpage
number of glossaries:
\makeatletter
\listLength{\@glo@types} % prints 2
\addtocounter{mtc}{\listLength{\@glo@types}}
\themtc
\makeatother
\chapter{chap1}
chapter's toc is:
\minitoc
Content is:
\section{s1}
\subsection{s11}
\end{document}
Como puede ver, el valor de mtc
es 3, una vez ejecutado el código.
El \clist_count:n
comando es completamente expandible, el tuyo \listLength
no lo es.