我正在发送我的大学讲义,并想在文档中包含一些带有解决方案的问题。
我想要的是:
- 虽然所有其他
amsthm
环境都是连续编号的Definition 1.1
,,Theorem 1.2
等等,但我希望有问题编号为,,,Problem 1.A
等等。Problem 1.B
Problem 2.A
- 对于每个问题,我都希望有一个具有完全相同的打印计数器、、等的解决方案。
1.A
当然1.B
,2.A
人们可以使用单独的solution
计数器并调用problem
相同solution
的次数。 - 解决方案应该出现在文档末尾的各自部分中,因此某种延时打印。因此上述方法不起作用,因为第一个数字,即部分编号,不再对应。
您有任何实现此目的的软件包或想法吗?我应该使用ntheorem
它吗?欢迎任何帮助。
编辑(@Werner):我的问题其实相当笼统,因此我认为描述不会有太大帮助。但无论如何,这是我的设置:我有自定义包并使用amsthm
。我使用article
documentclass。目前,类似定理的环境如下所示:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}
\RequirePackage[T1]{fontenc}
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\RequirePackage[ngerman]{babel}
\RequirePackage{amsmath}
\RequirePackage{amsthm}
\newtheorem{theorem}{Satz}[section]
\newtheorem{lemma}{Lemma}[section]
\newtheorem{corollary}{Korollar}[section]
\newtheorem{axiom}{Axiom}[section]
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section]
\newtheorem*{notation}{Bezeichnung}
\newtheorem{problem}{Aufgabe}[section] %These two environments
\newtheorem{solution}{Lösung}[section] %are of interest
\theoremstyle{remark}
\newtheorem{example}{Beispiel}[section]
\newtheorem*{remark}{Bemerkung}
\newtheorem{case}{Fall}
%Replace all theorem environment counters except `problem` and
%`solution` by `equation` counter. Therfore, they share the counter
%with equation, but still have the preceeding section number.
%Maybe you have a better way, let me know.
\renewcommand*{\c@theorem}{\c@equation}
\renewcommand*{\c@lemma}{\c@equation}
\renewcommand*{\c@corollary}{\c@equation}
\renewcommand*{\c@axiom}{\c@equation}
\renewcommand*{\c@definition}{\c@equation}
\renewcommand*{\c@example}{\c@equation}
%Reset `case` counter
\@addtoreset{case}{theorem}
\@addtoreset{case}{lemma}
\@addtoreset{case}{corollary}
答案1
这是我的看法。由于您本质上想要一个用于方程和语句(定理、定义等)的计数器,因此定义要使用的定理类环境更为简单equation
。
还有方程式必须显示章节编号,否则编号会显得很神秘。编号应位于左侧。
如何定义问题和解决方案?只需在相应问题旁边输入解决方案,保存正文并在您喜欢的位置打印所有存储的解决方案。该\printsolutions
命令还将清除存储的解决方案列表。
\documentclass[a4paper]{article}
\makeatletter % from here to \makeatother non inclusive is for your package
\RequirePackage[T1]{fontenc}
\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst}
\RequirePackage[ngerman]{babel}
\RequirePackage[leqno]{amsmath}
\RequirePackage{amsthm}
\counterwithin{equation}{section}
\newtheorem{theorem}[equation]{Satz}
\newtheorem{lemma}[equation]{Lemma}
\newtheorem{corollary}[equation]{Korollar}
\newtheorem{axiom}[equation]{Axiom}
\theoremstyle{definition}
\newtheorem{definition}[equation]{Definition}
\newtheorem*{notation}{Bezeichnung}
\newtheorem{problem}{Aufgabe}[section]
\renewcommand{\theproblem}{\thesection.\Alph{problem}}
\newtheorem*{solutionx}{Lösung \thesolutionnumber}
\ExplSyntaxOn
\tl_new:N \g_gargantuar_solution_tl
\NewDocumentEnvironment{solution}{+b}
{
\tl_gput_right:Nx \g_gargantuar_solution_tl
{
\printsolution{\theproblem}{ \exp_not:n { #1 } }
}
}
{}
\NewDocumentCommand{\printsolutions}{}
{
\subsection*{Solutions~to~the~problems}
\tl_use:N \g_gargantuar_solution_tl
\tl_gclear:N \g_gargantuar_solution_tl
}
\NewDocumentCommand{\printsolution}{m +m}
{
\cs_set:Npn \thesolutionnumber { #1 }
\begin{solutionx} #2 \end{solutionx}
}
\ExplSyntaxOff
\theoremstyle{remark}
\newtheorem{example}{Beispiel}[section]
\newtheorem*{remark}{Bemerkung}
\newtheorem{case}{Fall}
\counterwithin*{case}{equation}
\makeatother
\begin{document}
\section{Title}
\begin{equation}
A=B
\end{equation}
\begin{theorem}
Text
\end{theorem}
\begin{case}
Text
\end{case}
\begin{case}
Text
\end{case}
\begin{lemma}
Text
\end{lemma}
\begin{case}
Text
\end{case}
\begin{equation}
A=B
\end{equation}
\begin{problem}
Text
\end{problem}
\begin{solution}
Solution
\end{solution}
\begin{problem} % no solution for this one
Text
\end{problem}
\begin{problem}
Text
\end{problem}
\begin{solution}
Solution
\end{solution}
\printsolutions
\end{document}
这是什么魔法?
- 参数
+b
指定\NewDocumentEnvironment
收集主体以便以某种方式使用。 - 在这种情况下,用法是将其
\g_gargantuar_solutions_tl
与扩展最后出现的问题的编号。 - 存储形式为
\printsolution{<number>}{<text>}
- 该命令
\printsolutions
传递变量的内容。 \printsolution
改变了的含义\thesolutionnumber
,因此辅助环境solutionx
做了正确的事情。