在自定义环境中使用 restatable

在自定义环境中使用 restatable

我想restatable在自定义环境中使用该包。它几乎可以正常工作,但当我重新声明时\name*它不使用原始标签。

在您询问之前,我没有使用 newtheorem,因为它的格式不符合我的需要,而且amsthm令我沮丧的是,使用不是一个选择。

这是一个简单的例子:

\documentclass{article}

\usepackage{thmtools}

\newcounter{main}
\newcommand{\envheader}[2]{%
  \refstepcounter{main}\par\smallskip \textbf{{#2}~\thesection.\themain.}
    \if\relax\detokenize{#1}\relax\else{({#1})}\fi %% Name of the theorem
  }

\newenvironment{theorem}[1][]{\envheader{#1}{Theorem}\itshape\/}{\smallskip}
\newenvironment{lemma}[1][]{\envheader{#1}{Lemma}\itshape\/}{\smallskip}

\begin{document}

\begin{restatable}{theorem}{mytheorem}\label{thm:mytheorem}
  How you doin'?
\end{restatable}

\mytheorem*

\end{document}

以下是我得到的结果:

最小示例输出

答案1

restatable 要求内部计数器与环境同名,因此您应使用 theorem 而不是 main。附注:您的定义不会阻止定理标题和正文之间的分页符。

\documentclass{article}

\usepackage{thmtools}

\newcounter{theorem}
\newcommand{\envheader}[2]{%
  \refstepcounter{theorem}\par\smallskip \textbf{{#2}~\thesection.\thetheorem.}
    \if\relax\detokenize{#1}\relax\else{({#1})}\fi %% Name of the theorem
  }

\newenvironment{theorem}[1][]{\envheader{#1}{Theorem}\itshape\/}{\smallskip}
\newenvironment{lemma}[1][]{\envheader{#1}{Lemma}\itshape\/}{\smallskip}

\begin{document}

\begin{restatable}{theorem}{mytheorem}\label{thm:mytheorem}
  How you doin'?
\end{restatable}

\mytheorem*

\end{document}

在此处输入图片描述

相关内容