带有自定义计数器的 caption 包的副作用

带有自定义计数器的 caption 包的副作用

- - 更新 - -

有什么意见吗,这是包中的一个错误caption还是必须以\refstepcounter某种方式进行保护?

- - \更新 - -

我有以下 MWE:

\documentclass{book}

\usepackage{xparse}
%\usepackage{caption}

\newcounter{mycounter} % make a counter
\setcounter{mycounter}{0} % init the counter

\NewDocumentCommand \mymark {} {%
\refstepcounter{mycounter}%
\textsuperscript{\themycounter}}

\begin{document}
%
one\mymark

\begin{figure}
\caption{two\mymark}
\label{lab:1}
\end{figure}%

three\mymark

\end{document}

如果没有标题包,则会产生

无标题

但如果我添加包

带标题

为什么编号不正确?

答案1

caption包对标题进行了两次排版。

您可以添加一些测试来查看您是否在标题中,如果是,则仅在第一次执行步进。我\caption@beginhook在排版标题时使用它来注入必要的代码。

\documentclass{book}

\usepackage{xparse}
\usepackage{caption}

\newcounter{mycounter} % make a counter

\NewDocumentCommand\mymark{}{%
  \ifandyincaption
    \ifandysteppedcounter
    \else
      \refstepcounter{mycounter}%
      \global\andysteppedcountertrue
    \fi
  \else
    \refstepcounter{mycounter}%
  \fi
  \textsuperscript{\themycounter}%
}
\newif\ifandyincaption
\newif\ifandysteppedcounter

\makeatletter
\AtBeginDocument{%
  \g@addto@macro\caption@beginhook{%
    \andyincaptiontrue
    \global\andysteppedcounterfalse
  }%
}
\makeatother


\begin{document}

one\mymark

\begin{figure}
\caption{two\mymark}
\label{lab:1}
\end{figure}

three\mymark (\ref{lab:1})

\end{document}

在此处输入图片描述

相关内容