
Я переопределил заголовки упражнений и ответов exercise
пакета таким же образом.
После заголовка упражнения правильно осталось немного места, после заголовка ответа нет.
Конечно, я могу вручную указать это в определении заголовка ответа, но мне интересно, является ли это ошибкой пакета или я что-то сделал не так.
\documentclass{book}
\usepackage{amsmath}
\usepackage[lastexercise]{exercise}
\setlength{\ExerciseSkipBefore}{\baselineskip}
\setlength{\ExerciseSkipAfter}{1\baselineskip}
\setlength{\AnswerSkipBefore}{0\baselineskip}
\setlength{\AnswerSkipAfter}{1.2\baselineskip}
\renewcounter{Exercise}[chapter]
\renewcommand{\ExerciseHeader}{\noindent\bfseries\ExerciseName\ \thechapter.\ExerciseHeaderNB.}
\renewcommand{\AnswerName}{Solution}
\renewcommand{\AnswerHeader}{\noindent\bfseries\AnswerName\ \thechapter.\ExerciseHeaderNB.}
\begin{document}
\chapter{My first chapter}
\section{Problems}
\begin{Exercise}
Text of the 1st problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 1st problem
\end{Answer}
\begin{Exercise}
Text of the 2nd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 2nd problem
\end{Answer}
\begin{Exercise}
Text of the 3rd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 3rd problem
\end{Answer}
\end{document}
решение1
Ответ кроется в определениях \@@@ExeEnv
и\@@@AnswerEnv
% exercise.sty, line 365:
\newcommand{\@@@ExeEnv}{%
\pagebreak[1]\vskip\ExerciseSkipBefore
\@QuestionLevel1
\refstepExecounter
\begingroup\@getExerciseInfo\ExerciseHeader
\addcontentsline{\ext@exercise}{\toc@exercise}{\ExerciseName\
\theExercise\ \expandafter{\itshape \ExerciseTitle}\hspace{.66em}}
\endgroup\AtBeginExercise}
% exercise.sty, line 656:
\newcommand{\@@@AnswerEnv}{%
\pagebreak[1]\vskip\AnswerSkipBefore\@QuestionLevel1
\begingroup\@getAnswerInfo\AnswerHeader\endgroup\AtBeginAnswer}
Как вы можете видеть, в строке 371 есть незащищенный конец строки, который и создает пробел после «Упражнения 1.1».
\documentclass{book}
\usepackage{amsmath}
\usepackage[lastexercise]{exercise}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@@@ExeEnv}{ \endgroup}{\endgroup}{}{} % remove the wrong space
\makeatother
\setlength{\ExerciseSkipBefore}{\baselineskip}
\setlength{\ExerciseSkipAfter}{1\baselineskip}
\setlength{\AnswerSkipBefore}{0\baselineskip}
\setlength{\AnswerSkipAfter}{1.2\baselineskip}
\renewcounter{Exercise}[chapter]
\renewcommand{\ExerciseHeader}{%
\noindent\bfseries\ExerciseName\ \thechapter.\ExerciseHeaderNB. %
}
\renewcommand{\AnswerName}{Solution}
\renewcommand{\AnswerHeader}{%
\noindent\bfseries\AnswerName\ \thechapter.\ExerciseHeaderNB. %
}
\begin{document}
\chapter{My first chapter}
\section{Problems}
\begin{Exercise}
Text of the 1st problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 1st problem
\end{Answer}
\begin{Exercise}
Text of the 2nd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 2nd problem
\end{Answer}
\begin{Exercise}
Text of the 3rd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 3rd problem
\end{Answer}
\end{document}
решение2
Кажется, это ошибка для меня. Добавление пробела в конце определения
\renewcommand{\AnswerHeader}{\noindent\bfseries\AnswerName\ \thechapter.\ExerciseHeaderNB. }
% ^^^
решает проблему как обходной путь. Мне кажется, что \xspace
в определении текста заголовка решения в пакете отсутствует ...
В документации вы можете найти
\newcommand{\AnswerHeader}{\medskip\centerline{\textbf{Answer of \ExerciseName\ \ExerciseHeaderNB}\smallskip}}
для меня удивительнос а \smallskip
на конце.
МВЭ:
\documentclass{book}
\usepackage{amsmath}
\usepackage[lastexercise]{exercise}
\setlength{\ExerciseSkipBefore}{\baselineskip}
\setlength{\ExerciseSkipAfter}{1\baselineskip}
\setlength{\AnswerSkipBefore}{0\baselineskip}
\setlength{\AnswerSkipAfter}{1.2\baselineskip}
\renewcounter{Exercise}[chapter]
\renewcommand{\ExerciseHeader}{\noindent\bfseries\ExerciseName\ \thechapter.\ExerciseHeaderNB.}
\renewcommand{\AnswerName}{Solution}
\renewcommand{\AnswerHeader}{\noindent\bfseries\AnswerName\ \thechapter.\ExerciseHeaderNB. }
\begin{document}
\chapter{My first chapter}
\section{Problems}
\begin{Exercise}
Text of the 1st problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 1st problem
\end{Answer}
\begin{Exercise}
Text of the 2nd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 2nd problem
\end{Answer}
\begin{Exercise}
Text of the 3rd problem
\end{Exercise}
\begin{Answer}
Text of the solution of the 3rd problem
\end{Answer}
\end{document}
результат: