我想创建一个将内容包装在命令中的环境,以便我可以写下这些:
\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}