延迟打印的问题及解决方案

延迟打印的问题及解决方案

我正在发送我的大学讲义,并想在文档中包含一些带有解决方案的问题。

我想要的是:

  • 虽然所有其他amsthm环境都是连续编号的Definition 1.1,,Theorem 1.2等等,但我希望有问题编号为,,,Problem 1.A等等。Problem 1.BProblem 2.A
  • 对于每个问题,我都希望有一个具有完全相同的打印计数器、、等的解决方案。1.A当然1.B2.A人们可以使用单独的solution计数器并调用problem相同solution的次数。
  • 解决方案应该出现在文档末尾的各自部分中,因此某种延时打印。因此上述方法不起作用,因为第一个数字,即部分编号,不再对应。

您有任何实现此目的的软件包或想法吗?我应该使用ntheorem它吗?欢迎任何帮助。

编辑(@Werner):我的问题其实相当笼统,因此我认为描述不会有太大帮助。但无论如何,这是我的设置:我有自定义包并使用amsthm。我使用articledocumentclass。目前,类似定理的环境如下所示:

\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}

在此处输入图片描述

这是什么魔法?

  1. 参数+b指定\NewDocumentEnvironment收集主体以便以某种方式使用。
  2. 在这种情况下,用法是将其\g_gargantuar_solutions_tl扩展最后出现的问题的编号。
  3. 存储形式为\printsolution{<number>}{<text>}
  4. 该命令\printsolutions传递变量的内容。
  5. \printsolution改变了的含义\thesolutionnumber,因此辅助环境solutionx做了正确的事情。

相关内容