自动统计词汇表条目数

自动统计词汇表条目数

我想全局自动地对文档的所有词汇表条目进行计数。我可以扩展宏\glossaryentry来执行此操作,而无需引入新定义的宏吗?我听说过类似\newcommandx或类似的方法。计数器必须持续存在,.aux以便我可以在文档正文中使用它。

答案1

词汇表的数量在参考中被记住。这里使用numglossaries包,因为它提供了。在下一页发货时使用延迟写入。在文档末尾没有其他页面,因此必须立即进行写入。zref\zref@wrapper@immediate\label

编号本身取决于您使用的词汇表包。这里作为示例,我已修补\@wrglossary将实际词汇表条目写入.glo文件中。

\documentclass{article}
\usepackage{zref-base}

\makeatletter
\newcounter{numglossaries}
\newcommand*{\numglossaries}{%
  \zref@extract{numglossaries}{default}%
  \zref@refused{numglossaries}%
}
\newcommand*{\write@numglossaries}{%
  \begingroup
    \zref@setcurrent{default}{\the\value{numglossaries}}%
    \zref@wrapper@immediate{%
      \zref@labelbyprops{numglossaries}{default}%
    }%
  \endgroup
}
\AtEndDocument{\write@numglossaries}

% The counting depends on the package that is used for glossaries.
\@ifdefinable{org@wrglossary}{%
  \let\org@wrglossary\@wrglossary
  \renewcommand*{\@wrglossary}{%
    \stepcounter{numglossaries}%
    \org@wrglossary
  }%
}
\makeatother

\makeglossary

\begin{document}

The number of glossaries is \numglossaries.

\glossary{A}
\glossary{B}
\glossary{C}

\end{document}

结果

扩大的视野

其他元素也可以按以下方式计算:

\documentclass{article}
\usepackage{zref-base}
\usepackage{etoolbox}

\makeatletter
\newcommand*{\numberelement}[1]{%
  \newcounter{num#1}
  \expandafter\newcommand\expandafter*\csname num#1\endcsname{%
    \zref@extract{num#1}{default}%
    \zref@refused{num#1}%
  }%
  \expandafter
  \newcommand\expandafter*\csname write@num#1\endcsname{%
    \begingroup
      \zref@setcurrent{default}{\the\value{num#1}}%
      \zref@wrapper@immediate{%
        \zref@labelbyprops{num#1}{default}%
      }%
    \endgroup
  }%
  \expandafter\AtEndDocument\csname write@num#1\endcsname
}

\numberelement{glossaries}
\numberelement{figures}
\numberelement{tables}

\pretocmd\@wrglossary{\stepcounter{numglossaries}}{}{}
\pretocmd\figure{\stepcounter{numfigures}}{}{}
\pretocmd\table{\stepcounter{numtables}}{}{}

\makeatother

\iffalse
% The counting depends on the package that is used for glossaries.
\@ifdefinable{org@wrglossary}{%
  \let\org@wrglossary\@wrglossary
  \renewcommand*{\@wrglossary}{%
    \stepcounter{numglossaries}%
    \org@wrglossary
  }%
}
\fi
\makeatother

\makeglossary

\begin{document}

\begin{table}
  \centering
  \begin{tabular}{ll}
    Glossary entries: & \numglossaries\\
    Figures: & \numfigures\\
    Tables: & \numtables
  \end{tabular}
  \caption{Statistics}
\end{table}

\glossary{A}
\glossary{B}
\glossary{C}

\end{document}

扩展结果

相关内容