Ich habe eine einfache Umgebung erstellt (kopiert), um einen Rahmen um einen Textabschnitt zu erstellen. Die Umgebung verwendet die mdframes
Umgebung, um den Inhalt einzurahmen, und ein einfaches Makro changemargin
, das verwendet wird, um links und rechts des Rahmens etwas Leerraum hinzuzufügen.
\documentclass{article}
\usepackage[utf8]{inputenc}
% mdframe: put a certain amount of text in a box
\usepackage[framemethod=default]{mdframed}
\usepackage{showexpl}
\mdfdefinestyle{exampledefault}{
rightline=true,
innerleftmargin=10,
innerrightmargin=10,
frametitlerule=true,
frametitlerulecolor=black,
frametitlebackgroundcolor=white,
frametitlerulewidth=1pt,
}
% macro to change margins
\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
\let\endchangemargin=\endlist
% custom environment
\newenvironment{Boxed}[1]
{
\begin{changemargin}{2cm}{2cm}
\begin{mdframed}[style=exampledefault, frametitle={#1}]
}
{
\end{mdframed}
\end{changemargin}
}
\usepackage{lipsum} % add some text
\begin{document}
\lipsum
\begin{Boxed}{I'm the title}
I'm the content. I've a nice frame around me.
\end{Boxed}
\end{document}
Das ist das Ergebnis. Es funktioniert perfekt.
Meine Frage ist, kann ich meine Umgebung wie einen Befehl verwenden?
\Boxed{title}{content}
Antwort1
Es ist tatsächlich möglich, eine mdframed
Umgebung innerhalb eines Befehls zu verwenden, wenn dieser in eine interne BoxedInternal
Umgebung gekapselt ist.
Ich habe das Beispiel mit einem optionalen Argument für die BoxedInternal
Umgebung und \Boxed
das Makro verbessert.
Die Frage ist, ob solche Wrapper-Befehle generell sinnvoll sind.
\documentclass{article}
\usepackage[xcolor]{mdframed}
\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
\let\endchangemargin=\endlist
\mdfdefinestyle{exampledefault}{backgroundcolor=yellow!10!white}
\newenvironment{BoxedInternal}[2][]
{%
\begin{changemargin}{0cm}{0cm}%
\begin{mdframed}[style=exampledefault, frametitle={#2},#1]
}{%
\end{mdframed}%
\end{changemargin}%
}
\newcommand{\Boxed}[3][]{%
\begin{BoxedInternal}[#1]{#2}
#3
\end{BoxedInternal}%
}
\begin{document}
\Boxed{Foo}{Foobar}
\end{document}