在我的讲义中,我想留下一些练习,并计划在课文后面给出解决方案。例如,
“这个定理的证明留作练习(练习 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
正确提供名称。