나는 glossaries
및 minitoc
패키지를 사용합니다. Minitocs는 목차에 인쇄된 모든 용어집에 대해 생성됩니다(예: toc
용어집 패키지 옵션 사용). 장 앞에 용어집을 인쇄하면 아직 인쇄되지 않은 용어집의 미니톡이 장 대신 인쇄되어 장과 관련하여 미니톡이 효과적으로 오프셋됩니다.
mtc
수동으로 이 문제는 minitoc의 카운터를 오프셋하여 해결할 수 있습니다 . 예 \addtocounter{mtc}{2}
를 들어 용어집이 2개인 경우(예: 두문자어 + 실제 용어집)
패키지에 포함시키기 위해 자동으로 해당 교대를 수행하려고합니다. 첫 번째는 용어집 수를 가져오는 것입니다. 용어집 패키지는 매크로를 \@glo@types
정의된 용어집 이름의 쉼표로 구분된 목록으로 정의합니다. 따라서
\expandafter\listLength\expandafter{\@glo@types}
다음을 사용하여 용어집 수를 인쇄할 수 있습니다.\listLength
을답변etoolbox를 사용하는 방법은 다음과 같습니다.
\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
그러나 명령에 해당 값을 사용하려고 하면 addtocounter
더 이상 작동하지 않습니다. 동일한 예의 경우:
\expandafter\listLength\expandafter{\@glo@types}
2를 인쇄합니다.\addtocounter{mtc}{\expandafter\listLength\expandafter{\@glo@types}}
"번호 누락" 오류가 출력됩니다. 해당 명령 이전/에서 다양한 조합을 시도했지만\expandafter
이해하셨겠지만 확장 프로세스에 문제가 있습니다.
그렇다면 확장으로 파생된 값에 대한 카운터를 어떻게 상쇄할 수 있습니까?
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}
답변1
귀하의 \listLength
명령은 순수 확장으로는 작동하지 않습니다. 너는 말해야 해
\newcommand*{\listLength}[1]{%
\setcounter{listlength@cnt}{0}%
\forcsvlist{\listlength@add}{#1}%
}
\listLength
and then 의 정의에 따르면
\listLength{\@glo@types}%
\addtocounter{mtc}{\value{listlength@cnt}}%
코드에서.
다음과 같은 훨씬 더 매끄러운 방법이 있습니다 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}
보시다시피 mtc
코드가 실행된 후의 값은 3입니다.
명령 은 \clist_count:n
완전히 확장 가능하지만 그렇지 \listLength
않습니다.