LaTeX 示例环境

LaTeX 示例环境

我受到以下 LaTeX 文档的启发: http://www.people.fas.harvard.edu/~djmorin/chap11.pdf (哈佛大学David Morin教授撰稿)

我想制作一个类似的示例环境,如第 11 页所示的单个示例(示例文本前后各有一条粗灰线,并且每个示例中都有“示例 (...)”和“解决方案”标题。)另外,如第 15 页所示,一条细灰线将两个连续的示例分隔开。

知道如何使用这些宏创建环境吗?我可能会稍微修改一下,但我希望能够生成它。

编辑:

是否可以在示例中包含 \begin{block},在解决方案中包含 \end{block},这样我就不需要明确地写出它,而只需要

\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}

\begin{solution}
\lipsum[2]
\end{solution}

\begin{example}[Example 2]
\lipsum[1]
\end{example}

\begin{solution}
\lipsum[2]
\end{solution}

最后,我宁愿在“示例”和“解决方案”之间留一个空行,并且让 \blockline 与其顶部和底部文本的垂直距离相等。我只是不确定在您的定义中将这些命令放在哪里。

谢谢。

Framed

答案1

这是一个带有规则的简单解决方案:

\documentclass{article}
\usepackage{xcolor}
\usepackage{ntheorem,lipsum}
\theoremseparator{:}
\newtheorem*{example}{Example}
\newtheorem*{solution}{Solution}
\newlength\outerlinewidth
\newlength\interline
\newlength\hangleft
\newenvironment{block}{%
 \trivlist\item\relax\par%
 \noindent\rlap{\hspace*{-\hangleft}\color{gray}%
   \rule{\dimexpr \hangleft+\linewidth\relax}{\outerlinewidth}%
   }%
 }{\par%
 \noindent\rlap{\hspace*{-\hangleft}\color{gray}%
   \rule{\dimexpr \hangleft+\linewidth\relax}{\outerlinewidth}
   }%
   \endtrivlist}
\newcommand*\blockline{\par\noindent%
       \begingroup\color{gray}%
       \rule{\linewidth\relax}{\interline}\endgroup\par%
}


%Set parameter:
\setlength{\outerlinewidth}{6pt} %height of the outer line
\setlength{\interline}{2pt} %height of the inter line
\setlength{\hangleft}{1cm} % left indention
\begin{document}
\begin{block}
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
\blockline
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
\end{block}
\end{document}

enter image description here

编辑

这里有一个解决方案mdframed

\documentclass{article}
\usepackage{microtype}
\usepackage{xcolor}
\usepackage{ntheorem,lipsum}
\usepackage[framemethod=default]{mdframed}
\usepackage{showframe}

\mdfdefinestyle{block}{%
   rightmargin=0pt,
   innerrightmargin=0pt,
   skipabove=\topskip,
   skipbelow=\topskip,
   leftline=false,
   rightline=false,
   leftmargin=-1cm,
   innerleftmargin=1cm,
   linecolor=gray,
   linewidth=6pt
}

\newmdenv[style=block,ntheorem]{block}


\theoremseparator{:}
\newtheorem*{example}{Example}
\newtheorem*{solution}{Solution}
\newlength\outerlinewidth
\newlength\interline
\newcommand*\blockline{\par\noindent%
       \begingroup\color{gray}%
       \rule{\linewidth\relax}{\interline}\endgroup\par%
}
%Set parameter:
\setlength{\interline}{2pt} %height of the inter line

\begin{document}
\begin{block}
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
\blockline
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
\end{block}
\end{document}

编辑2

mdframed这里有一个与相结合的解决方案etoolbox。当然,您也可以不使用 而使用该解决方案mdframed

\documentclass{article}
\usepackage{microtype}
\usepackage{xcolor}
\usepackage{ntheorem,lipsum}
\usepackage[framemethod=default]{mdframed}
\usepackage{showframe}

\mdfdefinestyle{block}{%
   rightmargin=0pt,
   innerrightmargin=0pt,
   skipabove=\topskip,
   skipbelow=\topskip,
   leftline=false,
   rightline=false,
   leftmargin=-1cm,
   innerleftmargin=1cm,
   linecolor=gray,
   linewidth=6pt
}

\newmdenv[style=block,ntheorem]{block}


\theoremseparator{:}
\theorembodyfont{}
\newtheorem*{example}{Example}
\newtheorem*{solution}{Solution}

\newtoggle{env:example}
\newtoggle{env:solution}
\newtoggle{env:block}
\settoggle{env:solution}{false}
\settoggle{env:example}{false}
\settoggle{env:block}{false}

\BeforeBeginEnvironment{block}%
    {\settoggle{env:block}{true}
     \settoggle{env:solution}{false}
     \settoggle{env:example}{false}}

\AfterEndEnvironment{block}%
    {\settoggle{env:solution}{false}
     \settoggle{env:block}{false}
     \settoggle{env:example}{false}}

\BeforeBeginEnvironment{example}%
    {\ifboolexpr{ test {\iftoggle{env:block}}
                  and 
                  test {\iftoggle{env:example}}}%
                 {\settoggle{env:example}{true}}{}
     \iftoggle{env:example}{\blockline}{}}

\AfterEndEnvironment{example}%
    {\settoggle{env:example}{true}}

\newlength\outerlinewidth
\newlength\interline
\newcommand*\blockline{\par\noindent%
       \begingroup\color{gray}%
       \rule{\linewidth\relax}{\interline}\endgroup\par%
}
%Set parameter:
\setlength{\interline}{2pt} %height of the inter line

\begin{document}
\begin{block}
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
%\blockline
\begin{example}[Rear clock ahead]
\lipsum[1]
\end{example}
\begin{solution}
\lipsum[2]
\end{solution}
\end{block}
\end{document}

相关内容