如何在环境中包装LaTeX命令?本质上,如何将\ somecommand {contents}转换为\ begin {somecommand} contents \ end {somecommand}?我在创建一个新的环境时已经尝试了显而易见的事情:
\newenvironment{somecommand}[0]{
\somecommand{
}
{
}
}
但这会导致花括号出现问题。让我举一个更具体的例子。假设您想要创建非常重要的环境,并且您希望使用命令emph来完成此任务。一个直截了当(但不正确)的解决方案是将内容写成
\newenvironment{very-important}[0]{
\emph{
}
{
}
}
这里的问题是该命令使用在环境中找到的信息,因此它不是环境的开放命令之一,也不是环境的关闭命令。问题是:你怎么能这样做?
答案 0 :(得分:20)
这可以使用environ包完成,如下所示:
\usepackage{environ} ... \NewEnviron{very-important}{\emph{\BODY}}
\BODY
包含环境的主体,环境可能是嵌套的。有关详细信息,请参阅文档。
答案 1 :(得分:10)
现在看来,我猜是什么问题。
\newenvironment{very-important}{\startimportant}{}
\def\startimportant#1\end{\emph{#1}\end}
\begin{very-important}
Something
\end{very-important}
此解决方案效果很好。 但恕我直言,将所有文本包装在环境中是个坏主意。为什么? 有两种方法可以对文本做些什么。 例如,您想要更改字体并使用斜体。
\textit{sentence written in italics}
{\it sentence written in italics\/}
有什么区别?问题是第一种方法使用第二种方法。
\it
宏更改字体,大括号}
将其更改回来。
\textit
宏读取完整参数,更改字体并再次插入参数:
\textit
大致定义如下(不完全相同)。
\def\texit#1{{\it#1\/}}
第一种方法总是做额外的工作。它读了两次论点。 几乎总是,你可以做出改变,然后你就可以回来了。
最终为什么要使用这个环境?使用宏。
\veryimportant{
Any thought
}
答案 2 :(得分:3)
更简单的方法可能是:
\newenvironment{somecommand}[0]{
\somecommand\bgroup
}
{
\egroup
}
说明:\bgroup
的作用类似于{
,而\egroup
的作用类似于}
。
答案 3 :(得分:1)
定义命令
\newcommnad{eqn}{1}{\begin{equation}#1\end{equation}}
会改变
\eqn{x^2=y}
到
\begin{equation}
x^2=y
\end{equation}
我认为
答案 4 :(得分:0)
新环境somecommand
定义宏\somecommand
。
您不能在内部使用名称为\somecommand
的宏。
此外你应该写
\newenvironment{name}{openning command}{closing commands}
而不是
\newenvironment{somecommand}[0]{ \somecommand{ } { } }
关闭命令显然有问题。