Я пишу документ с несколькими главами. В каждой главе есть проблемы, а у каждой проблемы есть решение. Я хочу, чтобы некоторые решения были сразу после проблемы, а другие — в конце главы.
В настоящее время я использую
\newtheorem{problem}{Задача}[chapter]
\newtheorem{solution}{Решение}[chapter]
Когда в конце главы должно появиться решение, я делаю следующее:
\appto\SolutionsChapterFive{
\begin{solution}
\end{solution}
}
и в конце главы я просто вызываю команду
\SolutionsChapterFive
К сожалению, это нарушает нумерацию задач.
Например:
Глава 5
Задача 5.1.Бла-бла
Решение 5.1.Аблх аблх
Задача 5.2.Балх балх
Задача 5.3.Альбх альбх
Решение 5.3.Ablh ablh (Но это выглядит как решение 5.2 ☹️ )
Задача 5.4.Хабл Хабл
Решения
Решение 5.2.Ablh ablh (Но это выглядит как решение 5.3 ☹️ )
Решение 5.4.Аблх аблх
Как это исправить? Есть ли лучший способ решения проблемы?
решение1
Корректный перенос номера решения с помощью \appto
(или какого-либо другого макроса) кажется сложным из-за того, как работает расширение в LaTeX. Возможно, кто-то, кто знаком с пакетом etoolbox, сможет предоставить решение с этим \appto
подходом. На данный момент я бы предложил простое решение:
Когда вы дойдете до решений, которые должны появиться в конце, сохраните текущий номер решения в новом счетчике, а затем увеличьте счетчик решений (чтобы последующие решения были пронумерованы правильно). Затем, перед тем как записывать решения в конце главы, установите счетчик решений на это сохраненное значение.
Вы теряете удобство подхода \appto
, но при условии, что у вас нет большого количества решений в конце главы, я считаю такой рабочий процесс вполне практичным.
Минимальный пример:
\documentclass{book}
\usepackage{amsmath}
\usepackage{amsthm}
\newtheorem{problem}{Problems}[chapter]
\newtheorem{solution}{Solutions}[chapter]
\begin{document}
\setcounter{chapter}{5}
\begin{problem}
Problems 1
\end{problem}
\begin{solution}
Solutions 1
\end{solution}
\begin{problem}
Problems 2
\end{problem}
\newcounter{fivea} % New counter to save solution number (`fivea' must be unique)
\setcounter{fivea}{\value{solution}} % Sote current solution number
\stepcounter{solution} % Step the counter, as if solutions occured here
\begin{problem}
Problems 3
\end{problem}
\begin{solution}
Solutions 3
\end{solution}
\begin{solution}
Solutions 4
\end{solution}
% End of chapter material
\setcounter{solution}{\value{fivea}} % Restore the saved value
\begin{solution} % Write solutions in the usual way
Solutions 2
\end{solution}
\end{document}
Выход:
Конечно, вы можете легко обернуть эти шаги в макрос и новую среду, чтобы сделать все немного проще:
\documentclass{book}
\usepackage{amsmath}
\usepackage{amsthm}
\newtheorem{problem}{Problems}[chapter]
\newtheorem{solution}{Solutions}[chapter]
\newcommand\saveSolutionNumber[1]{\newcounter{#1}\setcounter{#1}{\value{solution}}\stepcounter{solution}}
\newenvironment{chapterSolutions}[1]{\setcounter{solution}{\value{#1}}\begin{solution}}{\end{solution}}
\begin{document}
\setcounter{chapter}{5}
\begin{problem}
Problems 1
\end{problem}
\begin{solution}
Solutions 1
\end{solution}
\begin{problem}
Problems 2
\end{problem}
\saveSolutionNumber{fivea} % fivea is the new counter
\begin{problem}
Problems 3
\end{problem}
\begin{solution}
Solutions 3
\end{solution}
\begin{solution}
Solutions 4
\end{solution}
\begin{chapterSolutions}{fivea} % Solutions based on counter fivea
Solutions 2
\end{chapterSolutions}
\end{document}
с точно таким же результатом, как и раньше.