2009-12-09 75 views
18

如何在环境中包装LaTeX命令?实质上,我如何将\ somecommand {contents}转换为\ begin {somecommand} contents \ end {somecommand}?我试图创建一个新的环境,因此:在环境中包装LaTeX命令

\newenvironment{somecommand}[0]{ 
    \somecommand{ 
} 
{ 
    } 
} 

但这会导致大括号出现问题。让我举一个更具体的例子。假设你想创建非常重要的环境,并且你想使用命令emph来实现这一点。一个简单(但不正确的)的解决办法是写的东西作为

\newenvironment{very-important}[0]{ 
    \emph{ 
} 
{ 
    } 
} 

这里的问题是,该命令可用于信息在环境中发现的,所以它不是环境的打开命令之一也不是关闭环境的命令。问题是:你怎么能做到这一点?

+0

问一个关于你的colorbox的新问题,我告诉你最好的解决方案,而不用两次读取参数。 – 2009-12-09 13:36:09

回答

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 
} 
+0

谢谢你的解决方案!实际上,我不需要像强调文本那样的环境。提供这个例子的主要原因是因为大多数人会理解这一点,使问题和答案适用于许多人。我个人的用途是在新环境中嵌入一个colorbox和一些对齐方式。由于colorbox是一个命令,我不知道该怎么做。尽管如此,对于我的使用来说,使用环境更有意义,而不是最不重要的,因为它可以防止混乱和花括号的倾盆大雨,从而使后期的编辑变得相当困难。谢谢! – kvaruni 2009-12-09 13:30:06

-1

新环境somecommand定义宏\somecommand。 里面不能使用同名的\somecommand宏。

而且你应该写

\newenvironment{name}{openning command}{closing commands} 

而不是

\newenvironment{somecommand}[0]{ \somecommand{ } { } } 

你显然有结束命令的问题。

+0

你重申了我的问题,所以我修改了我的原始问题以更好地解释我遇到的问题。我希望这能够澄清它!不管怎么说,还是要谢谢你! – kvaruni 2009-12-09 12:14:37

19

这可以用ENVIRON包来完成如下:

 
\usepackage{environ} 
... 
\NewEnviron{very-important}{\emph{\BODY}} 

\BODY包含环境的主体,和环境可以嵌套。有关更多详情,请参阅文档。

+0

谢谢,虽然其他解决方案有效,但您提出的解决方案当然更简单! – kvaruni 2009-12-11 14:10:57

1

定义命令

\newcommnad{eqn}{1}{\begin{equation}#1\end{equation}} 

将改变

\eqn{x^2=y} 

\begin{equation} 
    x^2=y 
\end{equation} 

我觉得

3

一个简单的方法可以是:

\newenvironment{somecommand}[0]{ \somecommand\bgroup } { \egroup }

说明:\bgroup作品像{\egroup作品像}

+2

不适用于所有命令,例如'\ fbox' – Hotschke 2015-08-05 14:44:56