2009-12-09 71 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