如何定义一个名为“example”的环境以便:
- 可以跨页
- 在“示例 \chap.\no”上方有一条水平线(例如示例 4.10),垂直线延伸到示例的整个内容,并在靠近文本或公式的地方结束于一个方形符号
- 可以在环境中插入表格、图形和其他浮动元素
- 此环境的最后一行可以是文本或公式;如果是公式,则应在其附近插入方形符号(QED)(同上但不是下一行)
- “示例 4.8”上方有一条粗体水平线。该线必须与“示例 4.8”的长度一样长;因此它不应该具有固定长度。
- 底部水平线应靠近最后一行最右边的单词。例如,在下图中,最后一行最右边的单词是“
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 相关:
也许有可能,但我不知道。