我正在尝试制作一个tcolorboxenvironment
。如果没有包tcolorbox
,我希望拥有一个与以下方式相同的环境declarenewentry
:
\newcommand{\declarenewentry}[1]{\medskip\noindent\framebox[\textwidth][l]{\qquad #1}\medskip}
这是我的问题:
是否存在与 作用相同的环境
framebox
?
答案1
下面展示了两种不同的方法来收集环境中的内容。第一种方法(declarenewenryENV
)用于lrbox
收集盒子里的东西,然后将盒子里的东西插入到你的\framebox
(为了方便起见,我只是\declarenewentry
在环境中调用)。
第二种方法 ( otherENV
) 将环境主体作为参数收集。这种方法编码起来要简单得多,但不允许\verb
在文档主体内逐字逐句地使用材料(因此没有 )。
\verb
总的来说,如果不需要支持,我认为应该优先考虑第二种方法。
\documentclass[]{article}
\newsavebox\declarenewentryBOX
\newenvironment{declarenewentryENV}
{\begin{lrbox}\declarenewentryBOX}
{%
\end{lrbox}%
\declarenewentry{\unhbox\declarenewentryBOX}%
}
\newcommand{\declarenewentry}[1]
{\medskip\noindent\framebox[\textwidth][l]{\qquad #1}\medskip}
\NewDocumentEnvironment{otherENV}{b}
{}
{\declarenewentry{#1}}
\usepackage{duckuments}
\begin{document}
\blindduck
\declarenewentry{abc is def}
\blindduck
\begin{declarenewentryENV}
abc is def
\end{declarenewentryENV}
\blindduck
\begin{otherENV}
abc is def
\end{otherENV}
\end{document}
所有三个调用(宏、环境收集一个框、环境收集主体作为参数)在上面显示的小型测试文档中显示完全相同的行为(您可能应该在宏中添加一个\par
之前)。\medskip
\declarenewentry
结果: