序幕

序幕

序幕

我正在使用该exercise包并尝试使其布局与 相协调memoir

这个问题比较复杂,很难说明,所以我将把它分成几个部分。我将展示相关的源代码,然后展示输出的屏幕截图。


第一幕

将一切设置为默认,我创建了一个Exercise环境。

\begin{Exercise}[title=Theory of Relativity]
    The theory of relativity was not a eureka moment. It was the result of steady work over a period of 10~years.
    \begin{align}
        E &= mc^2
    \end{align}
    \Question Why does \(E = mc^2\)?
\end{Exercise}

在此处输入图片描述


第二幕

我想稍微自定义一下页眉,所以我\renewcommand在序言中发出了以下内容。“理论...”之前的缩进看起来不正确。我想要的布局是让缩进消失。

\renewcommand{\ExerciseHeader}{%
    \hrule\medskip\noindent%
    \textbf{%
        \large%
        \ExerciseName\quad\ExerciseHeaderNB\ExerciseHeaderTitle %
        \ExerciseHeaderOrigin\medskip\\}%
    }

在此处输入图片描述


第三幕

我四处查看texdoc exercise,没有记录任何有关正文布局的内容Exercise。是的,有关于、和的文档QuestionssubQuestionssubsubQuestions这些并不适用于Exercise正文。所以我四处查看,找到了的定义\@@@ExeEnv,如下所示

\newcommand{\@@@ExeEnv}{%
    \vskip\ExerciseSkipBefore %
    \@QuestionLevel1 %
    \refstepExecounter %
    \begingroup%
        \@getExerciseInfo\ExerciseHeader %
        \addcontentsline{%
            \ext@exercise}{\toc@exercise}{%
                \ExerciseName\ %
                \theExercise\ %
                \expandafter{\itshape \ExerciseTitle}%
                    \hspace{.66em}%
        } %
    \endgroup%
}

第四幕

因此,我尝试分析\@@@ExeEnv、添加和删除控制序列,以查看它们如何影响输出。使用序言中的以下代码,我得到了我想要的结果:丑陋的缩进消失了!

\makeatletter
\renewcommand{\@@@ExeEnv}{%
    \vskip\ExerciseSkipBefore \@QuestionLevel1 \refstepExecounter%
    \begingroup%
        \@getExerciseInfo\ExerciseHeader%
    \endgroup%
}
\makeatother

在此处输入图片描述


第五幕

但唉!我删除了该\addcontentsline命令,我认为这对于维护目录很重要。所以我尝试\addcontentsline从原始定义中重新添加,但丑陋的缩进又回来了!即使是假的也会\addcontentsline带回丑陋的缩进,这次比原来的更加狡猾。

\renewcommand{\@@@ExeEnv}{%
    \vskip\ExerciseSkipBefore \@QuestionLevel1 \refstepExecounter%
    \begingroup%
        \@getExerciseInfo\ExerciseHeader%
    \endgroup%
    \addcontentsline{}{}{}%
}

在此处输入图片描述


结语

为什么 会\addcontentsline增加不需要的缩进?在哪里可以修复这个问题?我也希望得到关于更好的练习包的建议,这些练习包可以更好地与 配合使用memoir

\noindent在练习主体前添加:( \noindent The theory of...)也不会使缩进消失。这也是一个不优雅的解决方案。

答案1

有一个额外的空格(“第三幕)”,但您还想\ignorespaces在修改的内部宏之后:

\documentclass{memoir}
\usepackage{amsmath,exercise}
\renewcommand*\ExerciseHeader{%
  \hrule
  \medskip
  \noindent
  \begingroup
    \bfseries
    \large
    \ExerciseName\quad\ExerciseHeaderNB\ExerciseHeaderTitle
    \ExerciseHeaderOrigin
    \medskip
    \\
  \endgroup
}
\makeatletter
\renewcommand*\@@@ExeEnv{%
    \vskip\ExerciseSkipBefore
    \@QuestionLevel1 %
    \refstepExecounter
    \begingroup%
        \@getExerciseInfo\ExerciseHeader %
        \addcontentsline{\ext@exercise}{\toc@exercise}
          {%
            \ExerciseName\ %
            \theExercise\ %
            \expandafter{\itshape \ExerciseTitle}%
            \hspace{.66em}%
          }%
    \endgroup
    \ignorespaces
}
\makeatother
\begin{document}
\begin{Exercise}[title=Theory of Relativity]
    \noindent
    The theory of relativity was not a eureka moment. It was the result of steady work over a period of 10~years.
    \begin{align}
        E &= mc^2
    \end{align}
    \Question Why does \(E = mc^2\)?
\end{Exercise}
\end{document}

删除空格应该可以解决这个问题。

相关内容