Я создал (скопировал) простую среду для создания рамки вокруг фрагмента текста. Среда использует среду mdframes
для того, чтобы поместить содержимое в рамку, и простой макрос changemargin
, который используется для добавления некоторого пустого пространства слева и справа от рамки.
\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}
Вот результат. Работает отлично.
Мой вопрос: могу ли я использовать свое окружение как команду?
\Boxed{title}{content}
решение1
Фактически, можно использовать mdframed
среду внутри команды, если она заключена во внутреннюю BoxedInternal
среду.
Я улучшил пример, добавив необязательный аргумент для BoxedInternal
окружения и \Boxed
макроса.
Вопрос в том, полезны ли вообще такие команды-оболочки.
\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}