3

I want to define a custom environment example. This is not a problem at all, the only thing I humble upon is the caption (short title below the element) and its listing in the table of contents or rather "List of examples". I want to get a caption like this:

Example <normal-counter>: My caption

And in the appendix a "list of examples". In other words, copy the entire stuff for figures to my example environment. I'm sure that there is a solution and that there is also an answer within tex SE, but I'm not able to find it :-( Thank you!

PS: I always prefer avoiding additional packages :-)

cmhughes
  • 100,947
strauberry
  • 3,255
  • With caption you mean something like a header, not a lengthy description what is contained in the example, being something like a section title? –  Jun 10 '14 at 07:48
  • I modified my question. Yes, I mean a header. The same thing as the caption of a figure, similar to "Figure x: UML diagram depicting packages" – strauberry Jun 10 '14 at 07:56

1 Answers1

2

Here's a solution that does the following:

  • it starts a new file, \jobname.exs, that stores the titles of your examples; this uses the command \@starttoc
  • it creates a new environment, example, that can be used either as

    \begin{example}{goes into the list of examples}
        \lipsum[1]
    \end{example}
    

    in which case the argument is written to the \jobname.exs file; alternatively, you can use

    \begin{example}[optional caption]{goes into the list of examples}
    \lipsum[1]
    \end{example}
    

    in which case the optional caption will be written to \jobname.exs

You requested that no packages be used, so I have used a simple list environment to help with the definition of the look of the example environment (see Definitive guide to trivlists) and you'll notice that there is a check to see if #1 is empty, using \ifx\\#1\\ as detailed in Check for empty macro argument and the links within.

The example environment could easily be tweaked if you change your mind later and want to load a package to help with it, e.g ntheorem, amsthm, mdframed, tcolorbox, etc, but for the moment, here's how it looks:

screenshot

Here's the complete code - compile it twice with pdflatex, or otherwise just run it once with arara which does the double compilation for you.

% 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}
cmhughes
  • 100,947