在章节标题中使用 totcount 包的 \total

在章节标题中使用 totcount 包的 \total

我正在追踪我审阅过的所有期刊论文,当然我正在使用 LaTeX。

我审阅过不同的期刊,并且我有不同的表格和计数器来记录论文。每个期刊都有自己的部分——类似于以下内容:

IEEE 电力系统学报 (2)

  1. 第一篇论文的标题,我的决定,编辑的决定。
  2. 第二篇论文的标题,我的决定,编辑的决定。

IEEE 电力输送学报 (1)

  1. 第一篇论文的标题,我的决定,编辑的决定。

我已经定义了环境和命令以尽可能地实现自动化。我希望能够在文档开头显示论文数量;因此,我使用了totcount包。然后只需编写类似这样的代码(在将 TPWRD 定义为“总计”计数器之后)

Total number of TPWRD papers: \total{TPWRD}

可以解决问题。但我还想在章节标题中显示此数字,如上括号中所示,并在目录中显示。我的问题是,将其用作\total章节/小节标题的一部分会给我错误“未定义的控制序列”。这种情况发生在没有任何参数化的情况下。也就是说,即使

\section{Simple Section \total{TPWRD}} 

会导致错误。使用

\section[Simple Section]{Simple Section \total{TPWRD}}

通过仅在章节标题中显示计数器值而不在目录中显示计数器值来避免此问题。我怎样才能同时拥有两者?

我也尝试过\protect\total{TPWRD},但导致另一个错误:Missing number, treated as zero

以下是 MWE:

\documentclass{article}

\usepackage{hyperref}  

\usepackage{totcount}
\newtotcounter{TPWRD}

\begin{document}

\tableofcontents

\section{Journals \total{TPWRD}}  
\stepcounter{TPWRD}

\end{document}

答案1

如果没有 ,您的 MWE 将无法工作\protect。之前我不知道您正在使用hyperref。您的 MWE 的工作形式如下:

\documentclass{article}

\usepackage{hyperref}   % It does work even with hyperref.

\usepackage{totcount}
\newtotcounter{TPWRD}

\begin{document}

\tableofcontents

\section{Journals \texorpdfstring{\protect\total{TPWRD}}{}}  % Works only with  \protect and also with  hyperref
\stepcounter{TPWRD}

\stepcounter{TPWRD}

\stepcounter{TPWRD}

\end{document}

在此处输入图片描述

附言:通过在您的问题中添加完整的 MWE,您将帮助我们避免浪费时间,并且您获得准确答案的可能性也会增加。

答案2

该命令的参数\section不仅可用于生成toc条目等章节标题,running headings当我们使用脆弱的命令内部的命令\section,在不同文件/位置(如 .toc 等)之间移动时,它会被破坏。该命令\total不是一个强大的命令(即,它很脆弱)。自然,当它用于移动参数(如)时 \section,它会被破坏,并且会出现错误。为了防止这种情况,我们必须使用\protect脆弱的命令,如

\protect\total{TPWRD}

当我们使用 时\section[Simple Section]{Simple Section \total{TPWRD}},短标题将在目录中移动,而主要参数将仅用于生成章节标题。因此不会出现错误。但目录中的条目不会包含您想要的任何内容的总数。

答案3

\totalin的定义totcount.sty远非完美,但在章节标题等移动参数之外效果很好。

在这些情况下,我建议您使用不同的命令:

\makeatletter
\newcommand\stotal[1]{%
  \ifnum\value{#1@totc}=\m@ne
    ??%
  \else
    \number\value{#1@totc}%
  \fi
}
\makeatother

以便

\section{Journal \stotal{TPWRD}}

不管有没有 都可以工作hyperref。但如果数字仍未定义,则不会发出警告。

相关内容