给定任何带有一个参数的命令\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}