我正在尝试编写解决方案,其中包含原始问题文本,放在浅灰色阴影框中。我一直在使用“framed”包shaded
环境创建阴影,但有些问题有枚举部分,部分之前有一些文本。我希望起始文本和第一部分连续着色,但显然环境shaded
不能跨越\begin{enumerate}
。所以我现在有的是
\begin{shaded}Starting text...\end{shaded}
\begin{enumerate}
\begin{shaded}\item This is the first problem.\end{shaded}
This is the first solution.
\begin{shaded}\item This is the second problem.\end{shaded}
Second solution.
\end{enumerate}
有没有办法让阴影连续,而不是出现第一个间隙?
答案1
基本解决方案:
我建议你使用包裹mdframed
(因为它可以跨分页符工作),并使用resume*
列表选项包裹enumitem
:
更好的解决方案:
正如@MarcoDaniel 所建议的,更好的解决方案是使用frametitle
带有 的选项mdframed
。
\newenvironment{Question}[1]{
\begin{mdframed}[
frametitle={#1},
frametitlerule=true,
frametitlebackgroundcolor=red!20,
frametitlebelowskip=2pt,
innerlinewidth=1.0pt
]
}{
\end{mdframed}
}
这样,您只需将想要着色的部分放在Question
环境的第一个参数中,而此环境的主体就是答案,即您不想着色的部分。这会产生:
- 由于某种原因,这存在显示问题。顶部和底部都有线条,但随着放大倍数的
150%
增加和1%
Mac 上 Acrobat Reader 10.1.2 的递增,不同的线条出现和消失。我已将其更新为使用framemthod=tikz
和innerlinewidth=1.0pt
选项,因为这会使此显示问题不那么明显(但问题仍然存在)。
更好的解决方案(自定义计数器):
如果您仅使用enumerate
创建编号列表,则可以使用自定义计数器进一步简化操作。这也是@MarcoDaniel 的功劳。
笔记:
如果你还没有使用
enumitem
,你应该看看:如果你碰巧在 minipages 中使用它,请记下恢复在小页面内开始的列表
要调整设置
enumitem
,请参阅 无法理解 enumitem 的间距参数
代码:基本解决方案
\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{mdframed}
\newmdenv[backgroundcolor=yellow]{shaded}
\begin{document}
\begin{shaded}
Starting text...
\begin{enumerate}[series=MyQuestions,leftmargin=*]
\item This is the first problem.
\end{enumerate}
\end{shaded}
\begin{enumerate}[resume*=MyQuestions]
\item[] This is the first solution (not shaded)
\end{enumerate}
%
\begin{shaded}
\begin{enumerate}[resume*=MyQuestions]
\item This is the second problem.
\end{enumerate}
\end{shaded}
\begin{enumerate}[resume*=MyQuestions]
\item[] Second solution (not shaded)
\end{enumerate}
\end{document}
代码:更好的解决方案:
\documentclass{article}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage[framemethod=tikz]{mdframed}
\newenvironment{Question}[1]{
\begin{mdframed}[
frametitle={#1},
frametitlerule=true,
frametitlebackgroundcolor=red!20,
frametitlebelowskip=2pt,
innerlinewidth=1.0pt
]
}{
\end{mdframed}
}
\begin{document}
\begin{Question}{
Starting text...
\begin{enumerate}[series=MyQuestions,leftmargin=*]
\item This is the first problem.
\end{enumerate}
}
This is the first solution (not shaded)
\end{Question}
\bigskip
\begin{Question}{
\begin{enumerate}[resume*=MyQuestions]
\item This is the second problem.
\end{enumerate}
}
\begin{enumerate}[resume*=MyQuestions]
\item[] Second solution (not shaded)
\end{enumerate}
\end{Question}
\end{document}
代码:更好的解决方案(自定义计数器):
\documentclass{article}
\usepackage{mdframed}
\mdfdefinestyle{QuestionsStyle}{%
frametitlerule=true,
frametitlebackgroundcolor=yellow,
linewidth=2pt,
frametitlerulewidth=1pt,
innerleftmargin=30pt,
frametitlebelowskip=.5\topskip,
innertopmargin=\topskip
}
\newcounter{QuestionCounter}
\setcounter{QuestionCounter}{0}
\newrobustcmd*\SetQuestionNum{\mbox{}\llap{\stepcounter{QuestionCounter}\theQuestionCounter\hspace*{10pt}}}
\newmdenv[style=QuestionsStyle]{Question}
\begin{document}
\begin{Question}[frametitle={
Some Text\\
\\
\SetQuestionNum This is the first problem.}]
This is the first solution (not shaded)
\end{Question}
\bigskip
\begin{Question}[frametitle={
\SetQuestionNum This is the second problem.}]
Second solution (not shaded)
\end{Question}
\end{document}