定理左侧的星号(用于练习)

定理左侧的星号(用于练习)

我希望能够做这样的事情

\begin{exo}[Name][\Star\Star] Content \end{exo}

将会打印类似

**Exercise 7 (Name). Content

我希望 exo 的计数器与其他定理共享计数器,并能够使用 cref 引用它。如果可能的话,我想使用 amsthm 来尽量减少文件中的更改。

我想使用的代码示例

\documentclass{article}

\usepackage{amsthm}

\begin{document}
\newtheorem{eDef}{Def}
\newtheorem{eExo}[eDef]{Exo}

\begin{eDef}[Name]
Content
\end{eDef}

\begin{eExo}[Name][**]
Content
\end{eExo}

\begin{eExo}[Name][*]
Content
\end{eExo}

\begin{eExo}[Name][***]
Content
\end{eExo}
\end{document}

导致

Def 1 (Name). Content
**Exercise 2 (Name). Content
*Exercise 3 (Name). Content
***Exercise 4 (Name). Content

答案1

主要问题是双重可选参数。我建议使用不同的语法来区分它们。

\documentclass{article}
\usepackage{amsthm,xparse}

\theoremstyle{definition}
\newtheorem{eDef}{Def}
\newtheorem{eExoinner}[eDef]{\Exoname}
\newcommand{\Exoname}{Exo}

\NewDocumentEnvironment{eExo}{D(){}o}
 {\renewcommand\Exoname{\makebox[0pt][r]{#1}Exo}%
  \IfNoValueTF{#2}{\eExoinner}{\eExoinner[#2]}}
 {\endeExoinner}

\begin{document}

\begin{eDef}[Name]
Content
\end{eDef}

\begin{eExo}[Name]
Content
\end{eExo}

\begin{eExo}(*)[Name]
Content
\end{eExo}

\begin{eExo}(**)[Name]
Content
\end{eExo}

\begin{eExo}(***)[Name]
Content
\end{eExo}

\begin{eExo}
Content
\end{eExo}

\begin{eExo}(*)
Content
\end{eExo}

\begin{eExo}(**)
Content
\end{eExo}

\begin{eExo}(***)
Content
\end{eExo}

\end{document}

在此处输入图片描述

不同的策略是定义四种不同的环境。

\documentclass{article}
\usepackage{amsthm}

\theoremstyle{definition}
\newtheorem{eDef}{Def}
\newtheorem{eExoinner}[eDef]{\makebox[0pt][r]{\Exostar}Exo}
\newcommand{\Exostar}{}

\newenvironment{eExo}{\eExoinner}{\endeExoinner}
\newenvironment{eExo*}{\renewcommand\Exostar{*}\eExoinner}{\endeExoinner}
\newenvironment{eExo**}{\renewcommand\Exostar{**}\eExoinner}{\endeExoinner}
\newenvironment{eExo***}{\renewcommand\Exostar{***}\eExoinner}{\endeExoinner}

\begin{document}

\begin{eDef}[Name]
Content
\end{eDef}

\begin{eExo}[Name]
Content
\end{eExo}

\begin{eExo*}[Name]
Content
\end{eExo*}

\begin{eExo**}[Name]
Content
\end{eExo**}

\begin{eExo***}[Name]
Content
\end{eExo***}

\begin{eExo}
Content
\end{eExo}

\begin{eExo*}
Content
\end{eExo*}

\begin{eExo**}
Content
\end{eExo**}

\begin{eExo***}
Content
\end{eExo***}

\end{document}

相关内容