我受到以下 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 与其顶部和底部文本的垂直距离相等。我只是不确定在您的定义中将这些命令放在哪里。
谢谢。
答案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}
编辑
这里有一个解决方案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}