序幕
我正在使用该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
。是的,有关于、和的文档Questions
,subQuestions
但subsubQuestions
这些并不适用于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}
删除空格应该可以解决这个问题。