在新的枚举环境中阴影连续

在新的枚举环境中阴影连续

我正在尝试编写解决方案,其中包含原始问题文本,放在浅灰色阴影框中。我一直在使用“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=tikzinnerlinewidth=1.0pt选项,因为这会使此显示问题不那么明显(但问题仍然存在)。

更好的解决方案(自定义计数器):

如果您仅使用enumerate创建编号列表,则可以使用自定义计数器进一步简化操作。这也是@MarcoDaniel 的功劳。

在此处输入图片描述

笔记:


代码:基本解决方案

\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}

相关内容