- - 更新 - -
有什么意见吗,这是包中的一个错误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}