特殊示例环境

特殊示例环境

如何定义一个名为“example”的环境以便:

  1. 可以跨页
  2. 在“示例 \chap.\no”上方有一条水平线(例如示例 4.10),垂直线延伸到示例的整个内容,并在靠近文本或公式的地方结束于一个方形符号
  3. 可以在环境中插入表格、图形和其他浮动元素
  4. 此环境的最后一行可以是文本或公式;如果是公式,则应在其附近插入方形符号(QED)(同上但不是下一行)
  5. “示例 4.8”上方有一条粗体水平线。该线必须与“示例 4.8”的长度一样长;因此它不应该具有固定长度。
  6. 底部水平线应靠近最后一行最右边的单词。例如,在下图中,最后一行最右边的单词是“ 5685.”,因此我们希望将底部水平线(以及 QED 符号)绘制在该单词附近。

就像下面这张图一样

编辑:添加条件 5 和 6 在此处输入图片描述

答案1

对于请求 1、2、3 和 5,一个可能的解决方案是使用mdframed

\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{xcolor}
\usepackage{caption}
\usepackage{booktabs}
\usepackage[framemethod=tikz]{mdframed}
\usetikzlibrary{calc}
\usepackage{lipsum}

\newcounter{exa}[section]
\renewcommand\theexa{\thesection.\arabic{exa}}

\newlength\mylen% to hols the width of the title

\newmdenv[
  settings={\global\refstepcounter{exa}
            \settowidth\mylen{\bfseries\color{cyan}Example~\theexa}},
  leftline=false,
  linecolor=cyan,
  middlelinewidth=1pt,
  innertopmargin=30pt,
  innerbottommargin=10pt,
  innerleftmargin=0pt,
  skipbelow=1.3\topsep,
  singleextra={
    \path node[font=\bfseries\color{cyan},anchor=west,yshift=-12pt,inner sep=0pt] at (O|-P) {Example~\theexa};
    \draw[ultra thick,cyan] ([yshift=.5\pgflinewidth]O|-P) -- ++(\mylen,0pt);
    \draw[line width=2pt,white] (O) -- ($(P|-O)+(-2cm,0pt)$) node (A){};
    \node[anchor=south west,fill=cyan,inner sep=3pt,outer sep=0pt] at (A) {};
  },
  firstextra={
    \path node[font=\bfseries\color{cyan},anchor=west,yshift=-12pt,inner sep=0pt] at (O|-P) {Example~\theexa};
    \draw[ultra thick,cyan] ([yshift=.5\pgflinewidth]O|-P) -- ++(\mylen,0pt);
  },
  secondextra={
    \draw[line width=2pt,white] (O) -- ($(P|-O)+(-2cm,0pt)$) node (A){};
    \node[anchor=south west,fill=cyan,inner sep=3pt,outer sep=0pt] at (A) {};
  }
]{example}

\begin{document}

\section{Test Section}
\begin{example}
\lipsum[4]
\begin{center}
\captionof{table}{This is a table inside a \texttt{mdframed} environment}
\begin{tabular}{ccc}
\toprule
column1a & column2a & column3a \\
column1a & column2a & column3a \\
column1a & column2a & column3a \\
\bottomrule
\end{tabular}
\end{center}
\end{example}
\lipsum*[2-3]
\setcounter{exa}{23}% just for the example
\begin{example}
\lipsum*[1-4]
\begin{center}
\includegraphics[width=6cm]{ctanlion}
\captionof{figure}{This is a figure inside a \texttt{mdframed} environment}
\end{center}
\lipsum*[5-6]
\end{example}
\lipsum*[2]

\end{document}

在此处输入图片描述

不允许在mdframed环境中使用浮动;正如评论中提到的,这不是限制;事实上,这没有多大意义。但是,正如示例所示,仍然可以使用\captionof来自caption或者capt-of包。

CTAN 狮子绘画由 Duane Bibby 绘制。


SMH:由于参考问题,我编辑了代码。


另一种方法是建议包tcolorbox。使用最新版本的包,您可以使用以下代码。它具有与相同的限制mdframed

\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{mwe}%load graphix,lipsum,...
\usepackage{xcolor}
\usepackage{caption}
\usepackage{booktabs}
\usepackage{tcolorbox}
\tcbuselibrary{skins}
\tcbuselibrary{breakable}

\newcounter{example}[section]
\renewcommand\theexample{\thesection.\arabic{example}}

\tcbset{examplebox/.style={%
 title={Example~\refstepcounter{example}\theexample},
 breakable,
 leftrule=0pt,
 arc=0pt,
 colback=white,
 colframe=cyan,
 enhanced,
 colbacktitle=white,
 coltitle=cyan,
 titlerule=0pt,
 enlarge left by=-4mm,
 width=\linewidth+4mm,
 enlarge top by=2pt,
 overlay unbroken={\draw[cyan,line width=2pt] (frame.north west)++(0,0.25mm) --++(4cm,0pt);
                      \draw[white,line width=10mm] (frame.south west) --++(8cm,0pt) node (P) {};
                      \fill[cyan] (P) rectangle ++(6pt,6pt) ;},%
 overlay first={\draw[cyan,line width=2pt] (frame.north west)++(0,1pt) --++(4cm,0pt);},%
 overlay last={\draw[white,line width=10mm] (frame.south west) --++(8cm,0pt) node (P) {};
                       \fill[cyan] (P) rectangle ++(6pt,6pt) ;},%
 }%
}

\newenvironment{example}{%
  \tcolorbox[examplebox]}%
 {\endtcolorbox}

\begin{document}

\section{Test Section}

\begin{example}
\lipsum[4]
\begin{center}
\captionof{table}{This is a table inside a \texttt{tcolorbox} environment}
\begin{tabular}{ccc}
\toprule
column1a & column2a & column3a \\
column1a & column2a & column3a \\
column1a & column2a & column3a \\
\bottomrule
\end{tabular}
\end{center}
\end{example}
\lipsum*[2-3]
\begin{example}
\lipsum*[1-4]
\begin{center}
\includegraphics[width=6cm]{example-image-a}
\captionof{figure}{This is a figure inside a \texttt{tcolorbox} environment}
\end{center}
\lipsum*[5-6]
\end{example}
\lipsum*[2]

\end{document}

答案2

我不喜欢没有答案的问题

与请求 1 相关:

可以通过以下包来完成:

  • mdframed
  • tcolorbox

按字母顺序

与请求 2 相关:

可以通过以下包来完成:

  • mdframed
  • tcolorbox

按字母顺序

与请求 3 相关:

您不能在框架环境中使用浮动对象!您可以在此类环境中使用表格和图形。请注意,这些环境不会被上面列出的任何软件包破坏。

与请求 4 相关:

也许有可能,但我不知道。

相关内容