Ich verwende die Pakete glossaries
und minitoc
. Für alle im Inhaltsverzeichnis gedruckten Glossare werden Minitocs generiert, z. B. mit der toc
Option für das Glossarpaket. Wenn man die Glossare vor den Kapiteln druckt, werden die noch nicht gedruckten Minitocs der Glossare anstelle der Kapitel-Minitocs gedruckt, wodurch die Minitocs in Bezug auf die Kapitel effektiv ausgeglichen werden.
Manuell kann dies durch Versetzen des mtc
Zählers der Minitocs gelöst werden, zB \addtocounter{mtc}{2}
wenn es 2 Glossare gibt (z.B. Akronyme + eigentliches Glossar).
Ich versuche, diese Verschiebung automatisch durchzuführen, um sie in ein Paket einzubetten. Zuerst wird die Anzahl der Glossare ermittelt. Das Glossarpaket definiert das Makro \@glo@types
als eine durch Kommas getrennte Liste der Namen der definierten Glossare. So kann ich die Anzahl der Glossare mit folgendem ausgeben:
\expandafter\listLength\expandafter{\@glo@types}
wobei das \listLength
Makro, inspiriert von diesemAntwortund basierend auf etoolbox, ist:
\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
Wenn ich jedoch versuche, den Wert im Befehl zu verwenden addtocounter
, funktioniert es nicht mehr. Für das gleiche Beispiel:
\expandafter\listLength\expandafter{\@glo@types}
druckt 2\addtocounter{mtc}{\expandafter\listLength\expandafter{\@glo@types}}
gibt einen „Fehlende Nummer“-Fehler aus. Ich habe es mit verschiedenen Kombinationen von\expandafter
vor/in diesem Befehl versucht, aber wie Sie vielleicht bemerkt haben, habe ich Probleme mit dem Erweiterungsprozess.
Wie kann ich also einen Zähler auf einen durch Erweiterung abgeleiteten Wert verrechnen?
Hier ist ein 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}
Antwort1
Ihr \listLength
Befehl funktioniert nicht durch reine Erweiterung; Sie sollten sagen
\newcommand*{\listLength}[1]{%
\setcounter{listlength@cnt}{0}%
\forcsvlist{\listlength@add}{#1}%
}
als Definition von \listLength
und dann
\listLength{\@glo@types}%
\addtocounter{mtc}{\value{listlength@cnt}}%
im Code.
Es gibt einen viel eleganteren Weg mit 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}
Wie Sie sehen, beträgt der Wert mtc
3, nachdem der Code ausgeführt wurde.
Der \clist_count:n
Befehl ist vollständig erweiterbar, Ihrer \listLength
nicht.