如何使用一个参数的命令创建环境

如何使用一个参数的命令创建环境

给定任何带有一个参数的命令\Command{<arg>},我希望能够定义一个环境指令系统这样\begin{EnCommand} <arg> \end{EnCommand}就有同样的效果。

当然,从相反的方向来看,这很容易实现,但我还没有找到一种(通用的)方法来做到这\fbox{...}一点\begin{framed} ... \end{framed}。我对能够处理特定情况的包不感兴趣,我正在寻找一种通用方法。有没有简单的方法可以做到这一点?

答案1

最简单的方法,基本上就是一行:

\newcommand{\Command}[1]{\fbox{#1}} % this is the command

\NewDocumentEnvironment{EnCommand}{+b}{\Command{#1}}{}

完整示例。

\documentclass{article}

\newcommand{\Command}[1]{\fbox{#1}} % this is the command

\NewDocumentEnvironment{EnCommand}{+b}{\Command{#1}}{}

\begin{document}

Here \Command{abc} with the command

Here \begin{EnCommand}abc\end{EnCommand} with the environment

Here \begin{EnCommand} abc\end{EnCommand} with the environment

Here \begin{EnCommand}abc \end{EnCommand} with the environment

Here \begin{EnCommand} abc \end{EnCommand} with the environment

Here 
\begin{EnCommand}
abc
\end{EnCommand}
with the environment

\end{document}

正如您从图中看到的,两侧的空间都被修剪了。

在此处输入图片描述

答案2

将宏转换为环境的简单方法是使用 lrbox

如果您使用框寄存器 0-9 而不是新框,它将自动恢复。但可以在环境内对其进行全局更改。

\documentclass{article}
\newsavebox{\FBOX}
\newenvironment{Fbox}{\begin{lrbox}{\FBOX}}{\end{lrbox}\fbox{\usebox\FBOX}}

\begin{document}

\begin{Fbox} This is a test \end{Fbox}

\Fbox This is a test\endFbox

\end{document}

相关内容