我想定义一个自定义环境例子。这根本不是问题,我唯一需要注意的是标题(元素下方的简称)及其在目录中的列表,或者更确切地说是“示例列表”。我想要得到这样的标题:
例如<normal-counter>
:我的标题
附录中有一个“示例列表”。换句话说,将整个图形内容复制到我的示例环境中。我确信有一个解决方案,并且 tex SE 中也有一个答案,但我找不到它 :-( 谢谢!
附言:我总是喜欢避免使用额外的软件包:-)
答案1
以下是一个执行以下操作的解决方案:
- 它启动一个新文件,,
\jobname.exs
用于存储示例的标题;这使用命令\@starttoc
它创建了一个新的环境,
example
可以用作\begin{example}{goes into the list of examples} \lipsum[1] \end{example}
在这种情况下,参数将写入文件
\jobname.exs
;或者,您可以使用\begin{example}[optional caption]{goes into the list of examples} \lipsum[1] \end{example}
在这种情况下,遗嘱
optional caption
写给\jobname.exs
您要求不使用任何包,因此我使用了一个简单的list
环境来帮助定义example
环境的外观(请参阅琐事清单终极指南),你会注意到有一个检查来判断是否#1
为空,使用\ifx\\#1\\
详细说明检查空的宏参数以及其中的链接。
example
如果你稍后改变主意并想要加载一个包来帮助它,可以很容易地调整环境,例如ntheorem
,amsthm
,mdframed
,tcolorbox
等等,但目前它看起来是这样的:
这是完整的代码 - 使用 编译两次pdflatex
,或者使用 运行一次arara
它为您完成双重编译。
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage{lipsum}% just to generate text
% this sets up \jobname.exs which will store the
% contentslines added on each example or examples
\makeatletter
\newcommand\listexamplename{List of Examples}
\newcommand\listofexamples{%
\section*{\listexamplename}\@starttoc{exs}}
\makeatother
\newcounter{example}
\newenvironment{example}[2][]{\refstepcounter{example}%
\ifx\\#1\\ % if #1 is empty
\addcontentsline{exs}{subsection}{\theexample~#2}%
\else
\addcontentsline{exs}{subsection}{\theexample~#1}%
\fi
\begin{list}{}{% options
\setlength{\leftmargin}{0mm}% leftmargin
\parsep\parskip% space between paragraphs within an item
\setlength{\itemsep}{-\parsep}% space between items
}
\item {\bfseries Example \theexample: ~#2}
\item}{\end{list}}
\begin{document}
\begin{example}{goes into the list of examples}
\lipsum[1]
\end{example}
\begin{example}[optional caption]{goes into the list of examples}
\lipsum[1]
\end{example}
\appendix
\listofexamples
\end{document}