如何根据我们是否在某个部分或子部分内来调整计数器

如何根据我们是否在某个部分或子部分内来调整计数器

我想要创建一个exercise可以在部分、小节等中使用的环境。作为一个例子,请考虑以下内容:

  • 在第 1 节中,第三个示例的标题应为例 1.3, 但
  • 在第 1 节和第 2 小节中,第三个示例的标题应为例 1.2.3

这个怎么做?

在此处输入图片描述

\documentclass{article}
\usepackage{tcolorbox}

\newcounter{exercise}
\newenvironment{exercise}
{\par\smallskip\refstepcounter{exercise}\begin{tcolorbox}[title=Exercise \thesection.\thesubsection.\theexercise]\ignorespaces}
{\end{tcolorbox}\par\smallskip\ignorespacesafterend}

\begin{document}
\section{Polynomial}
In this section we will study expressions in the following form.
\[
a_0 x^n + a_1 x^{n-1} \cdots + a_n
\]
where \ldots
\begin{exercise}
Is $\frac{x-1}{2}$ a polynomial?
\tcblower
Yes. Because it can be rewritten as $x/2-1/2$.
\end{exercise}
\begin{exercise}
Is $0$ a polynomial?
\tcblower
Yes.
\end{exercise}
\subsection{Order}
The highest exponent in polynomial terms represents the order of  the polynomial.
\begin{exercise}
What is the order of $2x^3-3x^5+1$?
\tcblower
The highest exponent is 5 so the polynomial order is 5.
\end{exercise}
\end{document}

我按如下方式操作,但是当我在子部分时,输出有双重子部分。

\newcounter{exercise}
\newenvironment{exercise}
{\par\smallskip\refstepcounter{exercise}\begin{tcolorbox}[title=Exercise \thesection\ifnum\value{subsection}>0.\thesubsection\fi.\theexercise]\ignorespaces}
{\end{tcolorbox}\par\smallskip\ignorespacesafterend}

笔记:

欢迎提出最佳实践建议,使环境越来越复杂,例如可以通过标签等进行引用......

答案1

在此处输入图片描述

您想添加前缀,以便它不仅在标题中\theexercise可见。\ref

\documentclass{article}
\usepackage{tcolorbox}

\newcounter{exercise}[subsection]
\renewcommand\theexercise{%
\thesection.%
\ifnum\value{subsection}>0 \arabic{subsection}.\fi
\arabic{exercise}}

\newenvironment{exercise}
{\par\smallskip\refstepcounter{exercise}
\begin{tcolorbox}[title=Exercise \theexercise]\ignorespaces}
{\end{tcolorbox}\par\smallskip\ignorespacesafterend}

\begin{document}
\section{Polynomial}
In this section we will study expressions in the following form.
\[
a_0 x^n + a_1 x^{n-1} \cdots + a_n
\]
where \ldots
\begin{exercise}
Is $\frac{x-1}{2}$ a polynomial?
\tcblower
Yes. Because it can be rewritten as $x/2-1/2$.
\end{exercise}
\begin{exercise}
Is $0$ a polynomial?
\tcblower
Yes.
\end{exercise}
\subsection{Order}
The highest exponent in polynomial terms represents the order of  the polynomial.
\begin{exercise}
What is the order of $2x^3-3x^5+1$?
\tcblower
The highest exponent is 5 so the polynomial order is 5.
\end{exercise}
\end{document}

答案2

细化David Carlisle 的解决方案,评论太长了:

\newcounter{exercise}[subsection]
\makeatletter
\@addtoreset{exercise}{section}
\makeatother

\renewcommand\theexercise{%
  \ifnum\value{subsection}>0 %
    \thesubsection
  \else
    \thesection
  \fi
  .\arabic{exercise}%
}

评论:

  • \newcounter{exercise}[subsection]仅重置新的 的计数器\subsections,不重置 的计数器。需要\section额外的操作。\@addtoreset{exercise}{section}

  • 里面\theexercise我使用了\thesubsection而不是\arabic{subsection},那么 中的更改\thesubsection会自动反映在 中\theexercise,例如,如果有人希望对小节采用与默认不同的编号样式。

答案3

我认为您可以将子部分计数器与零进行比较(例如,使用来自的命令etoolbox),并使用它来决定如何组成数字。

相关内容