在线锻炼环境

在线锻炼环境

在我的讲义中,我想留下一些练习,并计划在课文后面给出解决方案。例如,

“这个定理的证明留作练习(练习 1.2)”。

它还必须有一个标签,以便以后可以引用。我想我需要一个内联练习环境。

这个帖子\lipsum \begin \end回答了我的问题。在这篇文章的最后一个回答中,Werner 提出,更好的方法是使用宏。我有太多宏,所以每次都很难做到。可以用一个命令来完成吗?

答案1

这是一个提供\exinline命令的实现,它采用标签参数来生成相关文本。

示例输出

\documentclass{article}

\usepackage{amsthm}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{exercise}[theorem]{Exercise}

\newcommand{\exinline}[1]{(\refstepcounter{theorem}Exercise~\thetheorem\label{#1})}

\begin{document}

\section{Euler's Theorem}

Some text.

\begin{theorem}[Euler]
  \label{thm:Euler}
  This is Euler's theorem.
\end{theorem}

\begin{proof}
  The proof of this theorem is left as an exercise \exinline{ex:Euler}.
\end{proof}

\begin{exercise}
  \label{ex:extra}
  Reformulate the theorem.
\end{exercise}

Here is the solution to Exercise~\ref{ex:Euler}.  By\dots

Note that Exercise~\ref{ex:extra} requires you to provide another formulation
of Theorem~\ref{thm:Euler}.

\end{document}

注意,在此示例中,练习和定理共享同一个计数器。如果不是这种情况,则需要将theorem定义中的计数器替换为适当的计数器,并进行\thetheorem相应更改。例如,如果练习有自己的编号,通过 声明\newtheorem{exercise}{Exercise}[section],则命令定义应为

\newcommand{\exinline}[1]{(\refstepcounter{exercise}Exercise~\theexercise\label{#1})}

如果您使用cleveref参考,则需要对refstepcounter命令进行小幅修改以\cref获取正确的名称。

\documentclass{article}

\usepackage{amsthm}
\usepackage[capitalize]{cleveref}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{exercise}[theorem]{Exercise}

\newcommand{\exinline}[1]{(\refstepcounter[exercise]{theorem}Exercise~\thetheorem\label{#1})}

\begin{document}

\section{Euler's Theorem}

Some text.

\begin{theorem}[Euler]
  \label{thm:Euler}
  This is Euler's theorem.
\end{theorem}

\begin{proof}
  The proof of this theorem is left as an exercise \exinline{ex:Euler}.
\end{proof}

\begin{exercise}
  \label{ex:extra}
  Reformulate the theorem.
\end{exercise}

Here is the solution to \cref{ex:Euler}.  By\dots

Note that \cref{ex:extra} requires you to provide another formulation
of \cref{thm:Euler}.

\end{document}

这会产生与第一个例子相同的输出,并cleveref正确提供名称。

相关内容