包含自定义环境内容的命令

包含自定义环境内容的命令

我想创建一个将内容包装在命令中的环境,以便我可以写下这些:

\begin{mybox}
  content
\end{mybox}

并得到这个:

\psshadowbox{content}

当将其作为自定义命令执行时,没有问题,因为所有内容都在同一个块中定义,但由于自定义环境是在两个块中定义的,所以我必须将命令的结束括号放在另一个块中,而不是起始括号中,这显然不起作用:

\newenvironment{mybox}
{ \psshadowbox{ }
{ }             }

我不想为此使用命令的原因主要是可读性,因为内容可能很长,而仅仅用右括号表达不太清楚。

答案1

您需要先将内容存储到一个盒子中,然后使用以下命令使用该盒子:

\newenvironment{mybox}{%
   \begin{lrbox}{0}%
}{%
   \end{lrbox}%
   \psshadowbox{\usebox0}%
}

您还可以使用adjustbox此包/环境:

\begin{adjustbox}{precode=\psshadowbox}
 ...
\end{adjustbox}

答案2

您还可以使用该包framed来允许分页:

\documentclass[a4paper,12pt]{article} 
\usepackage{xcolor}
\usepackage{framed}
\usepackage{pstricks}
\newenvironment{mybox}{%
  \def\FrameCommand{\psshadowbox}%
  \MakeFramed {\FrameRestore}}%
 {\endMakeFramed}
\usepackage{lipsum}
\begin{document}
\begin{mybox}
\lipsum
\end{mybox}
\end{document}

答案3

一般来说你也可以使用environ提供环境内容的包\BODY,它可以传递给宏:

在此处输入图片描述

\documentclass{article}
\usepackage{environ}

\newcommand{\MyMacro}[1]{MyMacro = #1}%

\NewEnviron{mybox}{%
    \MyMacro{\BODY}%
}{}%

\begin{document}
\begin{mybox}
  content
\end{mybox}
\end{document}

针对您的特定应用\psshadow

在此处输入图片描述

% !TEX program = xelatex
\documentclass{article}
\usepackage{pstricks}
\usepackage{environ}

\newcommand{\MyMacro}[1]{\psshadowbox{#1}}%

\NewEnviron{mybox}{%
    \MyMacro{\BODY}%
}{}%

\begin{document}
\begin{mybox}
  content
\end{mybox}
\end{document}

相关内容