ccaption
uses an elementary (and mostly feasible) way of producing duplicate captions for the same float. The main function at play here is \contcaption
:
\newcommand{\contcaption}{%
\addtocounter{\@captype}{\m@ne}%
\refstepcounter{\@captype}%
\@contcaption\@captype}
It steps the regular float counter back by one, sets a reference and then continues a call to set the actual caption text. On the .aux
-file side, this leads to two cross-reference entries with the same hyperlink anchor name... something that hyperref
doesn't enjoy. True, without hyperref
, this problem won't be noticeable.
A way around this is to use an alias counter, provided by the aliascnt
package, and using it as part of \contcaption
:

\documentclass[UTF8]{ctexart}
\usepackage{aliascnt,ccaption}% http://ctan.org/pkg/{aliascnt,ccaption}
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\newaliascnt{figurealt}{figure}% New alias counter for figure float
\aliascntresetthe{figurealt}
\makeatletter
\renewcommand{\contcaption}{%
\expandafter\addtocounter\expandafter{\@captype alt}{\m@ne}% Step alias cntr back
\expandafter\refstepcounter\expandafter{\@captype alt}% Make reference
\@contcaption\@captype}
\makeatother
\begin{document}
Figures~\ref{fig1} and~\ref{fig2}.
\begin{figure}
\bicaption[fig1]{}{abc}{Fig.}{English caption}
\end{figure}
\begin{figure}
\bicaption[fig2]{}{xyz}{Fig.}{English caption}
\end{figure}
\end{document}
The above MWE provides the alias figurealt
which should work in tandem with figure
, using it as the replacement reference for the second (continued) caption rather than the traditional float counter.
A similar alias can be created for other floats (like table
, using tablealt
).
bicaption
package works fine withhyperref
, out-of-the-box.