Ich möchte einen Befehl definieren, der \begin{...}
eine Umgebung startet (erstellt), wenn sich der Benutzer nicht in einer solchen Umgebung befindet, und sie schließt ( \end{...}
erstellt), wenn sich der Benutzer in einer solchen Umgebung befindet, zum Beispiel:
\myenum
\item Item A
\item Item B
\myenum
Das bedeutet natürlich, dass die myenum
Umgebung nicht verschachtelt werden kann. Weiß jemand, wie man einen solchen Befehl definiert?
Antwort1
Ich bin nicht sicher, wie nützlich das wäre; eine Verschachtelung ist natürlich nicht möglich.
\documentclass{article}
\usepackage{pdftexcmds}
\makeatletter
\catcode`*=\active
\def*{\@ifnextchar*{\check@enumerate}{\item}}
\def\check@enumerate{%
\ifnum\pdf@strcmp{\@currenvir}{enumerate}=\z@
% we're already in enumerate
\end{enumerate}
\else
\begin{enumerate}
\fi
\@gobble
}
\makeatother
\begin{document}
Some text which we try to make long enough to reach
the right margin, so that we can see a line break
before the \texttt{enumerate} environment.
**
* First
* Second
**
Some other text which we try to make long enough to reach
the right margin, so that we can see a line break
after the \texttt{enumerate} environment.
\end{document}
Eine expl3
Implementierung desselben:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\cs_new:Nn \carucel_item_or_enum:
{
\peek_charcode_remove:NTF *
{
\carucel_enum:
}
{
\item
}
}
\cs_new:Nn \carucel_enum:
{
\tl_if_eq:vnTF { @currenvir } { enumerate }
{
\end{enumerate}
}
{
\begin{enumerate}
}
}
\cs_generate_variant:Nn \tl_if_eq:nnTF { v }
\char_set_catcode_active:N *
\cs_set_eq:NN * \carucel_item_or_enum:
\ExplSyntaxOff
\begin{document}
Some text which we try to make long enough to reach
the right margin, so that we can see a line break
before the \texttt{enumerate} environment.
**
* First
* Second
**
Some other text which we try to make long enough to reach
the right margin, so that we can see a line break
after the \texttt{enumerate} environment.
\end{document}