如何交叉引用手动递增计数器

如何交叉引用手动递增计数器

如何使命令\ref{pb:p1}起作用。

\documentclass[onecolumn,a4paper,10pt]{article}
\usepackage{tcolorbox}
\usepackage{geometry}
\geometry{left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm}
\usepackage{hyperref}

\newcounter{problem}[section]
\newcommand{\rproblem}[1]
{
\stepcounter{problem}
\addcontentsline{toc}{subsection}{\textbf{Problem \arabic{problem}}}
\vspace{1em}
\begin{tcolorbox}[colback=black!20!white,colframe=black!50!white,title=\textbf{Problem \arabic{problem}}]
#1
\end{tcolorbox}
}

\begin{document}

\rproblem{\label{pb:p1}
My problem xxx.
}

This is answer \ref{pb:p1}.

\end{document}

答案1

我建议使用\newtcolorbox宏来创建环境rproblem,或者\newtcbox生成一个基本与\rproblemOP 的宏一样的框宏

计数器从定义开始就用作,problem并且use counter=problemlist of=toc框添加到通常的 ToC,作为小节条目,因为\l@problem被定义为\l@subsection

标签在\rproblemwith的可选参数中给出label=...

我提供了两种方法:使用\newtcbox\newtcolorbox

\documentclass[onecolumn,a4paper,10pt]{article}
\usepackage{tcolorbox}
\usepackage{geometry}
\geometry{left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm}
\usepackage{hyperref}

\newcounter{problem}[section]

\makeatletter
\let\l@problem\l@subsection
\makeatother

\tcbset{rproblem/.style={colback=black!20!white,
    colframe=black!50!white,
    title=\textbf{Problem \theproblem},
    before skip=1em}
}

\newtcbox[use counter=problem,number within={section},list inside=toc]{\rproblem}[1][]{
  rproblem,
  #1
}

\newtcolorbox[use counter=problem,number within={section},list inside=toc]{rproblemenv}[1][]{
  rproblem,
  #1
}


\begin{document}
\tableofcontents

\section{Problems}


\rproblem[label={pb:p1}]{%
  My problem xxx.
}

\begin{rproblemenv}[label={pb:p2}]
  My problem xxx.
\end{rproblemenv}

This is answer \ref{pb:p1} or \ref{pb:p2}

\end{document}

在此处输入图片描述

答案2

如果您不想使用该tcolorbox方法,则需要用 进行\stepcounter替换\refstepcounter

这样做的原因是\label使用\@currentlabel来找出要引用的内容。基本上\refstepcounter设置这个宏并增加计数器值。

相关内容