定义新的示例环境

定义新的示例环境

我如何定义一个Example像下面所示的新环境?

该环境应具有以下属性:

  • 结束标记必须位于最后一行,无论它包含文本还是公式;但在公式模式下,红色方块必须位于左侧。
  • 如果单词Example和它的红色子线到达页面末尾,并且没有更多空间来包含示例的主体,则example必须将整个单词插入到下一页(section, subsection, ...默认具有此属性)。

在此处输入图片描述

答案1

这只是部分答案(完整答案请参见最后一个例子)。我使用了thmtoolsamsthm包作为定义类似定理的结构的前端。

指某东西的用途

  \interlinepenalty 10000

根据postheadhook请求防止分页。

\documentclass{book}
\usepackage{xcolor}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{thmtools}
\usepackage{lipsum}

\colorlet{myred}{red!80!black}

\declaretheoremstyle[
spaceabove=\topsep, spacebelow=\topsep,
headfont=\normalfont\color{myred},
notefont=\mdseries\color{myred}, notebraces={(}{)},
bodyfont=\normalfont,
postheadspace=\newline,
headpunct=,
numberwithin=chapter,
postheadhook=\leavevmode%
  \interlinepenalty 10000%
  \vskip-1.3\baselineskip%
  \noindent{\color{myred}\rule{\textwidth}{1pt}}%
  \interlinepenalty 10000%
  \vskip0.3\baselineskip\noindent,
qed=\textcolor{myred}{$\blacksquare$}
]{mystyle}
\declaretheorem[style=mystyle]{example}

\renewcommand\theexample{\thechapter-\arabic{example}}

\begin{document}

\chapter{Test Chapter}
%\lipsum[1-3]
\begin{example}
\lipsum*[2]
\end{example}

\end{document}

在此处输入图片描述

仅有的仍未解决的问题是当环境中的最后一行属于显示的数学表达式时结束标记的位置。坦率地说,我不知道如何有条件地更改结束标记的位置。

这是利用这个时间的另一种可能性mdframed\xqed包;使用页面中链接的文档中定义的宏来提供结束标记AMS-LaTeX 中的定理AMS-FAQ:

\documentclass{book}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{amssymb}
\usepackage{lipsum}
\usepackage{etoolbox}

\newcommand{\xqed}[1]{%
  \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill
  \quad\hbox{\ensuremath{#1}}}

\AtBeginEnvironment{example}{\stepcounter{example}}
\AtEndEnvironment{example}{\xqed{\textcolor{myred}{\blacksquare}}}

\colorlet{myred}{red!80!black}

\newmdenv[
  hidealllines=true,
  frametitle={Example~\theexample},
  frametitlerule=true,
  frametitlerulecolor=myred,
  frametitlerulewidth=2pt,
  frametitlefont=\bfseries\color{myred},
  innerleftmargin=0pt,
  innerrightmargin=0pt
]{example}

\newcounter{example}[chapter]
\renewcommand\theexample{\thechapter-\arabic{example}}

\begin{document}

\chapter{Test Chapter}
\begin{example}
\lipsum*[2]
\end{example}

\end{document}

在此处输入图片描述

现在有一个可能的完整解决方案;用户不必有条件地重新定义结束标记的行为(这可能非常困难),而是可以手动选择lexample行为类似的环境example,但将结束标记放在左侧:

\documentclass{book}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{etoolbox}

\newlength\mylen

\newcommand{\xxqed}[1]{%
  \settowidth\mylen{$#1$}%
  \vskip-2\baselineskip\hspace*{-\mylen}\llap{\hbox{\ensuremath{#1}}}%
}

\newcommand{\xqed}[1]{%
  \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill
  \quad\hbox{\ensuremath{#1}}}

\AtBeginEnvironment{example}{\stepcounter{example}}
\AtEndEnvironment{example}{\xqed{\textcolor{myred}{\blacksquare}}}

\AtBeginEnvironment{lexample}{\stepcounter{example}}
\AtEndEnvironment{lexample}{\xxqed{\textcolor{myred}{\blacksquare}}}

\colorlet{myred}{red!80!black}

\newmdenv[
  hidealllines=true,
  frametitle={Example~\theexample},
  frametitlerule=true,
  frametitlerulecolor=myred,
  frametitlerulewidth=2pt,
  frametitlefont=\bfseries\color{myred},
  innerleftmargin=0pt,
  innerrightmargin=0pt,
  skipabove=.6\topskip,
  skipbelow=.6\topskip
]{lexample}

\newmdenv[
  hidealllines=true,
  frametitle={Example~\theexample},
  frametitlerule=true,
  frametitlerulecolor=myred,
  frametitlerulewidth=2pt,
  frametitlefont=\bfseries\color{myred},
  innerleftmargin=0pt,
  innerrightmargin=0pt,
  skipabove=.6\topskip,
  skipbelow=.6\topskip
]{example}

\newcounter{example}[chapter]
\renewcommand\theexample{\thechapter-\arabic{example}}

\newcommand\Text{% just to generate text for the example
Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo vitae lacus
tincidunt ultrices. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In
hac habitasse platea dictumst. Integer tempus convallis augue. Etiam facilisis.
Nunc elementum fermentum wisi. Aenean placerat. Ut imperdiet, enim sed
gravida sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget enim.
Nunc vitae tortor. Proin tempus nibh sit amet nisl.
}

\begin{document}

\chapter{Test Chapter}
\begin{lexample}
\Text
\begin{align}
a &= b \\
&= c 
\end{align}
\end{lexample}
\Text
\begin{example}
\Text
\end{example}

\end{document}

在此处输入图片描述

相关内容