![更新答案2016-03-04](https://linux22.com/image/238132/%E6%9B%B4%E6%96%B0%E7%AD%94%E6%A1%882016-03-04.png)
我想知道是否有任何正式的环境可以在整个文本中指定“示例”。如果没有,您推荐哪些环境?
答案1
您可以使用amsthm
包。根据他们的建议(大多数人都使用这种方法),你应该将环境定义为
\theoremstyle{definition}
\newtheorem{exmp}{Example}[section]
然后使用
\begin{exmp}
This is the example.
\end{exmp}
但请注意,上述定义将为示例提供自己的计数器。如果你已经有使用计数器的定理和定义thm
,你可能要考虑使用
\newtheorem[thm]{exmp}
因为如果定理 3、引理 3、定义 3 和示例 3 放在不同的页面上,读者可能会感到非常困惑。
答案2
更新答案2016-03-04
这是使用 的替代方法tcolorbox
。此解决方案非常强大,因为它可以处理多种情况:一页、部分页面跨度和多页跨度。我将所有内容包装在一个\NewDocumentEnvironment
宏中,xparse
因为这样可以轻松识别输入应该是什么。
listings
使用 XeLaTeX 和2016-07-05 的用户须知
由于未知问题(见为什么分页符和列表 + tcolorbox + xelatex 之后文本会变成白色(可能是范围泄漏?)?),您应该在每个“testexample”环境之后明确重新应用颜色“黑色”,以确保您的文本在所有分页符条件下均按预期可见。 修复在这里:https://tex.stackexchange.com/a/308854/13552
\AfterEndEnvironment{testexample}{\color{black}} % Bugfix for unknown culprit. When tcolorbox wraps listings compiled with xelatex, subsequential text turns white https://tex.stackexchange.com/questions/308672/why-is-text-turning-white-possible-scope-leak-after-page-break-and-listings
示例语法
\begin{testexample}[<optional title>]
<content of example>
\end{testexample}
代码
如果需要,可以通过替换行来对示例进行编号
title={\exampletext: #1},% use \thetcbcounter to access the testexample counter text
和
title={\exampletext\ \thetcbcounter: #1},% use \thetcbcounter to access the testexample counter text
\documentclass{article}
\usepackage{fontspec}
\usepackage[most]{tcolorbox}
\newcounter{testexample}
\usepackage{xparse}
\usepackage{lipsum}
\def\exampletext{Example} % If English
\NewDocumentEnvironment{testexample}{ O{} }
{
\colorlet{colexam}{red!55!black} % Global example color
\newtcolorbox[use counter=testexample]{testexamplebox}{%
% Example Frame Start
empty,% Empty previously set parameters
title={\exampletext: #1},% use \thetcbcounter to access the testexample counter text
% Attaching a box requires an overlay
attach boxed title to top left,
% Ensures proper line breaking in longer titles
minipage boxed title,
% (boxed title style requires an overlay)
boxed title style={empty,size=minimal,toprule=0pt,top=4pt,left=3mm,overlay={}},
coltitle=colexam,fonttitle=\bfseries,
before=\par\medskip\noindent,parbox=false,boxsep=0pt,left=3mm,right=0mm,top=2pt,breakable,pad at break=0mm,
before upper=\csname @totalleftmargin\endcsname0pt, % Use instead of parbox=true. This ensures parskip is inherited by box.
% Handles box when it exists on one page only
overlay unbroken={\draw[colexam,line width=.5pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
% Handles multipage box: first page
overlay first={\draw[colexam,line width=.5pt] ([xshift=-0pt]title.north west) -- ([xshift=-0pt]frame.south west); },
% Handles multipage box: middle page
overlay middle={\draw[colexam,line width=.5pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },
% Handles multipage box: last page
overlay last={\draw[colexam,line width=.5pt] ([xshift=-0pt]frame.north west) -- ([xshift=-0pt]frame.south west); },%
}
\begin{testexamplebox}}
{\end{testexamplebox}\endlist}
\begin{document}
\lipsum[1]
\begin{testexample}[Latin Text]
\lipsum[2]
\end{testexample}
\lipsum[3]
\begin{testexample}
\lipsum[2]
\end{testexample}
\end{document}
输出
添加数字
您可能不希望此示例环境中有一个浮点数,因为它本身就是一个盒子。
我可能会添加caption
包并像这样实现它:
\begin{testexample}
\centering
\includegraphics[width=!,height=2in]{mountain}
\captionof{figure}{Wildspitze 3,770 m (12,370 ft)}
\end{testexample}
输出
旧答案
这里有一个替代方法,使用mdframed
and xparse
(xparse
不是绝对必要的,但由于它的灵活性,我采用它作为定义命令和环境的主要语法)
输入
\documentclass{article}
\usepackage{fontspec}
\usepackage{mdframed} % Add easy frames to paragraphs
\usepackage{lipsum} % For dummy text
\usepackage{xcolor}
\usepackage{xparse} % Add support for \NewDocumentEnvironment
\definecolor{graylight}{cmyk}{.30,0,0,.67} % define color using xcolor syntax
\newmdenv[ % Define mdframe settings and store as leftrule
linecolor=graylight,
topline=false,
bottomline=false,
rightline=false,
skipabove=\topsep,
skipbelow=\topsep
]{leftrule}
\NewDocumentEnvironment{example}{O{\textbf{Example:}}} % Define example environment
{\begin{leftrule}\noindent\textcolor{graylight}{#1}\par}
{\end{leftrule}}
\begin{document}
\begin{example}
\lipsum[1]
\end{example}
\begin{example}[Example]
\lipsum[1]
\end{example}
\end{document}
输出
(fontspec
因为我用 XeLaTeX 编译)
答案3
您可以按如下方式创建一个简单的示例环境:
\documentclass{article}
\usepackage{lipsum}
\newcounter{examplecounter}
\newenvironment{example}{\begin{quote}%
\refstepcounter{examplecounter}%
\textbf{Example \arabic{examplecounter}}%
\quad
}{%
\end{quote}%
}
\begin{document}
\begin{example}\label{ex:simple}
A simple example environment
\lipsum[1]
\end{example}
Some text: \lipsum[4]
\begin{example}\label{ex:another}
Another example
\end{example}
Example~\ref{ex:another} comes after example~\ref{ex:simple}
\end{document}
因此,您拥有的环境基本上只是quote
具有自己的计数器的环境的包装器。您可以用其他内容替换引号,以根据自己的喜好添加缩进,但基本思想就在那里。
如果您希望将节号作为示例的一部分(例如示例 1.2),那么就需要做更多的工作,也许像amsthm
或这样的内容ntheorem
是更好的选择......
请注意,这\refstepcounter
会增加环境的计数器,并且还会使环境对于引用机制“可见”。